微博爬蟲出錯竟然還和網絡運營商有關

    點擊上方 月小水長 並 設爲星標,第一時間接收乾貨推送

這是 月小水長 的第  52  篇原創乾貨

若是你們使用了微博評論超級爬蟲 WeiboSuperCommentScrapy,可能會碰到下面的問題:
前端

ticket = ticket_js["ticket"]
KeyError: 'ticket'
web

在幾個月之前,這個問題的解決辦法是由於登陸的微博開啓了雙重登陸驗證,只須要在微博 app 或者 web 的設置、帳號安全、關閉雙重登陸驗證便可,可是近期這個解決辦法也失效了,我調試程序發現,com 微博登陸的充分必要條件是手機微博掃碼登陸,能夠直接掃碼登錄,輸入帳號密碼和驗證碼以後,跳轉的仍是那個掃碼登陸界面,能夠說是很是智障的設計了,這不是強迫人下一個微博 app 嗎。(此處有看不見的髒話)ajax

而後我在想有沒有能夠繞過這個登陸保護,強制掃碼登陸的流程,巧的是在知乎上看到同一個問題,並且是 8月27日 開始提問的,目前無解,問題地址:https://www.zhihu.com/question/417862407chrome

改爲掃碼登錄後,以前獲取 cookie 的工做流程所有都變了,我研究了半個下午,完成了自動化獲取實時二維碼掃碼登陸的工做,剩下的就是破解掃碼以後前端經過 ajax 和後臺進行加密解密的工做流程,而後獲取 cookie,可是是明天又要上班了,都是後話了。瀏覽器

我常常在想一個問題,微博所作的愈來愈多的限制,就是爲了保護本身的數據,事實上,微博想讓咱們拿到的數據,就是沒加限制的那部分數據,好比,每一個微博評論的前 100 頁,而這,就是我以前的 WeiboCommentScrapy.py,也就是 cn 微博的評論爬蟲。安全

因而我又運行起了 WeiboCommentScrapy,因爲很久沒有更換這裏的 cookie,因此須要從新在瀏覽器登陸,複製 cookie 到代碼中,可是當我在瀏覽器中輸完帳號和密碼並點擊登陸時,意外出現了。服務器

在 chrome 中是這樣:微信

在 FireFox 中又是這樣:
cookie

能夠肯定的是,不是沒有連上 Internet 的問題,我開始只是覺得微博後臺的 bug,而後隔了一天仍是這樣,不對勁,若是真是 bug 一天了還不上熱搜嗎?我靈性地把電腦連的 wifi 改爲我手機的移動熱點,它竟然成功了。
網絡

    

獲取到電腦鏈接 wifi 和個人移動熱點時的分別的 公網 ip 和運營商以下:

連着房間wifi時個人電腦公網ip


連着移動熱點時個人電腦公網ip

cn 微博登陸時,登陸頁面是 weibo.cn,點擊登陸按鈕後跳轉到了 security.weibo.com,大機率不是微博登陸的服務器的分發策略拒絕了北京移動而接收了北京聯通,畢竟用戶量那麼大,我懷疑是微博對某些 IP 頻段的微博爬蟲做了限制,具體哪些,我也不知道,因此遇到 cn 微博站沒法登陸時,或者換個網絡就行了。

還有一個問題是,我手機是移動的卡,爲什麼電腦連熱點時公網 IP 成了聯通的了,我又斷開又重連,發現是聯通電信隨機切換,又陷入了思考,上網查閱資料得知:

一般出現這種狀況的寬帶是非電信、聯通的(拐着彎說移動),分兩種 case:

  1. IP 庫沒有及時更新,此時應該你電腦得到的 IP 地址和網站得到的 IP 老是一致的(最好不用帶 CDN 的網站,那些通常 CDN 服務器和你同運營商就沒法準確判斷,好比 IP138 這類就不行)
  2. 小寬帶運營商,移動(鐵通)也在此列,因爲衆所周知的緣由目前不少國內資源都存放在電信\聯通的網絡中,小寬帶運營商不可避免的須要和它們互聯互通,同時由於處於弱勢地位必定是小寬帶運營商交錢給電信\聯通。

第一種狀況是說,IP 是移動的 IP,只不過 IP 查詢網站沒有及時更新 IP 的歸屬形成的混淆,第二種就是說是移動是小寬帶運營商。(逃)

總而言之,com 站已經強制須要掃碼登陸了,微博的策略應該是會對 com 站的爬蟲做更多的限制;而 cn 微博站登不上,致使沒法獲取 cn 微博的 cookie,致使評論/用戶/話題爬蟲沒法運行,換個網就行。

本文分享自微信公衆號 - 月小水長(inspurer)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索