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