摘要:由于我需要獲取普通用戶的微博內容,因此還要想辦法繼續繞。默認是勾上的,也即是說微博團隊主觀上是希望用戶勾上這個,從而借助判斷來提高登錄安全性的。我遂果斷取消勾選該選項,輸入任何一個自己的微博賬號密碼,點擊登錄。
有時或基于以下凡此種種需求,我們會想要去抓取新浪微博的內容:
產品冷啟動,導入外部數據,而非從頭積累;
通過大數據+語義分析獲取用戶興趣行為偏好,提供智能推薦;
監控微博輿情,對特定關鍵詞或是用戶行為進行響應;etc
想必新浪深知微博內容本身是最其有價值的資產,一旦被競爭對手大批量抓取導入,則辛苦建立起的門檻將瞬間化作他人之嫁衣,因此做了非常繁復的安全保護,包括強制登錄跳轉認證、跨域檢測、cookie 植入、禁止賬號密碼登錄而啟用 OAuth2.0 等等。
近期個人有一些抓取需求,在查詢大量過時的網絡資料測試無果后,決定另辟蹊徑完成這一目標,并最終測試成功。在此分享出來。(這篇文章將提供解決問題的方法思路,但不會給出具體代碼。伸手黨請移步百度或 Github。)
你需要準備:一個個人微博賬號,我們將透過它去訪問其他用戶頁面,從而抓取。除此之外,別無所求。
解題思路:
1.最初我從微博 Web 版入手,發現即使是瀏覽器中可正常查看的內容,若直接通過 PHP 的 curl 或者 file_get_contents 讀取,也無法直接取得,而是讀取到一串 js 代碼,作用是跨域判斷+cookie判斷+header跳轉。料想要模擬的請求和一重重越過的限制定會很多。
2.轉換思路,既然微博的 Web 版限制很多,那就從移動版下手(移動網頁 weibo.cn,而非指移動 App)。移動版礙于手機機能的限制,身份驗證要求會降低很多。經過實驗,微博移動版的展示規則是:加V用戶、微博廣場,可直接訪問其頁面;普通用戶,則必須登錄才能看到。而判定當前登錄用戶身份的標識,則應該是手機瀏覽器本身存儲的 cookie 與服務端的某個 session 比對。
3.由于我需要獲取普通用戶的微博內容,因此還要想辦法繼續繞。你當然可以每次直接模擬用戶登錄,但相對繁瑣,我希望能一勞永逸。既然移動版的身份判定很大程度上依賴手機瀏覽器 cookie,而一般瀏覽器 cookie 不那么容易取,且某些土鱉機型連 cookie 都無法記錄(號稱 1.3 億月活躍用戶的上市公司一定會照顧窮苦大眾的),那么微博一定提供了其他退而求其次的解決方法。于是我注意到了登陸框下的「記住登錄狀態,需支持并打開手機的cookie功能。」選項。
See?默認是勾上的,也即是說微博團隊主觀上是希望用戶勾上這個,從而借助 cookie 判斷來提高登錄安全性的。
我遂果斷取消勾選該選項,輸入任何一個自己的微博賬號密碼,點擊登錄。
4.值得注意的情況出現了:登錄時的驗證網頁走的是 newlogin.sina.cn,而非勾選狀態下會走的 login.sina.cn。說明此種情況下,登錄驗證的確是進行了特殊的處理,從而讓沒有開啟 cookie 功能的手機也能被判定為登錄。
查看跳轉頁面的源代碼,發現有如下一行:
如果沒有自動跳轉,請點擊這里
注意這個 gsid 參數,料想它就是判定本地用戶身份的標識,于是整個提取出來(為了我的賬號安全,我對這個案例中的 gsid 做了修改,你們直接照搬是無法成功的,還是自己跑一遍登錄流程吧)。
5.最精彩的情況來了。為了驗證我們能不能憑這一串 gsid 偽造登錄后的身份,我開啟 Chrome 的隱身模式,隨便找了一個正常情況下必須登錄才能看到頁面的非加V用戶,然后在地址欄后面加上了 gsid 參數,URL 整個變成:
http://weibo.cn/u/1665167973?vt=4&st=7fe6&gsid=4uwc8bfa1vnw8ivzI9gUd706F3W
(當然這里的 gsid 我也做了改動,只是作為演示,實際 gsid 還請自行獲得)
直接回車!擦,雖然此前沒有執行過登錄動作,但是已經以登錄后的的身份在看他的頁面內容了喲。這樣,我就可以直接憑借上述固定 URL 去爬去用戶的內容。
(上圖中的「我們都關注XDash」,你就可以知道當前是登錄狀態,取到了用戶身份的。事實上的確如此。)
背后原理應該是,以 GET 方式在 URL 中發送了本地登錄后的身份標識,微博服務器比對這串標識來判定對應的登錄用戶身份,然后返回到本地,本地于是就以這個用戶身份登錄,堂而皇之地獲取數據了。(大一的時候我曾參與過一個基于 ASP 的校園社區的開發,閱讀了帝國 CMS 的代碼,那時候對于手機用戶的身份認證就是這么原始噠。)
現在想要的盡收眼底了,接下來...Hulk,smash!
微博手機版,阿喀琉斯的腳后跟。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20736.html
摘要:本人長期出售超大量微博數據旅游網站評論數據,并提供各種指定數據爬取服務,。如果用戶傳入偽造的,則新浪微博會返回一個錯誤。 PS:(本人長期出售超大量微博數據、旅游網站評論數據,并提供各種指定數據爬取服務,Message to YuboonaZhang@Yahoo.com。由于微博接口更新后限制增大,這個代碼已經不能用來爬數據了。如果只是為了收集數據可以咨詢我的郵箱,如果是為了學習爬蟲,...
摘要:本人長期出售超大量微博數據旅游網站評論數據,并提供各種指定數據爬取服務,。如果用戶傳入偽造的,則新浪微博會返回一個錯誤。 PS:(本人長期出售超大量微博數據、旅游網站評論數據,并提供各種指定數據爬取服務,Message to YuboonaZhang@Yahoo.com。由于微博接口更新后限制增大,這個代碼已經不能用來爬數據了。如果只是為了收集數據可以咨詢我的郵箱,如果是為了學習爬蟲,...
摘要:孔淼大數據分析處理與用戶畫像實踐直播內容如下今天咱們就來閑聊下我過去接觸過的數據分析領域,因為我是連續創業者,所以我更多的注意力還是聚焦在解決問題和業務場景上。在對微博數據進行上面提到的計算分析之前,我們其實還做了很多數據處理的工作。 孔淼:大數據分析處理與用戶畫像實踐 直播內容如下: 今天咱們就來閑聊下我過去接觸過的數據分析領域,因為我是連續創業者,所以我更多的注意力還是聚焦在解決問...
閱讀 1631·2021-10-14 09:43
閱讀 5534·2021-09-07 10:21
閱讀 1279·2019-08-30 15:56
閱讀 2131·2019-08-30 15:53
閱讀 1236·2019-08-30 15:44
閱讀 2013·2019-08-30 15:44
閱讀 1323·2019-08-29 17:24
閱讀 757·2019-08-29 15:19