学习python123课程:https://python123.io/index/tutorials/web_crawler_intro
新闻来源
访问 百度新闻 和 网易新闻 首页查看热点新闻标题
提取头条新闻
使用 右键-审查元素 功能,任意提取三个题目的 选择器 并观察差异。
除了第一个外,其余几个选择器都是只有 ul:nth-child() 括号中的数字不同,所以除了第一个题目,其余标题可以使用 ul:nth-child(n) 提取出来:
1 | from requests_html import HTMLSession |
1 | 习近平主持中共中央政治局会议 |
与此类似,提取 网易新闻 的代码如下。
1 | from requests_html import HTMLSession |
定时
在控制台使用 pip install apscheduler 命令安装 Advanced Python Scheduler 库。
APScheduler 库可以帮我们实现定时执行功能。以下代码可以实现 5 秒中输出一次“Python123!”。
以下是 APScheduler 中一些常用的定时方法:
每 30 秒执行一次 my_print:add_job(my_print, 'interval', seconds = 30)
每 2 分钟执行一次 my_print:add_job(my_print, 'interval', minutes = 2)
在 2019-01-01 09:30:00 2019-02-01 11:00:00 的时间范围内,每 2 小时执行一次 my_print:add_job(my_print, 'interval', hours=2, start_date='2019-01-01 09:30:00', end_date='2019-02-01 11:00:00')
在 2019-01-01 09:30:00 执行一次 my_print:add_job(my_print, 'date', run_date='2019-01-01 09:30:00')
每个整点执行一次 my_print:add_job(my_print, 'cron', hour='*')
每个整点执行一次 my_print:add_job(my_print, 'cron', hour='*')
每周一到周五 05:30 执行 my_print:add_job(my_print, 'cron', day_of_week='mon-fri', hour=5, minute=30)
下面的代码实现了在 6、7、8、11、12 月份的第三个星期五的 00:00、01:00、02:00、03:00 获取并输出一次腾讯和网易热点新闻。1
2
3
4
5
6
7
8
9
10from apscheduler.schedulers.blocking import BlockingScheduler
from requests_html import HTMLSession
def get_news():
…
sched = BlockingScheduler()
#在6、7、8、11、12月份的第三个星期五的 00:00、01:00、02:00、03:00 执行该任务
sched.add_job(get_news, 'cron', month = '6-8,11-12', day = '3rd fri', hour = '0-3')
sched.start()
可视化展示
热点新闻现在已经可以定时的输出展示,但我们还想可视化展示,试试设计更好地展示方式吧。
为了让新闻热点更有趣味性,本节采用 词云 的形式展示。
首先要将得到的文字进行分词,分词就是将一句话中的词语提取出来。jieba 库可以实现这个功能,先来试试。
在控制台使用 pip install jieba
命令安装 jieba 库。
1 | import jieba |
1 | Python123 Python123 为 你 提供 优秀 的 Python 学习 工具 教程 平台 和 更好 的 学习 体验 |
在完成分词后,我们当然会希望出现次数多的词更清晰得显示,wordcloud 库帮我们完成形成词云的功能,再存储为图片文件即可。
在控制台使用 pip install wordcloud 命令安装 wordcloud 库。
1 | from wordcloud import WordCloud |
结合之前爬取新闻的代码,写出完整的代码
1 | from apscheduler.schedulers.blocking import BlockingScheduler |
当然你还可以做一些更有意思的事情,比如做每个小时的热点词相对上个小时增加了什么、减少了什么、汇总24小时的热点……