网上看过抓取360搜索联想词的教程,在此修改了一些小东西,练习下抓百度关键字联想词,代码很简单,主要是思路!
大概思路:
1. http抓包分析,工具很多,这边用chrome 自带工具抓取
2. 构造http请求(添加代理,可选)
3. 对结果进行正则匹配,输出
1. 先说下抓包,打开www.baidu.com,右键--.>审查元素,chrome 下栏会多个拦截窗口,如下:
2. 查看Network 下的 Headers 和 Response
我们只需要把红框中的内容构造出来,并提交服务器就可以获取到关键字列表
关键字列表
3. 正则匹配,这个比较简单吧
代码实现:
#!/usr/bin/python
#coding:utf-8
import urllib2 #Request 构造请求,官网文档 http://docs.python.org/library/urllib2
import urllib #用于中文编码
import re #正则模块
import sys #系统模块
from random import choice #随机选择
proxy_list = ['183.129.198.248:80','183.129.198.236:80','183.129.198.228:80'] #代理IP,可自行百度免费代理IP,可选
keyword = urllib.quote(sys.argv[1]) #对传入的参数编码,比如输入中文字符
proxy_ip = choice(proxy_list) #随机从代理IP列表获取一个IP
headers={ #构造headers,这里用到字典
"Host":"suggestion.baidu.com",
"Referer":"http://www.baidu.com/",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"
}
##构造请求
url = "http://suggestion.baidu.com/su?wd=" + keyword + "&p=3"
req = urllib2.Request(url)
for key in headers:
req.add_header(key,headers[key])
##代理部分
proxy_handler = urllib2.ProxyHandler({'http': 'http://'+ proxy_ip})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
##发送构造请求,读取返回内容
res = urllib2.urlopen(req).read()
match_word = re.findall("\"(.*?)\"",res) #匹配联想词
for word in match_word:
word = word.decode('gbk') #这里发现我的xshell采用utf-8会乱码,所以先解掉gbk编码
print word
实现测试: