您現在的位置是:首頁 > 手機遊戲首頁手機遊戲

論壇蓋樓回帖搶不到,用python五分鐘教你成為老司機

簡介邏輯就是我們上圖分析的那樣,透過模擬傳送一個GET請求,獲取帖子的正文部分,然後用xpath語句解析內容,最後透過字串轉換最終得到當前帖子的回覆量

論壇不需要登入對嗎

逢年過節在逛論壇時,官方經常會發布一些蓋樓的活動帖子。比如第66、88樓回覆的人可以得到一份禮品。一般的人都是隔一會兒去看一下有多少回覆了,人工搶樓,成功率不高。其實,這類帖子的回覆如果用指令碼來實現,你就很容易搶佔先機。

論壇蓋樓回帖搶不到,用python五分鐘教你成為老司機

本文就透過一個例項來介紹怎麼玩轉論壇蓋樓回覆活動,希望對大家有幫助,論壇的登入部分依賴前文

python實戰-手把手教你實現CAS單點認證登入

中的指令碼。

搶特定順位的回覆,核心的其實就是用指令碼實現兩點。一是檢視帖子有多少回覆量,二是自動進行關鍵字內容的回覆。不同的論壇的機制不一樣,但是分析過程是類似的,下面筆者就以自己公司論壇為例進行說明。

確認當前帖子回覆量

一般帖子的頁面,都會有一個欄位來表示當前文章的回覆數,如下圖所示:

論壇蓋樓回帖搶不到,用python五分鐘教你成為老司機

透過F12開發者工具,首先檢視網頁元素中,是否可以得到回覆總量,很幸運的,這次可以。那我們就可以先透過XPATH語句“//div[@class=‘tn-info’]/a/span[@class=‘tn-button-text’]/text()”進行解析(關於XPATH解析網頁元素,筆者的前幾篇文章均已經有詳細示例)。再針對字串“1051 回覆”做個簡單轉換,就可以得到當前回覆量1051了。

論壇蓋樓回帖搶不到,用python五分鐘教你成為老司機

回覆帖子

F12開發者模式網路選項中,清空歷史資料,然後在論壇頁面上回復內容,看看瀏覽器往Web伺服器傳送的Post資料情況。如下圖所示,除了MultilineBody欄位是我們自己輸入的回覆內容外,其餘幾個欄位不知道從哪裡來的。從前文《python實戰-實現內網CAS統一認證登入》得到的經驗,一般這類欄位都屬於表單的隱藏欄位,用於身份驗證或內部邏輯,我們可以檢視元素頁,在網頁原始碼中進行查詢。

論壇蓋樓回帖搶不到,用python五分鐘教你成為老司機

在元素頁面進行搜尋,果然可以在表單中找到請求正文中的欄位。那問題就簡單了,也同樣透過XPATH語句獲取欄位值即可。

論壇蓋樓回帖搶不到,用python五分鐘教你成為老司機

至此,我們就完成了分析過程,下面可以開始編碼了。論壇是需要登入訪問的,關於自動登入授權的部分,前面的幾篇文章介紹了幾種方法,本文就不再贅述了。

首先實現的是檢查帖子回覆量的指令碼,實現如下圖。邏輯就是我們上圖分析的那樣,透過模擬傳送一個GET請求,獲取帖子的正文部分,然後用xpath語句解析內容,最後透過字串轉換最終得到當前帖子的回覆量。

論壇蓋樓回帖搶不到,用python五分鐘教你成為老司機

下面完成的是回覆帖子的功能,傳送回覆帖子的POST請求前,需要首先訪問帖子內容,主要是獲取表單中的隱藏欄位。這裡需要注意的是,POST請求的標頭中,程式帶上了Referer和X-Requested-With欄位。Referer欄位是告訴伺服器這個POST請求是從哪個頁面連結過來的(這裡送的是原帖連結)。X-Requested-With=XMLHttpRequest則表示這是一個Ajax請求。送入這兩個欄位是為了避免服務端的防爬校驗(前文中提到的User-Agent欄位是預設所有請求都送的,就不專門提了)。除了上述兩個欄位外,建議讀者根據F12網路包的分析,儘量帶上全量的標頭欄位,以避免觸發不同伺服器的反爬校驗邏輯。

論壇蓋樓回帖搶不到,用python五分鐘教你成為老司機

實現了上述兩個功能後,搶特定順位回覆的工作就水到渠成了。設定一個較小的隨機輪詢時間,檢查當前文章已有的回覆個數,等滿足特定條件,直接觸發回帖操作即可。這塊的邏輯較為簡單,且比較個性化,文章就不再給出示例了。由於篇幅所限,需要完整示例程式碼的可以私信我獲取,有疑問的也歡迎在評論區留言。後續將推出更多技術分享,喜歡的就點贊關注我吧。

Top