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