Python抓取搜索引擎聯想詞

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章