廖澤龍 王昊源 劉紫嫣
【摘 要】互聯網時代,信息復雜多樣,查找一件新聞事件的所有報道,時常難以以時間順序正常游覽所有報道,給讀者帶來不好的閱讀體驗,部分新聞事件經過一段時間發展后會被人遺忘,使得不少人只知新聞早期報道,而不知后續發展?!靶侣剷r間軸自動化”是一個基于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?!靶侣剷r間軸自動化”項目利用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.