利用Python网络爬虫技术追踪时事热点

2019-04-18 07:44廖泽龙王昊源刘紫嫣
智富时代 2019年2期
关键词:时间轴源代码爬虫

廖泽龙 王昊源 刘紫嫣

【摘 要】互联网时代,信息复杂多样,查找一件新闻事件的所有報道,时常难以以时间顺序正常游览所有报道,给读者带来不好的阅读体验,部分新闻事件经过一段时间发展后会被人遗忘,使得不少人只知新闻早期报道,而不知后续发展。“新闻时间轴自动化”是一个基于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,通过分析其页面源代码可知新闻事件关键词都位于一个

标签下,在
标签下,每个标签对应一个我们需要获取的新闻事件的关键词。利用requests库的requests.get()函数把页面所有信息爬取下来,通过以上的观察来设定来BeautifulSoup库中find()函数的查找对象,继而获取关键词。为了使后续爬虫获取信息更加丰富和精确,可使用Python结巴分词对所获关键词进行搜索模式的切分。

3.1.1主要代码:

以爬取百度“搜索风云榜”关键词为例:

#创建空列表,用于储存词条

tops = []

#创建空列表,用于储存关键词

keywords = []

url = 'http://top.baidu.com/buzz?b=341&c=513&fr=topbuzz_b1_c513'

#获得url信息,设置40秒超时时间

r = requests.get(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.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.

猜你喜欢
时间轴源代码爬虫
人工智能下复杂软件源代码缺陷精准校正
利用网络爬虫技术验证房地产灰犀牛之说
时间轴上二阶非线性非自治延迟动力系统的振动性
基于TXL的源代码插桩技术研究
基于Python的网络爬虫和反爬虫技术研究
时间轴里的“共和国记忆”
软件源代码非公知性司法鉴定方法探析
利用爬虫技术的Geo-Gnutel la VANET流量采集
大数据环境下基于python的网络爬虫技术
揭秘龙湖产品“源代码”