呂新超
摘要:為了解決傳統(tǒng)網(wǎng)絡(luò)爬蟲(chóng)在大型網(wǎng)站上提取信息效率不高的問(wèn)題,研究引入了Scrapy框架作為Python網(wǎng)絡(luò)爬蟲(chóng)的提取方法。以某圖書(shū)網(wǎng)站為案例,文章深入分析了該網(wǎng)站的頁(yè)面結(jié)構(gòu),編寫(xiě)了高效的爬蟲(chóng)文件源碼,用于提取目標(biāo)網(wǎng)站的關(guān)鍵信息,包括圖書(shū)名稱(chēng)、價(jià)格、定價(jià)、作者和銷(xiāo)量排名等。研究結(jié)果表明,通過(guò)對(duì)主流網(wǎng)站的信息提取實(shí)驗(yàn),在實(shí)際應(yīng)用中展示了該方法取得了良好的效果,可以成功提出需要的信息,并根據(jù)提取出的圖書(shū)價(jià)格和銷(xiāo)量排名信息可以分析出價(jià)格與銷(xiāo)量之間的關(guān)系,實(shí)現(xiàn)了對(duì)大型網(wǎng)站的信息提取任務(wù)。研究為爬蟲(chóng)技術(shù)在數(shù)據(jù)采集和分析領(lǐng)域的應(yīng)用提供了有力的支持,為信息爬取與處理提供了新的解決方案。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng);Scrapy框架;Python語(yǔ)言;數(shù)據(jù)采集
中圖分類(lèi)號(hào):TP393.09? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2024)07-0049-04
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID)
0 引言
近年來(lái),大數(shù)據(jù)信息技術(shù)的發(fā)展使全球范圍內(nèi)的網(wǎng)站數(shù)量呈現(xiàn)指數(shù)性的增長(zhǎng),每個(gè)網(wǎng)站都蘊(yùn)含著豐富的信息資源,這些信息資源具有巨大的潛力,可用于揭示某一行業(yè)的規(guī)律、預(yù)測(cè)未來(lái)趨勢(shì),并滿(mǎn)足網(wǎng)絡(luò)終端用戶(hù)的個(gè)性化需求[1]。然而,從海量數(shù)據(jù)中提取有效信息并實(shí)現(xiàn)個(gè)性化信息傳遞,并非一項(xiàng)簡(jiǎn)單的任務(wù)。為了應(yīng)對(duì)這一挑戰(zhàn),研究人員和企業(yè)界正在積極探索各種技術(shù)和方法。其中,Python爬蟲(chóng)系統(tǒng)融合了Web抓取和數(shù)據(jù)挖掘技術(shù),成為一個(gè)強(qiáng)大的工具[2]。
趙薔[3]發(fā)現(xiàn),利用Python爬蟲(chóng)可以在短時(shí)間內(nèi)成功抓取大量有用的旅游數(shù)據(jù),包括地區(qū)、購(gòu)物、評(píng)價(jià)等信息,說(shuō)明Python爬蟲(chóng)系統(tǒng)對(duì)于高效數(shù)據(jù)的抓取非常有效,可以幫助旅游者和旅行規(guī)劃者更快地獲取和理解旅游相關(guān)信息。Rismawan[4]發(fā)現(xiàn),利用Python編程語(yǔ)言的數(shù)據(jù)爬取技術(shù)創(chuàng)建的新聞高效網(wǎng)站可以系統(tǒng)地顯示來(lái)自各種來(lái)源的新聞在線(xiàn)網(wǎng)站,有效地從在線(xiàn)新聞中獲取信息。馬騰[5]發(fā)現(xiàn),通過(guò)使用Python網(wǎng)絡(luò)爬蟲(chóng)技術(shù)可以從房地產(chǎn)網(wǎng)站上抓取二手房信息,這表明數(shù)據(jù)爬取獲取技術(shù)在獲取大規(guī)模房地產(chǎn)市場(chǎng)數(shù)據(jù)方面非常有效,能夠深入了解大城市的二手房市場(chǎng)情況,為政府和購(gòu)房者提供有價(jià)值的市場(chǎng)意見(jiàn)和信息。
Scrapy框架作為高度可定制的Web抓取框架,能夠采集、處理和分析Web上的數(shù)據(jù)信息。針對(duì)傳統(tǒng)網(wǎng)絡(luò)爬蟲(chóng)在大型網(wǎng)站上信息提取效率不高的問(wèn)題,本研究采用了Scrapy框架作為Python網(wǎng)絡(luò)爬蟲(chóng)的核心工具。以某圖書(shū)網(wǎng)站為例,本研究深入分析了該網(wǎng)站的頁(yè)面結(jié)構(gòu),并編寫(xiě)了高效的爬蟲(chóng)文件源碼,用于提取目標(biāo)網(wǎng)站的關(guān)鍵信息,包括圖書(shū)名稱(chēng)、價(jià)格、定價(jià)、作者和銷(xiāo)量排名等。研究的創(chuàng)新性表現(xiàn)在引入Scrapy框架作為Python網(wǎng)絡(luò)爬蟲(chóng)的核心工具,從而提高了數(shù)據(jù)采集、處理和分析的效率和靈活性,共同推動(dòng)了網(wǎng)絡(luò)爬蟲(chóng)技術(shù)在數(shù)據(jù)采集和分析領(lǐng)域的發(fā)展,為更高效和可靠的信息提供了新的解決方案。
1 網(wǎng)絡(luò)爬蟲(chóng)相關(guān)理論
1.1 網(wǎng)絡(luò)爬蟲(chóng)定義
網(wǎng)絡(luò)爬蟲(chóng),也被稱(chēng)為網(wǎng)絡(luò)爬取器、網(wǎng)絡(luò)機(jī)器人或網(wǎng)絡(luò)蜘蛛,是一種自動(dòng)化程序或腳本,用于自動(dòng)地瀏覽互聯(lián)網(wǎng)上的網(wǎng)頁(yè)并從中收集信息[6]。網(wǎng)絡(luò)爬蟲(chóng)的主要目的是收集互聯(lián)網(wǎng)上的數(shù)據(jù),這些數(shù)據(jù)可以用于各種用途,包括搜索引擎索引、數(shù)據(jù)挖掘、信息檢索、價(jià)格比較、網(wǎng)站更新監(jiān)測(cè)等[7]。
網(wǎng)絡(luò)爬蟲(chóng)根據(jù)其功能、用途和行為特征有多種分類(lèi)。通用網(wǎng)絡(luò)爬蟲(chóng)廣泛抓取互聯(lián)網(wǎng)信息,如搜索引擎爬蟲(chóng);聚焦網(wǎng)絡(luò)爬蟲(chóng)專(zhuān)注于特定主題或領(lǐng)域,如新聞聚合網(wǎng)站;增量式網(wǎng)絡(luò)爬蟲(chóng)定期更新已抓取數(shù)據(jù)的索引;深層網(wǎng)絡(luò)爬蟲(chóng)訪問(wèn)難以到達(dá)的深層網(wǎng)頁(yè);垂直網(wǎng)絡(luò)爬蟲(chóng)針對(duì)特定垂直市場(chǎng);協(xié)作網(wǎng)絡(luò)爬蟲(chóng)則是多個(gè)爬蟲(chóng)合作工作;爬蟲(chóng)機(jī)器人具有自主學(xué)習(xí)能力,選擇爬蟲(chóng)類(lèi)型需根據(jù)具體需求[8]。網(wǎng)絡(luò)爬蟲(chóng)基本的工作流程如圖1所示。
1.2 Python網(wǎng)絡(luò)爬蟲(chóng)
Python網(wǎng)絡(luò)爬蟲(chóng)是一種基于Python編程語(yǔ)言的自動(dòng)化程序,用于在互聯(lián)網(wǎng)上瀏覽并抓取網(wǎng)頁(yè)內(nèi)容[9]。其主要功能包括發(fā)送超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP) 請(qǐng)求獲取網(wǎng)頁(yè)、解析超文本標(biāo)記語(yǔ)言(HyperText Markup Language,HTML) 文檔以提取所需信息以及存儲(chǔ)或分析抓取到的數(shù)據(jù)。網(wǎng)絡(luò)爬蟲(chóng)通常用于各種用途,包括數(shù)據(jù)采集、搜索引擎索引、信息檢索、數(shù)據(jù)挖掘等,但在使用時(shí)需要遵守法律和道德規(guī)范,以確保合法和道德的數(shù)據(jù)采集行為[10],常用的Python網(wǎng)絡(luò)爬蟲(chóng)庫(kù)及其功能如表1所示。
1.3 Scrapy框架
Scrapy是一個(gè)領(lǐng)先的Python網(wǎng)絡(luò)爬蟲(chóng)框架,專(zhuān)注于高效且可擴(kuò)展的大規(guī)模數(shù)據(jù)采集任務(wù)。其優(yōu)勢(shì)在于提供了一套全面的工具,包括HTTP請(qǐng)求管理、數(shù)據(jù)解析、鏈接追蹤、異步處理等,以支持系統(tǒng)化的信息抓取工作。Scrapy允許開(kāi)發(fā)者根據(jù)項(xiàng)目需求定制爬蟲(chóng)規(guī)則,并提供多種數(shù)據(jù)存儲(chǔ)選項(xiàng),使其廣泛應(yīng)用于搜索引擎索引、數(shù)據(jù)挖掘、新聞聚合等多個(gè)領(lǐng)域。這一框架擁有堅(jiān)實(shí)的社區(qū)支持和詳盡的文檔,是研究和實(shí)踐網(wǎng)絡(luò)爬取任務(wù)的首選工具之一[11]。常用的Scrapy框架命令如表2所示。
Scrapy框架結(jié)構(gòu)如圖2所示,主要組件包括引擎(Engine)、調(diào)度器(Scheduler)、下載器(Downloader)、中間件(Middleware)、爬蟲(chóng)(Spiders)、項(xiàng)目管道(Pipelines)、下載中間件(Downloader Middleware)、擴(kuò)展(Extensions),這些組件共同協(xié)作,構(gòu)成了Scrapy框架的核心結(jié)構(gòu),使其成為一個(gè)強(qiáng)大且高度可配置的網(wǎng)絡(luò)爬蟲(chóng)工具[12]。
引擎是Scrapy的核心組件,負(fù)責(zé)協(xié)調(diào)整個(gè)爬蟲(chóng)流程,包括處理請(qǐng)求、分發(fā)響應(yīng)、觸發(fā)爬蟲(chóng)中間件和管道等。調(diào)度器負(fù)責(zé)管理爬取請(qǐng)求的隊(duì)列,并確保它們以合適的方式被發(fā)送到引擎進(jìn)行處理。下載器負(fù)責(zé)從互聯(lián)網(wǎng)下載網(wǎng)頁(yè)內(nèi)容,并將響應(yīng)返回給引擎,處理HTTP請(qǐng)求、處理Cookies和處理重定向等。中間件是可自定義的組件,用于在請(qǐng)求發(fā)送和響應(yīng)接收的過(guò)程中進(jìn)行處理。爬蟲(chóng)是用戶(hù)定義的規(guī)則,用于指定如何抓取和解析網(wǎng)頁(yè)。每個(gè)爬蟲(chóng)通常定義了起始URL、如何跟蹤鏈接以及如何解析網(wǎng)頁(yè)內(nèi)容。項(xiàng)目管道是數(shù)據(jù)處理和存儲(chǔ)的組件,用于將爬取到的數(shù)據(jù)進(jìn)行后續(xù)處理,如存儲(chǔ)到數(shù)據(jù)庫(kù)、寫(xiě)入文件或進(jìn)行其他自定義操作。下載中間件是特定于下載器的中間件,用于在HTTP請(qǐng)求和響應(yīng)的發(fā)送和接收中進(jìn)行處理。擴(kuò)展允許開(kāi)發(fā)者自定義和擴(kuò)展Scrapy的功能,可以編寫(xiě)擴(kuò)展來(lái)添加新特性或修改現(xiàn)有功能的行為[13]。
Scrapy框架的數(shù)據(jù)流向[14]:首先,Scrapy引擎向Spider請(qǐng)求第一個(gè)要抓取的URL,然后Spider提供URL給引擎。接著,Scrapy引擎接收到URL并將其傳遞給調(diào)度器進(jìn)行排隊(duì)和排序,隨后調(diào)度器將URL處理成請(qǐng)求(request)并將這些請(qǐng)求返回給Scrapy引擎。Scrapy引擎接收到這些請(qǐng)求后,使用下載器中間件將它們發(fā)送給下載器進(jìn)行頁(yè)面下載。下載器下載完成后,將頁(yè)面內(nèi)容封裝在響應(yīng)(response)中,并將響應(yīng)返回給Scrapy引擎。Scrapy引擎接著使用Spider中間件將響應(yīng)傳遞給Spider進(jìn)行處理,Spider提取網(wǎng)站數(shù)據(jù)并返回結(jié)構(gòu)化的item給Scrapy引擎,如果有跟進(jìn)的請(qǐng)求(request)也會(huì)返回給引擎。Scrapy引擎接收到item后,將其交給項(xiàng)目管道(Item Pipeline)進(jìn)行進(jìn)一步處理,同時(shí)如果有新的請(qǐng)求生成,它會(huì)再次經(jīng)過(guò)調(diào)度器,循環(huán)直到調(diào)度器沒(méi)有更多請(qǐng)求。整個(gè)流程允許Scrapy框架高效地協(xié)調(diào)和處理網(wǎng)絡(luò)爬取任務(wù),包括數(shù)據(jù)抓取和處理。
1.4 Xpath查詢(xún)語(yǔ)言
可擴(kuò)展標(biāo)記語(yǔ)言路徑語(yǔ)言(XML Path Language,XPath)是一種用于在XML文檔中定位和提取數(shù)據(jù)的查詢(xún)語(yǔ)言。XPath的主要原理是根據(jù)路徑表達(dá)式在XML文檔的節(jié)點(diǎn)樹(shù)中進(jìn)行導(dǎo)航和篩選,以便精確定位所需的節(jié)點(diǎn)。它是XML文檔處理的重要工具,用于XML數(shù)據(jù)的查詢(xún)、轉(zhuǎn)換和提取,常用于Web爬蟲(chóng)、XML文檔處理、XPath查詢(xún)引擎等各種應(yīng)用領(lǐng)域[15]。XPath路徑表達(dá)式如表3所示。
1.5 網(wǎng)頁(yè)爬蟲(chóng)設(shè)計(jì)
為了搭建網(wǎng)頁(yè)爬蟲(chóng)的環(huán)境,首先需要下載安裝Python 3.5,確保在安裝過(guò)程中選擇將Python 3.5添加到系統(tǒng)的環(huán)境變量(Path Environment Variable,PATH)中,以方便后續(xù)使用。接著,安裝JetBrains PyCharm Community Edition 2018.1.4 x64,這是一個(gè)Python編程的集成開(kāi)發(fā)環(huán)境,用于編寫(xiě)和管理爬蟲(chóng)代碼。此外,還需要安裝phpStudy,它包含了Apache或Nginx等Web服務(wù)器、MySQL數(shù)據(jù)庫(kù)以及超文本預(yù)處理器(Hypertext Preprocessor,PHP) 環(huán)境,對(duì)于爬蟲(chóng)的開(kāi)發(fā)和測(cè)試非常有用。最后,通過(guò)使用pip工具安裝Scrapy框架,這是一個(gè)用于爬蟲(chóng)開(kāi)發(fā)的Python框架,它提供了強(qiáng)大的工具和庫(kù)來(lái)簡(jiǎn)化數(shù)據(jù)爬取任務(wù)。安裝完成后,通過(guò)運(yùn)行“scrapy version”命令來(lái)驗(yàn)證Scrapy是否正確安裝。搭建環(huán)境后可以開(kāi)始使用Scrapy進(jìn)行數(shù)據(jù)爬取,以獲取所需的數(shù)據(jù)?;赟crapy框架下的Python爬蟲(chóng)系統(tǒng)流程如圖3所示。
研究以某圖書(shū)網(wǎng)站為例,基于Scrapy框架輔助下的Python爬蟲(chóng)進(jìn)行了信息提取,主要信息包括圖書(shū)名稱(chēng)、價(jià)格、定價(jià)、作者、銷(xiāo)量排名等?;赟crapy框架下的Python爬蟲(chóng)系統(tǒng)信息提取流程如圖4所示。
2 基于Scrapy框架下的Python爬蟲(chóng)系統(tǒng)信息提取示例分析
2.1 應(yīng)用示例分析
基于Scrapy框架下的Python爬蟲(chóng)系統(tǒng)信息提取應(yīng)用示例如圖5所示。
如圖5所示,基于Scrapy框架下的Python爬蟲(chóng)系統(tǒng)應(yīng)用示例顯示了從某圖書(shū)網(wǎng)站上獲取有關(guān)圖書(shū)的關(guān)鍵信息,主要包括書(shū)名、作者、價(jià)格、描述、折扣、出版時(shí)間、定價(jià)、出版社和銷(xiāo)量排名等。這個(gè)系統(tǒng)成功提供了一個(gè)高效的數(shù)據(jù)采集工具,可以讓用戶(hù)能夠方便地獲取和比較各種圖書(shū)信息,無(wú)須手動(dòng)瀏覽網(wǎng)頁(yè),從而節(jié)省時(shí)間和精力。這對(duì)于圖書(shū)愛(ài)好者、圖書(shū)銷(xiāo)售商和評(píng)測(cè)網(wǎng)站等各種應(yīng)用場(chǎng)景都具有實(shí)際的價(jià)值,同時(shí)也為數(shù)據(jù)分析和決策提供了有力支持。
2.2 圖書(shū)價(jià)格與銷(xiāo)量排名描述型分析
圖書(shū)價(jià)格與銷(xiāo)量排名描述型分析結(jié)果如圖6所示。
如圖6所示,銷(xiāo)量排名與價(jià)格之間存在明顯的負(fù)相關(guān)關(guān)系。具體而言,銷(xiāo)量排名靠前的產(chǎn)品通常表現(xiàn)出較低的價(jià)格水平,而銷(xiāo)量排名靠后的產(chǎn)品則傾向于具有排名靠前的價(jià)格。排名前五的產(chǎn)品平均價(jià)格為23.28元,而排名后五的產(chǎn)品平均價(jià)格為11.82元,這強(qiáng)烈暗示了價(jià)格對(duì)產(chǎn)品銷(xiāo)量排名的影響,反映了市場(chǎng)的競(jìng)爭(zhēng)特點(diǎn),消費(fèi)者更傾向于購(gòu)買(mǎi)價(jià)格相對(duì)較低的產(chǎn)品。該信息的分析結(jié)果為市場(chǎng)策略制定者提供了強(qiáng)有力的指導(dǎo),強(qiáng)調(diào)了在競(jìng)爭(zhēng)激烈的市場(chǎng)中,降低產(chǎn)品價(jià)格可能是提高銷(xiāo)售排名的方法有效。
3 結(jié)束語(yǔ)
研究基于Scrapy框架下的Python爬蟲(chóng)系統(tǒng),成功構(gòu)建了一個(gè)高效的信息提取工具,以某圖書(shū)網(wǎng)站為例,實(shí)現(xiàn)了對(duì)圖書(shū)價(jià)格和銷(xiāo)量排名等關(guān)鍵信息的自動(dòng)化采集和存儲(chǔ)。研究結(jié)果表明,基于Scrapy框架下的Python爬蟲(chóng)系統(tǒng)在獲取、提取和分析數(shù)據(jù)方面表現(xiàn)出了強(qiáng)大的能力。通過(guò)分析圖書(shū)價(jià)格與銷(xiāo)量排名的關(guān)系,發(fā)現(xiàn)了一些有趣的趨勢(shì)。在價(jià)格方面,本研究觀察到圖書(shū)的價(jià)格分布比較廣泛,從低價(jià)到高價(jià)不等,但總體來(lái)看圖書(shū)都集中在較低的價(jià)格區(qū)間,這可能反映了市場(chǎng)對(duì)于價(jià)格敏感度的體現(xiàn)。研究證實(shí)了基于Scrapy框架下的Python爬蟲(chóng)系統(tǒng)在信息采集和分析中的重要性和價(jià)值。通過(guò)自動(dòng)化的方式獲取相關(guān)圖書(shū)的信息,能夠更好地理解市場(chǎng)趨勢(shì)、用戶(hù)偏好,并為相關(guān)領(lǐng)域的決策提供數(shù)據(jù)支持。該方法不僅提高了數(shù)據(jù)的準(zhǔn)確性和效率,還為驅(qū)動(dòng)決策提供了充足的數(shù)據(jù)工具,具有廣泛的應(yīng)用前景。研究雖成功應(yīng)用Scrapy框架下的Python爬蟲(chóng)系統(tǒng)進(jìn)行數(shù)據(jù)提取與分析,但未來(lái)需要進(jìn)一步探索數(shù)據(jù)的深層挖掘和多維分析,以更全面地理解信息關(guān)聯(lián)性。
參考文獻(xiàn):
[1] 唐文軍,隆承志.基于Python的聚焦網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2023,51(4):845-849.
[2] WAN B.Exploring the effectiveness of web crawlers in detecting security vulnerabilities in computer software applications[J].IJIIS:International Journal of Informatics and Information Systems,2023,6(2):56-65.
[3] 趙薔.基于Python爬蟲(chóng)的旅游網(wǎng)站數(shù)據(jù)分析與可視化[J].電子設(shè)計(jì)工程,2022,30(16):152-155.
[4] RISMAWAN S A.Implementasi Website Berita Online Menggunakan Metode Crawling Data dengan Bahasa Pemrograman Python[J].Jurnal Teknik Informatika dan Sistem Informasi,2023,10(3): 167-178.
[5] 馬騰,余粟.基于Python爬蟲(chóng)的二手房信息數(shù)據(jù)可視化分析[J].軟件,2023,44(7):29-31.
[6] LUO K.A Study and Implementation of an Optimized University Library Book Recommendation System Based on Artificial Intelligence and Python Crawler Scraping Technology[J].Journal of Artificial Intelligence Practice,2023,6(2): 9-17.
[7] 劉萍.基于Python爬蟲(chóng)技術(shù)的網(wǎng)頁(yè)數(shù)據(jù)抓取方法[J].信息與電腦(理論版),2022,34(14):169-171.
[8] KHAN N,HAROON M.A Personalized Tour Recommender in Python using Decision Tree[J]. International Journal of Engineering and Management Research, 2023, 13(3): 168-174.
[9] 孫握瑜.基于Python的新浪微博爬蟲(chóng)程序設(shè)計(jì)與實(shí)現(xiàn)[J].科技資訊,2022,20(12):34-37. (下轉(zhuǎn)第56頁(yè))
(上接第52頁(yè))
[10] WU L,CHEN J S,ZHOU J.Teaching case design of python data analysis course for non-computer majors[J].Journal of Education and Educational Research,2023,3(1):97-99.
[11] 時(shí)春波,李衛(wèi)東,秦丹陽(yáng),等.Python環(huán)境下利用Selenium與JavaScript逆向技術(shù)爬蟲(chóng)研究[J].河南科技,2022,41(10):20-23.
[12] LI C Y.Study based on SNOWNLP model mining of stock bar investors emotions on stock prices[J].Modern Economy,2023,14(6):778-795.
[13] 李通,姚新強(qiáng).Scrapy框架下區(qū)域人口數(shù)據(jù)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2021,20(11):152-157.
[14] ZHANG X Y,QUAH C H,NAZRI BIN MOHD NOR M.Deep neural network-based analysis of the impact of ambidextrous innovation and social networks on firm performance[J].Scientific Reports,2023,13(1):10301.
[15] 黎妍,肖卓宇.引入Scrapy框架的Python網(wǎng)絡(luò)爬蟲(chóng)應(yīng)用研究[J].福建電腦,2021,37(10):58-60.
【通聯(lián)編輯:代影】