一、确定新闻来源
二、有头条新闻的提取头条新闻
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:\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 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:\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
相关资源:聚合新闻解析.rar