zoukankan      html  css  js  c++  java
  • 聚合新闻头条

    一、确定新闻来源

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

    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 BlockingScheduler
    
    def 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 BlockingScheduler
    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)
        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 jieba
    
    seg_list=jieba.cut('Python123!Python123为你提供优秀的 Python 学习工具、教程、平台和更好的学习体验。',cut_all=True)
    word_split=' '.join(seg_list)
    print(word_split)

     可视化展示

    from wordcloud import WordCloud
    import jieba
    import time
    
    
    seg_list=jieba.cut('Python123!Python123为你提供优秀的 Python 学习工具、教程、平台和更好的学习体验。',cut_all=True)
    word_split=' '.join(seg_list)
    
    my_wordcloud=WordCloud(background_color='white',font_path='C:WindowsFontssimfang.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 BlockingScheduler
    from requests_html import HTMLSession
    import jieba
    from wordcloud import WordCloud
    import time
    
    def 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:WindowsFontssimkai.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 库
  • 相关阅读:
    [小试牛刀]部署在IDEA的JFinal 3.0 demo
    使用myBase Desktop来管理电脑上的资料
    用URLGather来管理和保存你的页面
    查看Json的结构及内容:JsonViewerPackage
    有用的2个 Windows 下批处理文件(bat文件):
    在Eclipse-jee-neon中配置Hibernate(jbosstools)
    [Eclipse的Maven项目搭建,仅为测试Maven功能]如何在Eclipse下搭建Maven项目
    在 Windows 中配置Maven:
    你的package包名有问题!
    Workflow Builder 2.6.3 Certified on Windows 10 for EBS 12.x
  • 原文地址:https://www.cnblogs.com/start20180703/p/10368947.html
Copyright © 2011-2022 走看看