萊姆
萊姆

我是萊姆,現居台北的軟體工程師,曾經在北京生活兩年,旅遊魂在我內心,喜歡跟不同城市不同地區的人們一起交流。世界之大,我想去看看。

100行python code追蹤PTT現在紅什麼

(编辑过)
PTT熱門文章文字雲
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,目前會逐漸轉移到這個新平台~

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论