廖泽龙 王昊源 刘紫嫣
【摘 要】互联网时代,信息复杂多样,查找一件新闻事件的所有報道,时常难以以时间顺序正常游览所有报道,给读者带来不好的阅读体验,部分新闻事件经过一段时间发展后会被人遗忘,使得不少人只知新闻早期报道,而不知后续发展。“新闻时间轴自动化”是一个基于Python爬虫的项目,该项目可自动或人工创建新闻词条,利用Python网络爬虫技术获取“新闻词条”的收录权威信息,并可根据信息内容的发布时间报道顺序自动建立起新闻的时间轴,从而方便读者阅读新闻及理清逻辑。
【关键词】Pyhton;requests库;BeautifulSoup库;MySQLdb模块;网络爬虫
1.相关技术简介
1.1 requests库和BeautifulSoup库
requests是Python第三方工具包,是实现爬虫所常用的HTTP库,主要用于自动爬取HTML页面,自动网络请求提交等。
BeautifulSoup是一个非常流行的Python第三方工具包,可实现解析网页,并提供定位内容的便捷接口。利用它不用编写正则表达式也能方便的实现网页信息的抓取,利用BeautifulSoup编写的代码虽然有时比正则表达式复杂,但其更容易构造和理解,也无需担心类似多余的空格和标签属性这种布局上的小变化。Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器。
在Python网络爬虫中,以上两个库通常结合使用,requests库实现自动爬取页面 源代码,再通过BeautifulSoup库在页面源代码中定向提取所需要的内容。[1]
2.“新闻时间轴自动化”的设计
第一步:在云服务器下通过Python爬虫程序获取新闻事件的关键词;第二步,以关键词为线索开始自动化的定向爬取工作,从而获取关于目标事件的权威报道;第三步:将爬取到的内容按一定顺序和编码导出至数据库或缓存到云服务器中;第四步:借助Python或JSP等方法连接数据库并将数据库或缓存到云服务器中的数据输出到页面上,从而完成新闻时间轴。
3.“新闻时间轴自动化”的实现
3.1获取新闻事件的关键词
通过分析百度的“搜索风云榜”或新浪微博的“实时热搜榜”页面源代码,建立定向爬虫,从而获得新闻词条的关键词;以百度的“搜索风云榜”为例,该网页的网址为:http://top.baidu.com/buzz?b=341&c=513&fr=topbuzz_b1_c513,通过分析其页面源代码可知新闻事件关键词都位于一个
newsUrls = []
pengpaiSearUrl = https://www.thepaper.cn/searchResult.jsp?inpsearch={nnnew}
#設置新闻关键词,以“长春长生”为例
testString="长春长生"
#利用format()函数设定爬取的关键词
pengpaiNews = pengpaiSearUrl.format(nnnew=testString)
nnnew=keywords[0]
print(pengpaiNews)
#获得url信息,设置60秒超时时间
r = requests.get(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(aimNews.getText())
print(newsTitles)
#获取新闻的扼要和时间
for aimUrls in h2.find_all('a', href=True):
if aimUrls.get_text(strip=True):
if len(aimUrls['href'])>10:
newsUrls.append(pengpaiUrl+aimUrls['href'])
r = requests.get(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:
htmlTime=aimTime.getText()
#利用正则表达式匹配时间
mat = re.search(r"(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2})",htmlTime)
newsTime.append(mat.group(0))
else:
newsTime.append("视频(error)")
3.3数据存储:
数据存储有多种方式,其中有两种常用的方法——写入数据库或写入csv文件。写入数据库的大致方法如下:第一步,利用Python的第三方库pymysql库连接MySQL数据库,在指定数据库下创建表;[2]第二步,将3.1、3.2爬取到的数据写入创建的表中。
3.4数据显示:
在Web服务器上,先利用JSP连接数据库,读取指定数据库中的数据,将数据输出至已编写好的JSP页面中,最后将JSP文件保存在网站服务器的指定目录,完成上述操作后数据即可显示在相应页面上,从而自动生成新闻时间轴。
4.总结
近几年,Python网络爬虫十分流行,发展迅速,目前已有多种Python爬虫平台,如Scrapy、Crawley。“新闻时间轴自动化”项目利用Python标准库与第三方库,实现在无人监督的条件下对时事热点的自动搜索与收录,围绕着热点搜索和爬取权威报道,并对得到的数据进行展示,整个过程简单,移植性强,对环境等要求不高。
【参考文献】
[1].Beautiful Soup 4.2.0 文档[EB/OL].https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/.
[2].Python3 MySQL 数据库连接[EB/OL].http://www.runoob.com/python3/
python3-mysql.html.