100行python code追蹤PTT現在紅什麼
PTT是當前台灣趨勢的指標之一,透過解析熱門文章,製作文字雲,可概覽當前台灣熱門話題,熟悉台灣熱詞趨勢。
本文結合python網路爬蟲、NLP中文分詞、python wordcloud製作、cron排程撰寫,100行以內的python code打造你的PTT熱門追蹤文字雲。如果您已經有基礎,想直接看code,點這邊傳送門~
PTT熱門文章爬蟲
- Cookie的使用:PTT爬蟲僅需透過get請求,難度不高,僅部分文章對年齡有限制,因此需要Cookie置於頭部方可順利取得內文。
- asyncio增加效率:以ThreadPoolExecutor執行requests,避免多篇文章多個請求IO等待,影響爬取效率的問題。
名詞提取與詞頻計算
- 選用HanLP:Python中的中文斷詞工具較為人熟知的有jieba、thulac、hanlp、fool、nlpir,而根據既有評測結果可知,jieba在時間上具有相當大的優勢,但分詞效果普通,本文選用分詞效果較佳的hanlp作為工具,因為僅爬取當前20篇熱門文章,數量在可接受範圍,因此hanlp時間上的消耗是可接受的。
- 詞頻計算:分詞之後可以根據詞性判斷,會過濾掉常出現的干擾詞彙(作者、來源、八卦版等詞語)以及非名詞內容,再透過dictiondary製作詞頻表。
文字雲製作
- python-wordcloud:選用wordcloud這個成熟的library來完成文字雲的製作,將先前製作好的詞品表透過
generate_from_frequencies
方法即可。 - image-mask:wordcloud支持給定圖片作為特定圖形,僅需要在實例化時指定mask即可。
crontab排程設置
- 每日凌晨12:01分執行:由於想取得每日新聞熱詞,因此設定於每日凌晨執行,若對即時性有更高要求可以設定更小的時間區間喔~想調整的讀者可以參考鳥哥的教學。
- airflow可視化工具:若您對排程任務可視化有興趣,與python友好的airflow會是你需要的工具,相關操作可以參考我對airflow的介紹。
1 0 * * * cd $PATH && source venv/bin/activate && export PYTHONPATH="${PYTHONPATH}:${PWD}" && python crawler.py
總結
相信您願意看到這邊,您一定對Python網路爬蟲與可視化有興趣,100行python code能做的事情有限,資料過濾的邏輯粗糙與成果展示的缺陷都可以繼續完善,然而雖然不足之處存在,但我認為確實是個好玩的應用,希望這樣的應用也讓您覺得有趣,也期待您透過留言與我討論其他好玩的應用。
本篇文章原文在我的medium,目前會逐漸轉移到這個新平台~