利用Python网络爬虫技术追踪时事热点
作者:廖泽龙 王昊源 刘紫嫣
来源:《智富时代》2019年第02期
作者:廖泽龙 王昊源 刘紫嫣
来源:《智富时代》2019年第02期
【摘 要】互联网时代,信息复杂多样,查一件新闻事件的所有报道,时常难以以时间顺序正常游览所有报道,给读者带来不好的阅读体验,部分新闻事件经过一段时间发展后会被人遗忘,使得不少人只知新闻早期报道,而不知后续发展。“新闻时间轴自动化”是一个基于Python爬虫的项目,该项目可自动或人工创建新闻词条,利用Python网络爬虫技术获取python 正则表达式 空格“新闻词条”的收录权威信息,并可根据信息内容的发布时间报道顺序自动建立起新闻的时间轴,从而方便读者阅读新闻及理清逻辑。
【关键词】Pyhton;requests库;BeautifulSoup库;MySQLdb模块;网络爬虫
1.相关技术简介
1.1 requests库和BeautifulSoup库
requests是Python第三方工具包,是实现爬虫所常用的HTTP库,主要用于自动爬取HTM
L页面,自动网络请求提交等。
BeautifulSoup是一个非常流行的Python第三方工具包,可实现解析网页,并提供定位内容的便捷接口。利用它不用编写正则表达式也能方便的实现网页信息的抓取,利用BeautifulSoup编写的代码虽然有时比正则表达式复杂,但其更容易构造和理解,也无需担心类似多余的空格和标签属性这种布局上的小变化。Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器。
在Python网络爬虫中,以上两个库通常结合使用,requests库实现自动爬取页面 源代码,再通过BeautifulSoup库在页面源代码中定向提取所需要的内容。[1]
2.“新闻时间轴自动化”的设计
第一步:在云服务器下通过Python爬虫程序获取新闻事件的关键词;第二步,以关键词为线索开始自动化的定向爬取工作,从而获取关于目标事件的权威报道;第三步:将爬取到的内容按一定顺序和编码导出至数据库或缓存到云服务器中;第四步:借助Python或JSP等
方法连接数据库并将数据库或缓存到云服务器中的数据输出到页面上,从而完成新闻时间轴。
3.“新闻时间轴自动化”的实现
3.1获取新闻事件的关键词
通过分析百度的“搜索风云榜”或新浪微博的“实时热搜榜”页面源代码,建立定向爬虫,从而获得新闻词条的关键词;以百度的“搜索风云榜”为例,该网页的网址为:http://top.baidu/buzz?b=341&c=513&fr=topbuzz_b1_c513,通过分析其页面源代码可知新闻事件关键词都位于一个
3.1.1主要代码:
以爬取百度“搜索风云榜”关键词为例:
#创建空列表,用于储存词条
tops = []
#创建空列表,用于储存关键词
keywords = []
url = 'http://top.baidu/buzz?b=341&c=513&fr=topbuzz_b1_c513'
#获得url信息,设置40秒超时时间
r = (url, timeout=40)
#失败请求(非200响应)抛出异常
r.raise_for_status()
#根据内容分析出的编码方式,备选编码;
r.encoding = r.apparent_encoding
#获得的HTML文本
html = r.text
#对获得的文本进行html解析,查
table = BeautifulSoup(html,"html.parser").find("table")
for words in table.find_all("a"):
if words.string !='search' and words.string !='新闻' \
and words.string !='视频'and words.string !='图片':
tops.append(words.string)
else:
continue
topsList = jieba.cut_for_search(tops[3])
#分关键词(搜索模式)
keywords.append(" ".join(topsList))
3.2获取权威新闻报道:
以3.1爬取的关键词为目标,通过与3.1.1类似的操作来定向爬取权威新闻网站的相关报道,为方便后续的数据展示,可按需增加爬取内容,如:标题、内容、发布时间、网址等……
3.2.1主要代码:
以爬取关键词在“澎湃新闻”中的相关报道为例:
#创建空列表,用于储存新闻标题
newsTitles = []
#创建空列表,用于储存新闻发布时间
newsTime = []
#创建空列表,用于储存新闻页面网址
newsUrls = []
pengpaiSearUrl = https://www.thepaper/searchResult.jsp?inpsearch={nnnew}
#设置新闻关键词,以“长春长生”为例
testString="长春长生"
#利用format()函数设定爬取的关键词
pengpaiNews = pengpaiSearUrl.format(nnnew=testString)
nnnew=keywords[0]
print(pengpaiNews)
#获得url信息,设置60秒超时时间
r = (pengpaiNews, timeout=60)
r.raise_for_status()
r.encoding = r.apparent_encoding
#获得的HTML文本
html = r.text
print(html)
#对获得的文本进行html解析,查id='mainContent'
h2 = BeautifulSoup(html,"html.parser").find(id='mainContent')
for aimNews in h2.find_all('h2'):
newsTitles.append(Text())
print(newsTitles)
#获取新闻的扼要和时间
for aimUrls in h2.find_all('a', href=True):
_text(strip=True):
if len(aimUrls['href'])>10:
newsUrls.append(pengpaiUrl+aimUrls['href'])
r = (pengpaiUrl+aimUrls['href'], timeout=40)
r.raise_for_status()
r.encoding = r.apparent_encoding
herfHtml = r.text
#print(herfHtml)
aimTime=BeautifulSoup(herfHtml,"html.parser").find
(class_="news_about")
if aimTime!=None:
Text()
#利用正则表达式匹配时间
mat = re.search(r"(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2})",htmlTime)
newsTime.append(up(0))
else:
newsTime.append("视频(error)")
3.3数据存储:
数据存储有多种方式,其中有两种常用的方法——写入数据库或写入csv文件。写入数据库的大致方法如下:第一步,利用Python的第三方库pymysql库连接MySQL数据库,在指定数据库下创建表;[2]第二步,将3.1、3.2爬取到的数据写入创建的表中。
3.4数据显示:
在Web服务器上,先利用JSP连接数据库,读取指定数据库中的数据,将数据输出至已编写好的JSP页面中,最后将JSP文件保存在网站服务器的指定目录,完成上述操作后数据即可显示在相应页面上,从而自动生成新闻时间轴。
4.总结
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论