傅駿 傅馨竹 吳高靜 丁才愈 龍輝陽 熊子淇



The Software Development Practice of Intelligent Information Collector
FU Jun1, FU Xin-zhu2, WU Gao-jing1, DING Cai-yu1, LONG Hui-yang1, XIONG Zi-qi1
(1.Department of Materials Engineering, Sichuan Engineering Technical College, Deyang 618000, China;
2.Junior Middle School, Deyang No.5 Middle School, Deyang 618000, China)
【摘? 要】應用爬蟲技術開發的智能信息采集器,可以幫助用戶及時獲得工程學院、鑄造院校、焊接行業、軍事網站的最新消息。論文選用tkinter進行界面設計,應用python爬蟲技術對xpath、抓取到的日期、網址進行了處理,順利實現抓取消息并獲得消息的網址。用戶可以進一步打開感興趣的網頁進行詳細閱讀。
【Abstract】The intelligent information collector developed with crawler technology can help users get the latest information of Engineering College, Foundry College, welding industry and military websites in time. The paper selects and uses tkinter to design the interface, and uses python crawler technology to process the xpath, the fetched date, and the URL, which smoothly realized fetching the message and getting the URL of the message. Users can further open the web pages of interest for detailed reading.
【關鍵詞】爬蟲技術;信息采集;python;二次開發;xpath
【Keywords】crawler technology; information collection; python; secondary development; xpath
【中圖分類號】TP311.5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文獻標志碼】A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文章編號】1673-1069(2021)05-0192-02
1 引言
網絡信息時代,資訊鋪天蓋地、紛繁復雜。科學院所、行業企業和政府部門需要知道最新的科學前沿、法律法規和工作動態的網頁信息,從而作出決策。但冗雜的網頁信息在他們查找時是很困難的。本團隊在完成省級課題“厲害了,我的國——建國以來重大科技成就科普作品”過程中經常需要緊跟科技成果和技術發展,這就要對指定的相關度高的網站進行消息搜索。如果逐一搜索這些網站的欄目,花費時間長并且經常容易遺漏,團隊基于python爬蟲技術設計了“智能信息采集器”,有效解決了這一問題。
2 技術基礎
2.1 python
網絡爬蟲按照一定的規則,自動地抓取萬維網信息,可以采集所有其能夠訪問到的頁面內容,以獲取或更新這些網站的內容和檢索方式。獲取網頁消息,目前技術手段有python爬蟲技術以及各種爬蟲框架,本團隊采用python爬蟲技術進行設計。tkinter模塊是python的標準GUI工具包接口,可以非常方便實現很多直觀的功能。tkinter是python自帶庫,不需下載安裝,可直接使用[1]。
2.2 獲取xpath
xpath是一門在XML文檔中查找信息的語言。在瀏覽器中,打開網頁,右鍵“審查元素”,打開“DockSide”,單擊左上方的“Select an element in the page to inspect it(Ctrl+Shift+C)”按鈕,單擊網頁中的消息,在html代碼中,右鍵“copy/xpath”,可以獲得消息的xpath[2]。
3 開發實踐
3.1 總體設計
變量表。每一段的局部變量newa、urla、timea;全局變量newlist、urllist、timelist;各個單位名稱用label,依次為label2、label3……每個單位名稱下有若干個欄目,用復選框CheckButton,CheckButton命名為單位名稱+欄目名稱字母縮寫,用復選框Checkbutton.variable聯系起來。
將newlist、urllist、timelist清空;如果選中了某個單位的某個欄目,則運行對應的def;運行后,抓取的全部新聞標題添加到newlist、網址添加到urllist、日期添加到timelist中。運行全部欄目后,獲取newlist的長度numbber。urlx、newx、timx清空,num=0;獲取希望的時間段zj變量值。從i=0到numbber,依次讀取timelist[i]的值,如果時間符合zj,則num加1,且將newlist、uellist對應的值添加到urlx[num]、newx[num]。
一共有num條符合時間段的選取欄目的新聞。若num>0,則在窗體2上顯示出來。i=0--num,將newx[i]依次用Button顯示出來。若num=0,則提示“本次新聞數為0”,并用information予以提示。
3.2 界面設計
主界面上有行業按鈕(見圖1),“工程學院”“鑄造院校”“中國工程院”“焊接行業”“軍事愛好者”等。點開相應按鈕,進入對應的程序。關鍵代碼是:
mainwin=Tk()
mainwin.title('智能信息采集器')
mainwin.geometry('500x100+450+100')
mainwin.resizable(0,0)
mainwin["background"]="LightSkyBlue"
openscetc=Button(mainwin,text="四川工程",command=四川工程).place(x=30,y=35)
opencast=Button(mainwin,text="鑄造院校",command=打開鑄造).place(x=136,y=35)
openmil=Button(mainwin,text="軍事愛好者",command=軍事愛好者).place(x=350,y=35)
openweld=Button(mainwin,text="焊接行業",command=焊接企業).place(x=244,y=35)
mainwin.mainloop()
點開按鈕,打開對應的信息采集器。圖2是焊接行業信息采集器。
3.3 網頁解析
爬蟲獲取網頁數據的基本過程是:發送請求、獲取響應數據、解析并提取數據、向用戶展示爬取結果。發送請求可以采用requests模塊或selenium模塊。解析數據可以選用re正則、bs4(BeautifulSoup4)或xpath。項目組經過技術調研,采用了requests模塊和xpath。標題和日期通常是不同的xpath。用xpath1/text()抓取消息標題,xpath1/@href抓取消息的鏈接,用xpath2/text()抓取消息的日期。關鍵代碼是[3,4]:
import requests
from lxml import etree
import webbrowser
html=requests.get(url,headers=heade)
html.encoding='簡體中文'
news=etree.HTML(html.text)
newstitle=news.xpath('xpath1/text()')? #抓取消息的標題
newsurl=news.xpath('xpath1/@href')? ?#抓取消息的鏈接
newsdate=news.xpath('xpath2/text()') #抓取消息的日期
3.4 xpath的處理
在DockSide中獲得的xpath有多種類型,需要根據情況進行處理。以下是常見的3種xpath類型:
①一頁上1個xpath。最簡單的一種情況是拷貝網頁上的兩條消息后,比較中括號內數字,刪除數字有變化的中括號,則可以抓取該xpath下所有的消息。②同一頁上有1個以上xpath。按照①的方法刪除中括號后只能抓取到網頁上部分消息,則此時要拷貝出沒有被抓取到消息的xpath,逐條比對,再次運行,直到確保全部抓取。③只保留根xpath。在DockSide中獲得的xpath通常有若干級,但由于站群系統的區別,不能成功抓取,解決辦法是只留下根xpath即可成功抓取。
3.5 獲取URL
在采用xpath/@href的方法獲得的網址,需要print進行觀察,通常有以下兩類情況:①獲取完整的網址,可以直接使用;②僅抓取到網頁帶日期的部分,則可以通過預設preurl解決。
3.6 獲取日期
通過xpath2/text()抓取到的消息日期date,統一為yyyy-mm-dd格式。亦通過print進行觀察,通常有以下三類情況:①分隔符不是短橫線.對形如yyyy/mm/dd、yyyy年mm月dd日的日期,用replace替換。date=date.replace('/','-').replace(('年','-').replace((月'','-').replace(('日','')②首尾有其他字符。對形如[yyyy-mm-dd]的日期,亦用replace替換。date=date.replace('[','').replace((']','-')③包含時間。對形如2021-01-31 10:01的日期數據,只留下年月日,則截取前10個字符。date=date[0:10]
3.7 時間段的處理
消息時間段分為今天、近三天、本周、近一個月。判斷time.mktime(today)與timeStamp的差值。
today=time.localtime(time.time())
today=int(time.mktime(today))
timeArray=time.strptime(timelist, '%Y-%m-%d')
timeStamp=int(time.mktime(timeArray))
shij=(today-timeStamp)/(24*3600)
圖3是圖2中“焊接質檢+中國工程焊接協會+焊接之家+近一月”的檢索結果。
4 結語
應用爬蟲技術開發了智能信息采集器,可以分別采集四川工程職業技術學院、鑄造院校、焊接行業、軍事網站的最新網頁消息,滿足不同用戶的需求。提供給用戶免費使用后,受到了用戶的歡迎。
科學技術日新月異,完全可以利用這些技術開發一些適合自己使用的小程序,滿足個性化需求。應用本項目技術開發的作品參加大學生系列競賽,獲得了多項獎勵。
【參考文獻】
【1】戴瑗,鄭傳行.基于Python的南京二手房數據爬取及分析[J].計算機時代,2021(1):37-40+45.
【2】李文華.解析網絡爬蟲技術原理[J].福建電腦,2021,37(1):95-96.
【3】許景賢,林錦程,程雨萌.Selenium框架的反爬蟲程序設計與實現[J].福建電腦,2021,37(1):26-29.
【4】傅駿,鄭丁元,張峻寧,等.Python爬蟲技術在文獻計量學中應用實踐[J].計算機產品與流通,2019(7):133.