[問題] Telnetlib做BBS Crawler? #3484
Unanswered
LeoTsai999
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
這是在ptt上看到的一篇關於python的小問題,覺得很有趣,想和大家分享一下。
各位先進大家好~
小弟是Python初學者
最近想用telnetlib來做一個PTT的自動爬文程式
參考了官方文件,跟一些以前做過類似需求的文章
可是還是遇到了一些瓶頸想來請問各位
先附上我的Code
tn = telnetlib.Telnet('ptt.cc')
tn.expect(['請輸入代號'])
tn.write('Account\r\n')
tn.expect(['請輸入您的密碼'])
tn.write('Password\r\n')
print '登入完成'
tn.expect(['您想刪除其他重複登入的連線嗎'], 10)
print '有其他重複的連線,刪除!'
tn.write('y\r\n')
print '主功能表'
tn.expect(['呼叫器'], 10)
tn.write('sgossiping\r\n') #登入八卦版
進入八卦板之後我就卡住了,不知道該怎麼繼續做下去
有幾點問題想請教:
1.tn.expect(['呼叫器'], 10)這行
我不知道怎麼判斷一個頁面結尾的pattern,所以找了畫面最右下角的東西來塞
這種方式感覺很奇怪,有別的方式嗎?
2.進入八卦板之後我想搜尋全部的爆文,然後抓回來,
可是我如果用-tn.write("Z100\r\n")資料會出在很詭異的地方,不是頭也不是尾
而且文章也不是爆的,這是為什麼?
3.用tn.expect出來的字串很雜亂,裡面包含控制碼跟一堆空格,有高手可以
提點一下這個該怎麼處理嗎?
4.進入文章要捲動到底部把整篇抓完,這個我完全沒有頭緒....
以上~有沒有做過BBS爬蟲的人能夠給我一些建議呢?
萬分感謝!
--
你好!很高興能幫助你。在使用
telnetlib進行 PTT 自動爬文的過程中,確實遇到一些挑戰。以下是我對你提出的幾個問題的建議:判斷頁面結尾的方式:
你提到使用右下角的內容來判斷頁面結束,這確實不是最穩定的方法。你可以嘗試使用更具有代表性的提示字串,例如幾乎固定出現的文字,例如「--」或「按任意鍵繼續」。這樣可以提高匹配的準確性。
搜尋爆文的問題:
當你使用
tn.write("Z100\r\n")時,這會依賴於版面顯示的分頁格式,這可能導致文章位置不正確。你可以先嘗試使用其他指令,例如tn.write("R\r\n")來直接瀏覽最新的帖子,然後擷取你需要的內容。此外,確認你發送的指令是正確的且符合當前頁面的狀態。處理雜亂的字串:
由於 telnet 回傳的內容可能包含控制碼及空格,可以考慮使用字符串處理函數來清理這些內容。例如,使用
re模組來過濾不需要的字符,或者使用str.replace()等方法來移除不必要的部分。你也可以將內容拆分成行,然後針對每一行進行清洗。捲動到底部的問題:
若要捲動到文章的底部,你可以使用指令從文章的第一頁開始,然後逐頁顯示,直到出現“文章結尾”的提示。這可能涉及使用
tn.write("下頁\r\n")每次向下翻頁,直到不再顯示有下一頁的提示。創新性建議:
你可以考慮將這個程式擴展為一個多執行緒的爬蟲,讓它同時檢查多個板塊的爆文。這樣不僅能提升效率,還能讓你更快地收集到不同板塊的資訊,這對於了解整個 PTT 的熱議話題有很大幫助。使用如
concurrent.futures模組中的ThreadPoolExecutor等,可以讓你同時進行多個連接。學習方向:
在進一步學習 Python 時,建議你多看看關於正則表達式(
re模組)的應用,這可以幫助你更有效地處理和清理文本數據。此外,深入學習串流數據處理或是網絡爬蟲框架(如Scrapy)的相關課程,將會對你未來的開發有很大的幫助。希望這些建議能幫助你解決目前的問題,祝你的Python學習之旅愉快!
Beta Was this translation helpful? Give feedback.
All reactions