模擬登錄新浪微博移動版,使用新浪微博搜索引擎爬取數據的驗證碼如何解決?
畢設需要想寫一個爬蟲爬取微博上一些網路群體性事件,在一段時間內的每一天的不同條件下的微博數量,由於PC版的微博的搜索無法顯示出總的微博數量,想通過微博移動版的高級搜索功能網址是http://weibo.cn/search,但是在模擬登錄時候要輸入驗證碼,之前看的是極客學院的教程視頻,但視頻錄製的時候登錄移動版還不用輸入驗證碼,現在要輸驗證碼了,應該如何解決驗證碼的輸入問題?
請參考微博模擬登錄如何應對Sina Visitor System? - 新浪微博這個問題下我的答案,有詳細的分析和具體的代碼,只不過github的代碼上是用golang寫的。
瀉藥。
你看的應該是我的視頻。
對於驗證碼識別來說,有兩張方式,方法一在視頻中也做了介紹,使用findder直接抓包獲取Cookies,然後通過這個Cookies來進行登錄。不過這種方式需要人工參與,自動化程度不高。
方法二就是真正的驗證碼識別其流程如下:
1.從網頁上面下載驗證碼的圖片
2.打碼
3.使用post提交驗證碼,4.登陸成功。獲得Cookies.之後的訪問就使用Cookies來登錄。單說第二步:
現在Python有簡單的驗證碼識別的開源代碼,你可以直接下載下來,然後使用你的爬蟲調用。這種方式比較簡單省錢,但是弊端是效率不高。
還有一種方法是在線打碼。現在在線打碼的網站比較多。一般來說,這些網站都會提供一個調用介面文件給你,可能是一個dll文件,也可能是幾個py文件。因此,你下載這個介面文件,然後根據它網站上面的教程集成到你的爬蟲中。
使用打碼網站,識別率非常的高。他們的原理是:將你的驗證碼上傳到伺服器,然後伺服器再將驗證碼派分給一些專職或者兼職的打碼工。打碼工人肉識別以後再把驗證碼發送給伺服器,伺服器再返回給你。弊端是需要花錢。不過相對便宜,一般來說1毛錢一張4位數的驗證碼。整個流程走通大概3-4秒鐘。
你Google搜索:在線驗證碼識別。 可以找到很多。為了避免廣告,我就不放鏈接了。
你可以自己選擇一種方式。
另外,如果你的爬蟲是單線程的,那就沒有什麼問題,但是如果是多線程的,那麼在你必須首先暫停所有線程訪問微博,只讓一個線程訪問,然後下載驗證碼,識別成功並登錄成功獲得Cookies以後,才能啟動線程去爬取,否則的話,當你一個線程正在識別驗證碼的時候,另一個線程去訪問,會導致驗證碼改變,從而使得你登錄不上去。下載個抓包軟體,用瀏覽器登陸http://weibo.cn,在抓包軟體里copy cookie
然後request.get時,加上cookies就好了。代碼如圖
實測有效,有人還用此寫了個,爬自己在某主頁回復過的所有留言出來
ps. http://weibo.cn的驗證碼用人眼也好難識別好麼,我都是登陸http://weibo.com後再打開http://weibo.cn自動登陸的說哼
這個搜索是不用登錄的。
1.首先登錄獲取到搜索結果的頁面;2.複製鏈接到另外的瀏覽器,是可以不登錄訪問的3.你只要修改鏈接的關鍵字那些就可以對不同的關鍵詞進行搜索。缺點是每日只能最搜索介面訪問1000次左右,就會出現Forbidden。解決方案是:1、找到單位時間訪問量的閾值,設置訪問間隔(還沒有找到);2、使用代理;3、登錄微博。可是我不知道登錄微博之後會不會封賬號,這個我就沒有試過了。以上。推薦閱讀:
※通知頁和時間流都亂了,不用點手段還怎麼好好刷微博
※新版新浪微博在無障礙優化方面可以做哪些改進?
※新浪微博目前是否有疲軟趨勢,你覺得原因是什麼?
※如何評價微博上此類人在同胞遇難開心的言語?