博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聚合新闻头条
阅读量:5023 次
发布时间:2019-06-12

本文共 4575 字,大约阅读时间需要 15 分钟。

一、确定新闻来源

二、有头条新闻的提取头条新闻

from requests_html import HTMLSession        #导入爬虫所需的模块def get_news():    ans_news_titles=[]    #定义一个空列表    session=HTMLSession()  #创建爬虫模块对象    r=session.get('https://news.baidu.com/')    #获取页面    title1_baidu=r.html.find('#pane-news > div > ul > li.hdline0 > strong > a',first=True)  #查找css选择器对应的内容,    ans_news_titles.append(title1_baidu)    titles_baidu=r.html.find('#pane-news > ul:nth-child(n) > li.bold-item > a')    ans_news_titles+=titles_baidu    for title in ans_news_titles:        print(title.text)if __name__ == '__main__':    get_news()

 三、定时

from apscheduler.schedulers.blocking import BlockingSchedulerdef my_print():    print('123!')sched=BlockingScheduler()sched.add_job(my_print,'interval',seconds=5)sched.start()

 

 每两分钟执行一次

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='*')

 

每周一到周五 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 获取并输出一次百度热点新闻。

from apscheduler.schedulers.blocking import BlockingSchedulerfrom requests_html import HTMLSessiondef get_news():    ans_news_titles = []    session = HTMLSession()    r = session.get('https://news.baidu.com/')    title1_baidu = r.html.find('#pane-news > div > ul > li.hdline0 > strong > a', first=True)    ans_news_titles.append(title1_baidu)    titles_baidu = r.html.find('#pane-news > ul:nth-child(n) > li.bold-item > a')    ans_news_titles += titles_baidu    for title in ans_news_titles:        print(title.text, title.absolute_links)if __name__ == '__main__':    sched=BlockingScheduler()    sched.add_job(get_news,'cron',month='6-8,11-12',day='3rd fri',hour='0-3')    sched.start()

 

四、可视化展示

分词

import jiebaseg_list=jieba.cut('Python123!Python123为你提供优秀的 Python 学习工具、教程、平台和更好的学习体验。',cut_all=True)word_split=' '.join(seg_list)print(word_split)

 可视化展示

from wordcloud import WordCloudimport jiebaimport timeseg_list=jieba.cut('Python123!Python123为你提供优秀的 Python 学习工具、教程、平台和更好的学习体验。',cut_all=True)word_split=' '.join(seg_list)my_wordcloud=WordCloud(background_color='white',font_path='C:\Windows\Fonts\simfang.ttf',max_words=100,width=1600,height=800)my_wordcloud=my_wordcloud.generate(word_split)now=time.strftime('%Y-%m-%d-%H_%M_%S',time.localtime(time.time()))my_wordcloud.to_file(now+'.png')

 

 

 结果是这样的,你发现了什么?是不是频率最高的 “的” 并没有显示在词云上呢?说明 wordcloud 帮我们做了过滤,当然你也可以自定义添加过滤词,你的词云中就不会显示啦。

爬取新闻,并生成云图

from apscheduler.schedulers.blocking import BlockingSchedulerfrom requests_html import HTMLSessionimport jiebafrom wordcloud import WordCloudimport timedef get_news():    print('开始爬取热点新闻')    ans_news_titles=[]    session=HTMLSession()    #获取百度新闻    r=session.get('https://news.baidu.com/')    title1_baidu=r.html.find('#pane-news > div > ul > li.hdline0 > strong > a',first=True)    ans_news_titles.append(title1_baidu.text)    titles_baidu=r.html.find('#pane-news > ul:nth-child(n) > li.bold-item > a')    for title_baidu in titles_baidu:        ans_news_titles.append(title_baidu.text)    #获取网易新闻    r=session.get('https://news.163.com/')    title1s_163=r.html.find('#js_top_news > h2:nth-child(n) > a')    for title1_163 in title1s_163:        ans_news_titles.append(title1_163.text)    #获取新浪新闻    r=session.get('https://news.sina.com.cn/')    title1s_sina=r.html.find('#syncad_1 > h1:nth-child(n) > a')    for title1_sina in title1s_sina:        ans_news_titles.append(title1_sina.text)    title2s_sina=r.html.find('#ad_entry_b2 > ul:nth-child(n) > li.topli14 > a')    for title2_sina in title2s_sina:        ans_news_titles.append(title2_sina.text)    word_jieba=jieba.cut(' '.join(ans_news_titles),cut_all=True)    word_split=' '.join(word_jieba)    my_wordcloud=WordCloud(background_color='green',font_path='C:\Windows\Fonts\simkai.ttf',max_words=100,width=1600,height=800)    #生成词云    my_wordcloud=my_wordcloud.generate(word_split)    #以当前时间为名称存储词云    now=time.strftime('%Y-%m-%d-%H_%M_%S',time.localtime(time.time()))    my_wordcloud.to_file(now+'.png')if __name__ == '__main__':    sched = BlockingScheduler()    get_news()    #之后每周一到周五的8点30执行一次    sched.add_job(get_news,'cron',day_of_week='mon_fri',hour=8,minute=30)    sched.start()

 

 

相信你已经学会:

  • 当需要定时时,可以使用 apscheduler 框架
  • 当需要中文分词时,使用 jieba 库
  • 当需要形成词云时,使用 wordcloud 库

 

转载于:https://www.cnblogs.com/start20180703/p/10368947.html

你可能感兴趣的文章
[Codevs1519]过路费解题报告|最小生成树|LCA
查看>>
JS原型与原型链终极详解
查看>>
csharp:FTP Client Library using FtpWebRequest or Sockets
查看>>
jQuery:SP.NET Autocomplete Textbox Using jQuery, JSON and AJAX
查看>>
css:Media Queries: How to target desktop, tablet and mobile?
查看>>
复杂性研究相关论文
查看>>
大数运算(1)—— 加法篇
查看>>
Swift--错误集:couldn’t be opened because you don’t have permission to view it
查看>>
javascript引擎执行的过程的理解--语法分析和预编译阶段
查看>>
Java_基础—递归
查看>>
Apache+Tomcat构建Tomcat负载均衡集群
查看>>
学会去分享,也许会走得更远
查看>>
redis基本命令
查看>>
inherited 的研究。
查看>>
Hibernate由model类自动同步数据库表结构
查看>>
Android 架构 2.界面
查看>>
SPEL语言-Spring Expression Language
查看>>
设置nginx中文件上传的大小限制度
查看>>
C# 课堂总结3-语句
查看>>
精读《Scheduling in React》
查看>>