众所周知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)