众所周知Python可以用来写爬虫抓取数据。而这个例子是我学习写的第一个简单的爬虫--抓取360搜索引擎搜索时的联想词集合。我们在使用搜索引擎搜索东西时,当我们输入一个词之后搜索框下方会出现一系列联想词如图所示。
我们想利用Python代码把这些联想词抓取出来,首先我们在火狐浏览器中,查看该页面的原始html文档,在搜索引擎中输入要查询的关键词如:NBA,我们可以看到Request URL中有一个我们要请求的url:https://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word,obdata&word=NBA。如图所示:
我们将这个URL输入到地址栏中网页返回了联想词的集合如图所示:
因此我们可以利用这个URL,通过替换地址最后“word=”后面的关键词来进行联想词的抓取工作。根据这个思路我们可以来实现我们的Python代码。
#coding utf-8
import urllib2
import urllib
import re
import time
from random import choice
#代理ip地址list
iplist=['1.9.189.65:3128','27.24.158.130.80','27.24.158.154:80']
#要抓取的搜索关键字list
keywords=["NBA","CBA"]
for item in keywords:
#随机选择代理ip地址
ip=choice(iplist)
word=urllib.quote(item)
url="https://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-
8&format=json&fields=word,obdata&word="+word
headers={
"GET":url,
"Host":"sug.so.360.cn",
"Referer":"https://www.so.com/",
"User_Agent":" Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0)
Gecko/20100101 Firefox/37.0"
}
#使用随机代理ip地址访问URL
proxy_support=urllib2.ProxyHandler({'http':'http://'+ip})
opener=urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)
req=urllib2.Request(url)
for key in headers:
req.add_header(key,headers[key])
html=urllib2.urlopen(req).read()
#提取返回数据
result=re.findall("\"(.*?)\"",html)
#去掉集合中的一些无用数据
r=('query','word','version','result','3.2.1','rec')
for item in result:
if item not in r:
print item
#抓取一次后休息3秒
time.sleep(3)