前往
大廳
主題

車圖爬蟲 : BahaDrift (Ver 0.1.0) - 讓你再也不缺席!

虛鹿 | 2021-11-16 00:08:02 | 巴幣 1120 | 人氣 590

「辣ㄍ車圖或許會被版規二,但我肯定從不缺席。」—— Bahadrift 設計主旨


諸君,還在煩惱每次都來不及見證巴友們冒險為場外貢獻的福利嗎?
是否還在擔憂每次趕到現場只剩下版務冰冷且制式化的刪文通知嗎?



BahaDrift Ver 0.1.0 測試版 [Github連結]
一款可輕易客製化,專門分析場外疑似車圖的文章而設計的爬蟲。
以 Requests, BS4, TinyDB 為主要架構,
與 Android / Ios 皆相容,
並可在 Termux, Pyto 等環境中執行。
用資料庫過濾文章標題,減少大量非必要的請求,
以減低造成巴哈姆特伺服器的負擔。
針對資料的控制上,擁有大量由虛鹿自訂ㄉ模組,
大幅降低控制資料庫或編寫自訂函數的難度。

在文章過濾上,用 -7~+7 的Rank來分級,
(-7為最不相關, +7為最相關)
在設定檔中可自由更改篩檢的嚴格程度,
保留了些許彈性與誤判的空間。
一般建議設定3、4為佳。

而BahaDrift的名稱,
則是象徵能讓你在巴哈姆特上,
車速快到停不下來,快到整個直接滑出去。


[#]程式展示:
一般而言,你設定的Rank越高,
是車圖的可能性越高。


[#] 使用須知:(重要‼)

       1. 可能有預料之外的Bug

      2. SLT 是指 Super Long Thread,用來表示場外常見的1000多頁的集中串或大樓。

      3. 針對 SLT 資料的提取本來就會花費比較多時間。BahaDrift 預設是抓取大樓第一頁的前20樓,以及其後40樓所有的回覆、留言、Gp/Bp資訊。大量的資料寫入資料庫需要花費的時間會比一般的文章較多。通常30秒內都算正常。然而,如果時間長的異常,請務必自行終止BahaDrift,我這部分沒有設timeout,放任他一直寫入資料可能會引發不良影響。


       4. 不要這個爬蟲拿去套loop自動執行!拜託,千萬別!該程式目前只確定能成功執行,但無法預料場外出現的某些未知文章格式是否會引發程式出錯。就如上一點所提到的,我沒有加裝太多防護的措施,所以很不建議你讓他自己抓取資料分析。

       5.  關於如何客製化此爬蟲,與一些自訂function的使用說明,我明天可能會找時間丟去小屋。有需求的可以自行去查看。
      
      6. 任何爬蟲都會造成伺服器的負擔,就算已經把請求數量壓到最小,執行一次 BahaDrift 還是會需要發出15~20個request,不建議大量使用以免IP被巴哈封鎖。

[#]目前擁有的進階功能:
     1. 自訂標題與留言敏感字詞判定
     2. 提取疑似敏感ㄉ圖片的連結
     3. 比對發文者IP (但最後一區會被巴哈碼掉)
     4. 以回覆的時間過濾資料

[#]檔案介紹:

     
     1. Bahadrift.py: 主程式,沒什麼好說的。

     2. SD_standard.py: 自訂的標題評斷, 回覆評斷, 留言評斷, Gp/Bp過濾,以及搜尋Rank設定。


     3. SD_Toolkit.py: 針對資料庫動作與資料解析方式所自行定義出的function,檔案可讀性有些不佳,可快速提取資料庫中指定的資料。

     4. SD_filter.py: 針對 table 中的 record 所設計出的標記工具,以刪除複數個不符合SD_standard.py 所定義的項目者。

     5. drift.json: 自動生產的資料庫檔案,不建議刪除。該檔案在每次程式執行時便會進行初始化,不需擔心檔案會越用越大。含有2個table(case / report),case 為用來儲存初步抓取的資料,report 為回報項目地。case, report 在每次執行時都會重置,因此 drift.json 的檔案在長期使用下,不需擔心其檔案大小問題。

     6. BH_Handler/BH_SLT_Hanler: Multithreading 爬蟲本體。

     7. BH_Analyze: 大量自訂的巴哈論壇提取function。

     8. BH_Report: 管理Rank的增減機制。

[#]簡易攻略:

先 pip install bs4, tinydb, requests, fake_useragent, tinydb_smartcache, tinyrecord

再直接執行 Bahadrift.py 就對了,一開始會先進行初始化,其中fake_useragent會花約30秒左右,請耐心的等他完成。(也是為了不讓有心人士一直重複執行搞爆吧哈伺服器) 其中 SD_standard.py 中擁有大量的評斷準則的設定。你可以自行更改判斷用的敏感字詞,此檔案在下次執行 Bahadrift.py 便會自動套用此設定。

[#]輸出解析:(如下圖


Title: 討論串樓主訂下的標題
Url: 該回覆所在頁面
Floor: 此回覆於該串中的樓層
ID: 發文者Id
Rank: 此回覆經評估後所屬的Rank
Img: 是否有圖片

以上,今天先講到這裡。
下一篇再與各位介紹自訂的函數的使用方法與介紹~(^ー^)







送禮物贊助創作者 !
0
留言

創作回應

佬耶~
2021-11-16 00:10:39
虛鹿
並沒有啦
2021-11-17 06:35:04
多古尼爾拉布拉布拉格
挺有趣ㄉproject
2021-11-16 02:08:53
虛鹿
確實挺有趣的說~
2021-11-17 06:35:44
曼波魚O3O
好耶 支持一下
2021-11-16 09:07:29
虛鹿
好耶
2021-11-17 06:35:51
精神病思路廣
可以用cnn寫個classifier 直接把圖片抓下來看是不是車圖 這樣只要抓主樓的資料就好
2021-11-16 20:53:21
虛鹿
感謝建議~窩之後會再試試看
2021-11-17 06:36:26
虛鹿
當初是有考慮到留言或回覆區有車圖的可能,所以只能設計成先全抓,再用rank評估是車圖的可能性。
2021-12-01 18:34:43
虛鹿
由於車圖不一定只會在1樓出現,場外也有很多版規二是發生在回覆區或留言處。
2021-12-01 18:36:24

相關創作

更多創作