python爬虫:案例一:360指数

pip installbeautifulsoup4

pip install requests

pip install selenium

下载 phantomjs(phantoms是一个无界面浏览器,用来解析js代码)

给 firefox 安装 firebug

创建一个目录名为baidupc

cd baidupc

创建虚拟环境

virtualenv macp

激活虚拟环境

进入macp/Scripts下输入命令

activate

mac下进入/macp/bin

source activate

虚拟环境的好处在于环境独立,可以随便折腾也不影响自己原有的环境

将phantomjs-2.1.1-macosx.zip解压,把bin目录下的phantoms拷贝到 baidupc/macp/bin下面

(phantomjs根据不同系统下载不同压缩包,windows下虚拟环境的目录应该是baiducp\macp\Script)

案例1:360指数

360指数的数据显示很直观,你在首页输入一个关键字再看一下url就知道了

url:http://index.so.com/#trend?q=欢乐颂

(其实真实的url为:http://index.so.com/#trend?q=%E6%AC%A2%E4%B9%90%E9%A2%82 ,后面的中文要编码)

加上日期查询的url有三种:

http://index.so.com/#trend?q=%E6%AC%A2%E4%B9%90%E9%A2%82&t=7

http://index.so.com/#trend?q=%E6%AC%A2%E4%B9%90%E9%A2%82&t=30

http://index.so.com/#trend?q=%E6%AC%A2%E4%B9%90%E9%A2%82&t=201603|201605

了解到这些信息,我们再从html中找到需要的数据节点就知道如何获取基本数据了

#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import urllib
from selenium import webdriver

class Qh():
    def pc(seif,name,date='7'):
       #时间默认7天,参数’30’为三十天,’201603|201605’为自定时月份
        url_name=urllib.quote(name)
        #urllib.quote( )将中文url编码
        url='http://index.so.com/#trend?q='+url_name+'&t='+date
        driver = webdriver.PhantomJS()
        #webdriver.PhantomJS() 调用PhantomJS浏览器
        driver.get(url)
        sszs=driver.find_element_by_xpath('//*[@id="bd_overview"]/div[2]/table/tbody/tr/td[1]').text
        sszshb=driver.find_element_by_xpath('//*[@id="bd_overview"]/div[2]/table/tbody/tr/td[2]').text
        sszstb=driver.find_element_by_xpath('//*[@id="bd_overview"]/div[2]/table/tbody/tr/td[3]').text
       #搜索指数,搜索指数环比,搜索指数同比(均为全国数据)
        driver.quit
       #quit( )关闭
        return sszs+'|'+sszshb+'|'+sszstb

s=Qh()
print s.pc('欢乐颂')
print s.pc('欢乐颂','30')
print s.pc('欢乐颂','201603|201605')

结果:

1,392,286|36.28%|>1000%

657,310|>1000%|>1000%

657,310|>1000%|>1000%

(这里有个很有意思的地方,网上显示的201603|201605的数据与7天数据一样,而我爬下来的数据201603|201605与30天一样,当然按常理的确是应该与30天数据一致,但网页的显示不知道为什么和7天一致)

以上是最简单的版本,观察360指数的页面会发现数据可以选择地区,默认是全国,以上的程序爬取到的只是全国的数据,想要得到各地的数据,我们需要分析一下

打开 firefox 的 firebug 点击’更改’,选择’浙江‘,会发现这是一段ajax,我们在firebug中找XHR,会找到一个GET的地址,我们将url复制到浏览器中会得到一段JSON,这就是AJAX返回的数据

url:http://index.so.com/index.php?a=overviewJson&q=欢乐颂&area=浙江

(其实真实url:http://index.so.com/index.php?a=overviewJson&q=%E6%AC%A2%E4%B9%90%E9%A2%82&area=%E6%B5%99%E6%B1%9F )

返回的json数据:

{"status":0,"data":[{"query":"\u6b22\u4e50\u9882","data":{"week_year_ratio":">1000%","month_year_ratio":">1000%","week_chain_ratio":"31.52%","month_chain_ratio":">1000%","week_index":97521,"month_index":47646}}],"msg":false}

我们会发现只有七天和一个月的搜索指数,搜索指数环比,搜索指数同比

代码:

#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import urllib
from selenium import webdriver

class Qh():
    def pc(seif,name,dq='全国'):
        url_name=urllib.quote(name)
        dq_name=urllib.quote(dq)
        url='http://index.so.com/index.php?a=overviewJson&q='+url_name+'&area='+dq_name
        driver = webdriver.PhantomJS()
        driver.get(url)
        json=driver.find_element_by_xpath('/html/body/pre').text
        driver.quit
        return json

s=Qh()
print s.pc('欢乐颂')
print s.pc('欢乐颂','浙江')

结果:

{"status":0,"data":[{"query":"\u6b22\u4e50\u9882","data":{"week_year_ratio":">1000%","month_year_ratio":">1000%","week_chain_ratio":"36.28%","month_chain_ratio":">1000%","week_index":1392286,"month_index":657310}}],"msg":false}
{"status":0,"data":[{"query":"\u6b22\u4e50\u9882","data":{"week_year_ratio":">1000%","month_year_ratio":">1000%”,"week_chain_ratio":"31.52%","month_chain_ratio":">1000%","week_index":97521,"month_index":47646}}],"msg":false}

week_year_ratio为7天搜索指数同比

month_year_ratio为30天搜索指数同比

week_chain_ratio为7天搜索指数环比

month_chain_ratio为30天搜索指数环比

week_index为7天搜索指数

month_index为30天搜索指数

如果要爬一堆关键字的话可以写一个配置文件,然后循环去抓取数据

如果只想要自己想要的数据而不是json 的话可以解析json,再存储到数据库或者文件中

关于趋势图和关注度,我现在还不知道怎么去取数据,需求图谱 和 人群特征 我看了一下数据可以从html中取得

一般这个数据分析到写好代码一天左右,如果要完善代码应该需要两三天左右,测试代码那就不好说了,代码可能会隐藏一些自己忽略的bug,毕竟测试是最费时间的事儿

时间: 2024-11-01 18:30:34

python爬虫:案例一:360指数的相关文章

python爬虫之采集360搜索的联想词

有个视频专门讲过这个爬虫,但是太罗嗦了,顺便整理下,而且到现在,360也不傻,已经进化了,采用原来的方式,多少有点bug,这个后面会说.正题如下: 语言:python2.7.6 模块:urllib,urllib2,re,time 目标:输入任意词,抓到其联想词 版本:w1 原理:在360搜索主页:http://www.so.com/,当你输入"科技"时,搜索框会列出相应的联想词或者短语,我们就是要得到这些联想词,那就要爬360的搜索引擎了.在输入关键词之前,我们在主页右键,"

python爬虫之采集——360联想词W2版本

http://blog.csdn.net/recsysml/article/details/30541197,我的这个博文介绍了相应的简单的方法做一个联想词的爬虫,而且还承诺了以下优化: 下一版本的优化考虑: 1.让用户自助输入关键i词,不要事先定义关键词列表 2.按回车进行下一个关键词输入 3.输出结果保存txt文本 4.用户输入exit,程序退出 开工: 1.让用户输入关键词,首先想到raw_input(),这个很好解决 2.回车进行下一个关键词输入,这个其实用一个print打印你的引导就行

python爬虫案例-乌托家家具公司数据爬取

这个案例主要是在乌托家网站上爬取家具公司的数据,用的方法是requests模块和xpath语法.代码如下: 1 # Author:K 2 import requests 3 from lxml import etree 4 import os 5 6 HEADERS = { 7 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.372

python爬虫案例-爬取当当网数据

输入关键字,爬取当当网中商品的基本数据,代码如下: 1 # Author:K 2 import requests 3 from lxml import etree 4 from fake_useragent import UserAgent 5 import re 6 import csv 7 8 9 def get_page(key): 10 for page in range(1,50): 11 url = 'http://search.dangdang.com/?key=%s&act=in

Python爬虫案例演示:Python多线程、多进程、协程

很多时候我们写了一个爬虫,实现了需求后会发现了很多值得改进的地方,其中很重要的一点就是爬取速度.本文 就通过代码讲解如何使用 多进程.多线程.协程 来提升爬取速度.注意:我们不深入介绍理论和原理,一切都在代码中. 二.同步 首先我们写一个简化的爬虫,对各个功能细分,有意识进行函数式编程.下面代码的目的是访问300次百度页面并返回状态码,其中 parse_1 函数可以设定循环次数,每次循环将当前循环数(从0开始)和url传入 parse_2 函数. import requests def pars

Python 爬虫案例-web微信登陆与消息发送

首先回顾下网页微信登陆的一般流程 1.打开浏览器输入网址 2.使用手机微信扫码登陆 3.进入用户界面 1.打开浏览器输入网址 首先打开浏览器输入web微信网址,并进行监控: https://wx.qq.com/ 可以发现网页中包含了一个新的url,而这个url就是二维码的来源. https://login.weixin.qq.com/qrcode/wbfd1Z-a0g== 可以猜测一下获取url的一般网址就是https://login.weixin.qq.com/qrcode,而wbfd1Z-a

Python爬虫(十一)_案例:使用正则表达式的爬虫

本章将结合先前所学的爬虫和正则表达式知识,做一个简单的爬虫案例,更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5_1.html 打开之后,不难看出里面一个一个非常有内涵的段子,当你进行翻页的时候,注意url地址的变化: 第一页url: http: //www.neihan8.com/article/list_

Python爬虫(十五)_案例:使用bs4的爬虫

本章将从Python案例讲起:所使用bs4做一个简单的爬虫案例,更多内容请参考:Python学习指南 案例:使用BeautifulSoup的爬虫 我们已腾讯社招页面来做演示:http://hr.tencent.com/position.php?&start=10#a 使用BeautifulSoup4解析器,将招聘网页上的职位名称.职位类别.招聘人数.工作地点.时间.以及每个职位详情的点击链接存储出来. #-*- coding:utf-8 -*- from bs4 import Beautiful

Python 简单爬虫案例

Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a word') param = { 'query':wd } response = requests.get(url=url,params=param) page_text = response.content fileName = wd+'.html' with open(fileName,'wb') as