吳爽
摘要:該文介紹了Web采集技術(shù),并對(duì)其實(shí)現(xiàn)原理及關(guān)鍵技術(shù)進(jìn)行研究分析,著重介紹了基于Python語(yǔ)言的爬蟲數(shù)據(jù)采集技術(shù)在Web信息采集中的應(yīng)用,提出以Python及相關(guān)庫(kù)為主要工具,并結(jié)合模塊化實(shí)現(xiàn)方法,建立基于Python技術(shù)的Web文本信息采集系統(tǒng)框架,并以百度百科為例,實(shí)現(xiàn)信息的快速搜索與相關(guān)信息的數(shù)據(jù)挖掘,并對(duì)檢索數(shù)據(jù)進(jìn)行分析和研究,得出相關(guān)結(jié)論。
關(guān)鍵詞:Python;Web;數(shù)據(jù)爬??;數(shù)據(jù)分析
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)27-0001-02
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,Web作為廣大互聯(lián)網(wǎng)用戶共享信息而發(fā)展起來(lái)的一種internet應(yīng)用,其承載的信息量呈幾何級(jí)數(shù)增長(zhǎng),Web的應(yīng)用與發(fā)展為人們帶來(lái)了巨大的社會(huì)效益和經(jīng)濟(jì)效益,已經(jīng)成為用戶獲取信息的重要來(lái)源。Web信息急劇膨脹的同時(shí),如何有效篩選和利用信息面臨巨大的挑戰(zhàn)。同時(shí),Web內(nèi)容的多樣性與非結(jié)構(gòu)性,導(dǎo)致有效信息獲取困難。借助于Python技術(shù)實(shí)現(xiàn)Web信息的有效提取和挖掘,能夠在多個(gè)領(lǐng)域發(fā)揮重要作用,極大地提高數(shù)據(jù)搜集與分析的效率,促進(jìn)社會(huì)生產(chǎn)力的提升。
1 Web信息挖掘技術(shù)概述
1.1 web數(shù)據(jù)挖掘技術(shù)定義
Web數(shù)據(jù)挖掘是通過(guò)模擬用戶正常的瀏覽器行為,并設(shè)置一定的規(guī)則,從而獲取Web頁(yè)面指定信息。Web數(shù)據(jù)挖掘的最終目的是將非結(jié)構(gòu)化的信息從海量的信息提取并以統(tǒng)一的方式進(jìn)行存儲(chǔ)(以CSV、JSON、XML等模式存儲(chǔ))。在此過(guò)程中,將涉及網(wǎng)絡(luò)爬蟲、數(shù)據(jù)結(jié)構(gòu)化與正則表達(dá)式等多種關(guān)鍵技術(shù)。
1.2 數(shù)據(jù)挖掘技術(shù)應(yīng)用優(yōu)勢(shì)
隨著互聯(lián)網(wǎng)技術(shù)的應(yīng)用與普及,網(wǎng)絡(luò)中信息資源極為豐富,但大多數(shù)信息以無(wú)結(jié)構(gòu)的文筆形式存在,導(dǎo)致信息采集與歸類變得極為困難。在數(shù)據(jù)挖掘技術(shù)出現(xiàn)之前,用戶要將有效的信息進(jìn)行采集和歸類須采用手動(dòng)復(fù)制粘貼的方式,不僅耗時(shí)耗力,而且數(shù)據(jù)質(zhì)量較差,難以實(shí)現(xiàn)數(shù)據(jù)采集與分析的自動(dòng)化。而基于Python語(yǔ)言的網(wǎng)絡(luò)爬蟲技術(shù),具有速度快、準(zhǔn)確性高等特點(diǎn),能夠有效提升數(shù)據(jù)采集與分析效率,提高數(shù)據(jù)采集質(zhì)量。同時(shí)人工操作難免存在數(shù)據(jù)錯(cuò)誤、遺漏等問(wèn)題,在統(tǒng)計(jì)較大數(shù)據(jù)時(shí),糾錯(cuò)難度極大,而借助網(wǎng)絡(luò)爬蟲技術(shù),數(shù)據(jù)準(zhǔn)確性較高,即使存在問(wèn)題,用戶可通過(guò)規(guī)則、程序調(diào)整即可完成糾錯(cuò),具有無(wú)可比擬的應(yīng)用優(yōu)勢(shì)。
1.3 網(wǎng)絡(luò)爬蟲工作原理
網(wǎng)絡(luò)爬蟲是根據(jù)制定的規(guī)則對(duì)Web頁(yè)面進(jìn)行遍歷查詢,從而自動(dòng)抓取有效信息的腳本。網(wǎng)絡(luò)爬蟲的主要原理是通過(guò)互聯(lián)網(wǎng)指定的子集合中讀取URL,訪問(wèn)相應(yīng)的Web內(nèi)容,并遍歷Web頁(yè)面所包含的鏈接,并遍歷鏈接繼續(xù)爬取包含的子頁(yè)面內(nèi)容,從而完成數(shù)據(jù)的收集、分類和整理。
1.4 不同爬蟲算法的比較
當(dāng)前網(wǎng)絡(luò)爬蟲核心算法主要包括廣度優(yōu)先、深度優(yōu)先、Partial PageRank及Opic爬蟲算法。不同爬蟲算法各有優(yōu)劣,應(yīng)結(jié)合實(shí)際應(yīng)用場(chǎng)景進(jìn)行合理選擇。
1.4.1 廣度優(yōu)先策略
該方法是根據(jù)Web內(nèi)容目錄層級(jí),先爬取起始頁(yè)面同一層級(jí)的頁(yè)面,而后將爬取的鏈接放在隊(duì)列中,從而實(shí)現(xiàn)向外延伸,盡可能多地獲取鏈接信息,并不斷向下一層級(jí)深入。該方法能夠?qū)崿F(xiàn)爬蟲的并行處理,提高Web信息抓取速度。因此,廣度優(yōu)先策略是應(yīng)用最為廣泛的爬蟲算法。同時(shí),該算法不足之處在于挖掘深層次目錄所花費(fèi)的時(shí)間較長(zhǎng)。
1.4.2 深度優(yōu)先策略
深度優(yōu)先策略是指爬蟲依次訪問(wèn)當(dāng)前頁(yè)面直至最深目錄,并在完成一個(gè)分支后返回,繼續(xù)爬去另一個(gè)分支,當(dāng)所有的鏈接遍歷結(jié)束后,爬蟲任務(wù)才會(huì)結(jié)束。該方法能夠保證爬蟲挖掘信息的深度,但在層次較深的站點(diǎn)信息挖掘時(shí)將消耗大量的系統(tǒng)資源。
1.4.3 Partial PageRank策略
該算法是爬蟲從起始頁(yè)開始后,根據(jù)計(jì)算的Web頁(yè)面PageRank值確定該頁(yè)面的爬取價(jià)值,并優(yōu)先爬取PageRank值大的頁(yè)面,從而加快爬蟲執(zhí)行效率,能夠取得較好的遍歷效果,但可能與全部遍歷結(jié)果存在一定的偏差,進(jìn)而導(dǎo)致數(shù)據(jù)準(zhǔn)確性降低。
1.4.4 Opic策略
該算法可被視為一種改進(jìn)型的PageRank算法,開始前,各頁(yè)面都會(huì)被賦予相同的值,當(dāng)頁(yè)面被下載后,其值將平均分配給頁(yè)面中連接,并情況當(dāng)前頁(yè)面的值,爬蟲根據(jù)值的大小確定優(yōu)先級(jí),優(yōu)先下載值最大的頁(yè)面。該算法不需要迭代計(jì)算,適用于實(shí)時(shí)計(jì)算。
1.5 數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)
大部分信息以無(wú)結(jié)構(gòu)的文本形式存在,直接歸類和利用存在一定的困難,而通過(guò)結(jié)構(gòu)化存儲(chǔ)的方式進(jìn)行存儲(chǔ),即將Web頁(yè)面中的無(wú)結(jié)構(gòu)信息抽取出來(lái)并以結(jié)構(gòu)化的方式存儲(chǔ)到本地,從而實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的規(guī)范、統(tǒng)一。此過(guò)程都是自動(dòng)化執(zhí)行操作,不需要人工干預(yù),用戶可結(jié)合應(yīng)用場(chǎng)景自行選擇數(shù)據(jù)庫(kù)、XML、CSV等存儲(chǔ)方式。如選用數(shù)據(jù)庫(kù)作為存儲(chǔ)形式時(shí),Web信息則以二維表結(jié)構(gòu)的形式存儲(chǔ),法具有速度快、準(zhǔn)確性高等特點(diǎn),能夠滿足多線程數(shù)據(jù)挖掘時(shí)數(shù)據(jù)存儲(chǔ)要求。
1.6 正則表達(dá)式
Web頁(yè)面大多為Html格式存在,而Html頁(yè)面是由各種語(yǔ)義對(duì)象構(gòu)成,不同的對(duì)象均存在不同的標(biāo)記,通過(guò)對(duì)Html頁(yè)面進(jìn)行解析,并基于正則表達(dá)式進(jìn)行匹配,能夠?qū)崿F(xiàn)對(duì)特定字符串信息的查找與提取。例如,在爬取某包含“is”的Web頁(yè)面源代碼時(shí),可通過(guò)matchObj = re.match( r'(.*) is (.*?) .*', line, re.M|re.I)的方式進(jìn)行信息提取,從而對(duì)包含“is”的字符串進(jìn)行自動(dòng)匹配并輸出相關(guān)內(nèi)容。在此案例中,( r'(.*) is (.*?) .*', line, re.M|re.I)即為匹配的正則表達(dá)式,能夠?yàn)閿?shù)據(jù)提取提供方法。此外,為了適應(yīng)頁(yè)面變化、網(wǎng)站升級(jí)等,確保匹配更加穩(wěn)定,用戶還可以使用Python自帶的模塊及第三方庫(kù),對(duì)Web頁(yè)面內(nèi)容進(jìn)行解析和提取。
2 Web數(shù)據(jù)挖掘系統(tǒng)設(shè)計(jì)
在系統(tǒng)設(shè)計(jì)和編寫時(shí),應(yīng)按模塊化思想對(duì)系統(tǒng)功能進(jìn)行合理劃分,實(shí)現(xiàn)模塊功能分類,便于代碼維護(hù)和調(diào)試。
2.1 爬蟲功能設(shè)計(jì)
通過(guò)設(shè)置定時(shí)任務(wù),當(dāng)符合任務(wù)執(zhí)行條件時(shí),系統(tǒng)根據(jù)特定的起始Web頁(yè)面進(jìn)行正則匹配,并對(duì)符合正在匹配的鏈接進(jìn)行抓取,對(duì)其中包含的符合要求的數(shù)據(jù)進(jìn)行抓取。最后,將獲得的信息與數(shù)據(jù)進(jìn)行對(duì)比,如數(shù)據(jù)庫(kù)中已存在相關(guān)信息則停止,不存在則插入更新信息。例如,根據(jù)指定的鏈接,收集百度百科詞條內(nèi)容,建立鏈接并分析其頁(yè)面特征。首先,利用urllib2建立與服務(wù)器鏈接,當(dāng)服務(wù)器收到請(qǐng)求后,返回對(duì)應(yīng)的HTTP應(yīng)答,腳本內(nèi)容如下:
fromurllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen(' https://baike.baidu.com/')
bsObj = BeautifulSoup(html, 'html.parser')
t1 = bsObj.find_all('a')
for t2 in t1:
t3 = t2.get('href')
print(t3)
通過(guò)該方法能夠獲取百度百科頁(yè)面包含的所有超鏈接。其次,設(shè)置正則表達(dá)式,對(duì)獲取的URL進(jìn)行篩選和匹配。在此過(guò)程中,可使用BeautifulSoup模塊獲取URL標(biāo)簽,并使用re模塊構(gòu)建正則表達(dá)式,以便于篩選符合條件的url。如下所示。
import re
from bs4 import BeautifulSoup
print bsObj。prettify
urls=soup.findAll(”a”,hrel=True)
defgetLink(countryUrl);
html = urlopen(' https://baike.baidu.com/'+ itemUrl)
bsObj = BeautifulSoup(html, 'html.parser')
returnbsObj.finall(“a”,href=re.compie(“”(/item/)((??。海?)* basicInfo-item value”))
links=getLinks(“https://baike.baidu.com/item/%E5%9B%BD%E5%AE%B6/17205”)
whilelen(links)>0
links=getLinks(newCountry)
for link in bsObj.findALL(“a”)
if “href” in link.attrs;
print(links.attrs[‘href]
通過(guò)上述方式,對(duì)百度百科數(shù)據(jù)進(jìn)行篩選與提取,從而下載并獲得相應(yīng)的數(shù)據(jù)信息。
2.2 爬蟲功能設(shè)計(jì)
根據(jù)已下載的Web數(shù)據(jù),可借助于Python語(yǔ)言進(jìn)行相應(yīng)的處理和分析。例如,我們可以借助numpy數(shù)值計(jì)算擴(kuò)展進(jìn)行數(shù)據(jù)分析,實(shí)現(xiàn)對(duì)其中的字詞出現(xiàn)頻次進(jìn)行分析,實(shí)例如下:
importnumpy
segStat=segmentDataFrame.groupby(
by='segment'
)['segment'].agg({'計(jì)數(shù)':numpy.size}).reset_index().sort(
columns=['計(jì)數(shù)'],
ascending=False)
在此基礎(chǔ)上,借助第三方庫(kù)WordCloud生成大數(shù)據(jù)詞云圖,
fromwordcloud import WordCloud
importmatplotlib.pyplot as plt
wordcloud=WordCloud(
font_path='字體路徑\simhei.ttf',
background_color='black')
words=fSegStat.set_index('segment').to_dict()
wordcloud.fit_words(words['計(jì)數(shù)'])
plt.imshow(wordcloud)
plt.close()
從而得出相關(guān)頁(yè)面的詞頻詞云圖。由此可見(jiàn),中國(guó)、人民、黨和發(fā)展等詞匯出現(xiàn)次數(shù)較多。
3 結(jié)束語(yǔ)
本文著重介紹了利用Python語(yǔ)言進(jìn)行Web數(shù)據(jù)進(jìn)行挖掘和分析的原理及方法,重點(diǎn)分析了網(wǎng)絡(luò)爬蟲的算法優(yōu)勢(shì)及應(yīng)用環(huán)境,并就正則表達(dá)式、數(shù)據(jù)存儲(chǔ)方式、數(shù)據(jù)抓取過(guò)程及分析方法進(jìn)行了闡述,可見(jiàn)基于Python語(yǔ)言的網(wǎng)絡(luò)爬蟲在數(shù)據(jù)抓取與應(yīng)用中具有顯著的優(yōu)勢(shì),能夠?qū)崿F(xiàn)數(shù)據(jù)提取的自動(dòng)化、個(gè)性化,極大提升了數(shù)據(jù)搜索與分析的效率與質(zhì)量。在數(shù)據(jù)爬取過(guò)程中,用戶應(yīng)考慮數(shù)據(jù)爬蟲算法優(yōu)化和調(diào)整,結(jié)合Python多線程技術(shù),實(shí)現(xiàn)下載緩存優(yōu)化,提高數(shù)據(jù)挖掘的性能。
參考文獻(xiàn):
[1] 熊暢.基于Python爬蟲技術(shù)的網(wǎng)頁(yè)數(shù)據(jù)抓取與分析研究[J].數(shù)字技術(shù)與應(yīng)用,2017(9):35-36.
[2] 陳琳,李容.基于動(dòng)態(tài)Web的Python多線程空氣質(zhì)量數(shù)據(jù)程序設(shè)計(jì)[J].成都信息工程大學(xué)學(xué)報(bào),2016,31(2):180-184.
[3] 齊鵬,李隱峰,宋玉偉.基于Python的Web數(shù)據(jù)采集技術(shù)[J].電子科技,2012,25(11):118-120. [通聯(lián)編輯:王力]