python爬行動物集合360聯想詞搜尋

來源:互聯網
上載者:User

標籤:

想法和一些代碼引用邸一幕python培訓黃哥python爬蟲聯想詞視頻,但是太羅嗦。順便整理,而到現在為止,360不傻。它已演變,用原來的方式,有些bug,這接著說。

正題例如以下:

語言:python2.7.6

模組:urllib,urllib2,re,time

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

版本號碼:w1

原理:在360搜尋首頁:http://www.so.com/。當你輸入”科技“時,搜尋方塊會列出對應的聯想詞或者短語。我們就是要得到這些聯想詞,那就要爬360的搜尋引擎了。在輸入關鍵詞之前,我們在首頁右鍵。”審查元素“——”Network“——”Name“。輸入之後,以下會出現對應的超連結。我們僅僅觀察”Headers“”Priview“,”Headers“下我們能夠看到”“Request URL”和頭資訊(主機,代理之類的),“Priview”中看到一個我輸入的範例:

suggest_so({"query":"科技 ","result":[{"word":"科技美學"},{"word":"科技苑"},{"word":"科技部"},{"word":"科技管理研究"},{"word":"科技少女喵","obdata":"{\"t\":\"video\",\"d\":[2,\"http:\/\/p0.qhimg.com\/d\/dy_acba03288ce64a69a324a94921324cb6.jpg\",\"\u9ad8\u79d1\u6280\u5c11\u5973\u55b5\",\"http:\/\/www.360kan.com\/tv\/Q4pwcH3lRG4lNn.html\",3,12]}"},{"word":"科技日報"},{"word":"科技發展利大還是弊大"},{"word":"科技超能王"},{"word":"科技網"},{"word":"科技進步與對策"}],"version":"a"});

非常明顯。我們僅僅要抓到裡面的詞就可以,忘了交代。在Request URL中。有一個連結:http://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word,obdata&word=%E7%A7%91%E6%8A%80%20,我們輸入非常多次發現,變得僅僅是“%E7%A7%91%E6%8A%80%20”部分。也就是說前面的部分不變。我們能夠直接拿來用,後面的部分隨著輸入的關鍵詞不同而變化。這是一種URL編碼,能夠用urllb.quote()方法實現。

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

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

代碼例如以下:

#coding:utf-8import urllibimport urllib2import reimport timegjc = urllib.quote("科技")url = "http://sug.so.360.cn/suggest?

callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word,obdata&word="+gjcprint urlreq = 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代理server,百度ip代理,一大堆免費的,方法:見urllib2 api example

最佳化的代碼例如以下:

#coding:utf-8#---------------------#   程式:爬蟲採集360搜尋關聯詞#   語言:python2.7#   版本號碼:w1#   時間:2014-06-14#   wxx#---------------------import urllibimport urllib2import reimport timefrom 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 = "http://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word,obdata&word="+gjc    #頭資訊    headers = {                "GET":url,                "Host":"sug.so.360.cn",                "Referer":"http://www.so.com/",                "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 QIHU 360SE"                }    #使用IP代理server    proxy_handler = urllib2.ProxyHandler({'http': 'http://'+ip})    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。程式退出

參考視頻:http://www.tudou.com/programs/view/SXgshk-sYbw/

著作權聲明:本文部落格原創文章。部落格,未經同意,不得轉載。

python爬行動物集合360聯想詞搜尋

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.