python爬蟲之採集360搜尋的聯想詞

2022-09-24 02:51:10 字數 2843 閱讀 6888

語言:python2.7.6

模組:urllib,urllib2,re,time

目標:輸入任意詞,抓到其聯想詞

版本:w1

原理:在360搜尋主頁:當你輸入」科技「時,搜尋框會列出相應的聯想詞或者短語,我們就是要得到這些聯想詞,那就要爬360的搜尋引擎了。在輸入關鍵詞之前,我們在主頁右鍵,」審查元素「——」network「——」name「,輸入之後,下面會出現相應的超連結,我們只觀察」headers「」priview「,」headers「下我們可以看到」「request url」和頭資訊(主機,**之類的),「priview」中看到乙個我輸入的例子:

suggest_so(,,,,"},,,,,],"version":"a"});

很明顯,我們只要抓到裡面的詞即可,忘了交代,在request url中,有乙個鏈結:我們輸入很多次發現,變得只是「%e7%a7%91%e6%8a%80%20」部分,也就是說前面的部分不變,我們可以直接拿來用,後面的部分隨著輸入的關鍵詞不同而變化,這是一種url編碼,可以用urllb.quote()方法實現。

操作:1.加頭資訊,讀取網頁,相關方法:urllib2.request(),urllib2.urlopen(),urllib2,urlopen().read()

2.正則匹配:方法:re模組的相關用法,各抒己見。。

**如下:

#coding:utf-8

import urllib

import urllib2

import re

import time

gjc = urllib.quote("科技")

url = ""+gjc

print url

req = urllib2.request(url)

html = urllib2.urlopen(req).read()

unicodepage = html.decode("utf-8")

#正規表示式,findall方法返回乙個列表

ss = re.findall('"word":\"(.*?)\"',unicodepage)

for item in ss:

print item

結果:如果不加unicodepage = html.decode("utf-8") ,返回值會穿插一些亂碼,下面我們驗證下,我們做的對不對,開啟360搜尋,輸入「科技」,結果如下:

大家不要糾結,第乙個和第二個關聯詞的順序,我第二次請求的時候就變成了上圖的結果,再一次請求,又變回來了,可能是360在變吧,大家可以用其他關鍵詞試試。

好,大體框架已經實現,這是個最初版本,還不能完全無限制使用,我們要做的是暢通無阻,那麼存在什麼問題呢?

問 題:1.多次請求會出現乙個錯誤,大概代號為1005,意思百度了下,好像是說**會限制非人為的請求,那我們要偽裝成使用者正常開啟**的行為,我們要用到頭資訊(這是我自己習慣叫的,我們採用「request headers」裡面的資訊即可

2.請求過快也可能被遮蔽,所以要在每一次請求之後讓爬蟲休息一下,這就是time.sleep()的作用

3.即使這樣,也有被遮蔽的可能,必殺技:使用ip**伺服器,百度ip**,一大堆免費的,方法:見urllib2 api example

優化的**如下:

#coding:utf-8

#---------------------

# 程式:爬蟲採集360搜尋關聯詞

# 語言:python2.7

# 版本:w1

# 時間:2014-06-14

# 作者:wxx

#---------------------

import urllib

import urllib2

import re

import time

from random import choice

#ip**列表

iplist = ["14.29.117.36:80","222.66.115.229:80","59.46.72.245:8080"]

ip = choice(iplist)

#print ip

#關鍵詞列表,順序搜尋

list = ["集團","科技","python"]

for m in list:

#quote將m轉變成url編碼

gjc = urllib.quote(m)

url = ""+gjc

#頭資訊

headers =

#使用ip**伺服器

proxy_handler = urllib2.proxyhandler()

opener = urllib2.build_opener(proxy_handler)

urllib2.install_opener(opener)

req = urllib2.request(url)

for key in headers:

req.add_header(key,headers[key])

html = urllib2.urlopen(req).read()

#將其他編碼變成unicode編碼

unicodepage = html.decode("utf-8")

#正規表示式,findall方法返回乙個列表

ss = re.findall('"word":\"(.*?)\"',unicodepage)

for item in ss:

print item

#休眠2秒

time.sleep(2)

結果截圖:

1.讓使用者自助輸入關鍵i詞,不要事先定義關鍵詞列表

2.按回車進行下乙個關鍵詞輸入

3.輸出結果儲存txt文字

4.使用者輸入exit,程式退出

python爬蟲之xpath資料採集

使用方式有兩種 1.最基本的lxml解析方式 from lxml import etree doc etree.parse exsample.html 2.另一種 from lxml import html text requests.get url text ht html.fromstring ...

Python爬蟲之表單和登入視窗採集

python自帶的urllib庫實現了http基本的get功能,當我們想要實現比get更多的事情時,那麼就需要去尋找支援python標準的第三方庫了。requests庫可以成為你的選擇,它可以處理複雜的http請求,cookie,header等內容,是乙個第三方庫。可以使用python包管理器,執行...

python爬蟲入門 初步採集

獲取維基百科 的任何頁面並提取頁面鏈結 import urllib2 import bs4 html urllib2.urlopen bsobj bs4.beautifulsoup html.read lxml for link in bsobj.find a if href in link.att...