萊姆
萊姆

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

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 版权声明

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

加载中…

发布评论