李喬宇+尚明華+王富軍+劉淑云
摘要:準(zhǔn)確、及時(shí)、高效地獲取農(nóng)業(yè)數(shù)據(jù)是全產(chǎn)業(yè)鏈農(nóng)業(yè)信息分析預(yù)警工作的前提和基礎(chǔ),是提升農(nóng)業(yè)信息分析預(yù)警專業(yè)化和規(guī)范化水平的關(guān)鍵。本研究針對(duì)互聯(lián)網(wǎng)中存在的大量農(nóng)業(yè)信息數(shù)據(jù),以玉米價(jià)格數(shù)據(jù)為例,設(shè)計(jì)數(shù)據(jù)抓取和規(guī)范化存儲(chǔ)策略,首先基于Scrapy框架建立對(duì)網(wǎng)頁(yè)的請(qǐng)求響應(yīng),分析網(wǎng)頁(yè)布局后對(duì)關(guān)鍵信息進(jìn)行循環(huán)抓取,并利用正則表達(dá)式將抓取的信息提取為格式化數(shù)據(jù),然后將數(shù)據(jù)本地化存儲(chǔ)為Microsoft Excel表格或存儲(chǔ)至數(shù)據(jù)庫(kù)中,最后利用Echarts將數(shù)據(jù)以可視化的方式在Web端展示,從而實(shí)現(xiàn)對(duì)農(nóng)業(yè)網(wǎng)絡(luò)數(shù)據(jù)的挖掘和利用。
關(guān)鍵詞:Scrapy;爬蟲(chóng);網(wǎng)絡(luò)數(shù)據(jù);數(shù)據(jù)挖掘;玉米價(jià)格
中圖分類號(hào): S126 文獻(xiàn)標(biāo)識(shí)號(hào):A文章編號(hào):1001-4942(2018)01-0142-06
Abstract Accurate, timely and efficient access to agricultural data is the prerequisite and basis for analysis and early warning of agricultural informations in the whole industry chain. It is the key to enhancing the professionalization and standardization of agricultural information analysis and early warning. With the maize price as an example, the research focused on large amounts of agricultural informations on the Internet and developed data crawling and normalized storage strategies. Firstly, we created request & response to the web pages based on Scrapy framework, analyzed the web page layout and then crawled the key informations cyclically;the data were extracted into formatted data using regular expressions, and then were stored as the localized data in a Microsoft Excel spreadsheet or in a database. Finally, Echarts was used to visualize the data on the Web, and thus the mining and utilization of agricultural network data were realized.
Keywords Scrapy; Crawler; Network data; Data mining; Maize price
隨著大數(shù)據(jù)技術(shù)的發(fā)展,農(nóng)業(yè)大數(shù)據(jù)的開(kāi)發(fā)和利用逐漸成為當(dāng)前研究的熱點(diǎn)。農(nóng)業(yè)大數(shù)據(jù)來(lái)源于農(nóng)業(yè)生產(chǎn)、農(nóng)業(yè)經(jīng)濟(jì)、農(nóng)業(yè)流通、農(nóng)業(yè)科技等各個(gè)方面,來(lái)源廣,類型多,結(jié)構(gòu)復(fù)雜,具有潛在應(yīng)用價(jià)值。數(shù)據(jù)來(lái)源不同,其獲取技術(shù)不同,目前農(nóng)業(yè)大數(shù)據(jù)獲取主要包括:農(nóng)業(yè)生產(chǎn)環(huán)境數(shù)據(jù)采集、生命信息智能感知、農(nóng)田變量信息快速采集、農(nóng)業(yè)遙感數(shù)據(jù)獲取、農(nóng)產(chǎn)品市場(chǎng)經(jīng)濟(jì)數(shù)據(jù)采集、農(nóng)業(yè)網(wǎng)絡(luò)數(shù)據(jù)抓取等[1]。在“互聯(lián)網(wǎng)+農(nóng)業(yè)”的發(fā)展形勢(shì)下,農(nóng)業(yè)網(wǎng)絡(luò)數(shù)據(jù)已成為農(nóng)業(yè)大數(shù)據(jù)的重要組成部分,但由于其數(shù)據(jù)格式復(fù)雜多樣,不利于快速統(tǒng)計(jì)分析,多僅是對(duì)數(shù)據(jù)的粗略展示,因此,如何有效統(tǒng)一農(nóng)業(yè)網(wǎng)絡(luò)數(shù)據(jù)格式,進(jìn)一步挖掘數(shù)據(jù)的深層價(jià)值,成為當(dāng)前大數(shù)據(jù)技術(shù)研究的重點(diǎn)。
農(nóng)產(chǎn)品市場(chǎng)價(jià)格信息對(duì)于分析農(nóng)產(chǎn)品市場(chǎng)行情變化,預(yù)測(cè)其價(jià)格走勢(shì),降低交易風(fēng)險(xiǎn),增加收益,具有重要意義。目前,網(wǎng)絡(luò)上的農(nóng)產(chǎn)品價(jià)格數(shù)據(jù),一般是由特定工作人員采集市場(chǎng)價(jià)格信息后通過(guò)移動(dòng)終端上報(bào)各農(nóng)業(yè)服務(wù)機(jī)構(gòu),再由農(nóng)業(yè)服務(wù)機(jī)構(gòu)發(fā)布到網(wǎng)上[2,3],對(duì)農(nóng)產(chǎn)品交易具有一定的指導(dǎo)意義。但由于各服務(wù)機(jī)構(gòu)發(fā)布的數(shù)據(jù)格式不統(tǒng)一,不利于對(duì)相關(guān)數(shù)據(jù)的進(jìn)一步挖掘分析,限制了其利用價(jià)值。利用爬蟲(chóng)技術(shù)從網(wǎng)絡(luò)中以一定的規(guī)則采集數(shù)據(jù),并統(tǒng)一格式存儲(chǔ),為進(jìn)一步挖掘網(wǎng)絡(luò)數(shù)據(jù)應(yīng)用價(jià)值奠定了基礎(chǔ)[4-7]。
網(wǎng)絡(luò)爬蟲(chóng)(web crawler)也叫網(wǎng)絡(luò)蜘蛛(web spider),是實(shí)現(xiàn)自動(dòng)瀏覽網(wǎng)頁(yè)和網(wǎng)頁(yè)數(shù)據(jù)抓取的計(jì)算機(jī)應(yīng)用程序。Scrapy是使用Python編寫(xiě)的爬蟲(chóng)應(yīng)用框架程序,具有結(jié)構(gòu)簡(jiǎn)單、使用方便的特點(diǎn),用戶借助Scrapy可以快速瀏覽下載網(wǎng)頁(yè)信息,并根據(jù)需要保存關(guān)鍵數(shù)據(jù)為需要的數(shù)據(jù)格式。目前,Scrapy被廣泛應(yīng)用于數(shù)據(jù)挖掘領(lǐng)域,已經(jīng)發(fā)展成為數(shù)據(jù)挖掘研究領(lǐng)域重要的應(yīng)用工具[8]。
玉米是我國(guó)重要的糧食作物,玉米價(jià)格是市場(chǎng)發(fā)展和供給平衡狀態(tài)的直接反映,通過(guò)提取其市場(chǎng)價(jià)格信息,不僅能夠直觀展示玉米交易市場(chǎng)的發(fā)展態(tài)勢(shì),同時(shí)有利于為供給側(cè)結(jié)構(gòu)性改革提供數(shù)據(jù)支撐,為相關(guān)部門(mén)制定生產(chǎn)發(fā)展決策提供理論依據(jù)。本研究以網(wǎng)絡(luò)上發(fā)布的玉米市場(chǎng)價(jià)格為例,基于Scrapy設(shè)計(jì)爬蟲(chóng),從中國(guó)飼料行業(yè)信息網(wǎng)爬取玉米價(jià)格信息數(shù)據(jù),并以Microsoft Excel 表格的形式存儲(chǔ)或存為數(shù)據(jù)庫(kù),以期為農(nóng)業(yè)網(wǎng)絡(luò)數(shù)據(jù)的進(jìn)一步挖掘利用提供一種有效的數(shù)據(jù)提取方法。
1 基于Scrapy的爬蟲(chóng)設(shè)計(jì)
1.1 Scrapy框架
網(wǎng)絡(luò)爬蟲(chóng)是以一定的規(guī)則自動(dòng)抓取互聯(lián)網(wǎng)信息的程序或者腳本,需要面向不同的應(yīng)用場(chǎng)合解決網(wǎng)絡(luò)連接、爬取策略等問(wèn)題[9-12]。Scrapy爬蟲(chóng)框架可以幫助開(kāi)發(fā)者快速開(kāi)發(fā)爬蟲(chóng),其基于Twisted異步網(wǎng)絡(luò)庫(kù)來(lái)處理網(wǎng)絡(luò)通訊,能夠?qū)崿F(xiàn)并行、分布式爬取,提高了爬取效率。endprint
Scrapy爬蟲(chóng)框架的結(jié)構(gòu)如圖1所示,包括以下5個(gè)主要模塊:
①Scrapy Engine:引擎,負(fù)責(zé)Spiders(爬蟲(chóng))、Item Pipeline(隊(duì)列)、Downloader(下載器)、Scheduler(調(diào)度器)之間的信息通訊和數(shù)據(jù)傳遞;
②Scheduler:調(diào)度器,負(fù)責(zé)接受引擎發(fā)送過(guò)來(lái)的Requests(請(qǐng)求),并按照一定的規(guī)則放入隊(duì)列中;
③Downloader:下載器,負(fù)責(zé)下載Scrapy Engine發(fā)送的所有Requests,并將其獲取到的Responses(響應(yīng))交還給Scrapy Engine,由引擎交給Spiders來(lái)處理;
④Spiders:負(fù)責(zé)處理所有Responses,從中提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入Scheduler;
⑤Item Pipeline:負(fù)責(zé)處理Spiders中獲取到的Item,并進(jìn)行處理,如去重、持久化存儲(chǔ)等。
Scrapy的工作流程是:Scrapy Engine啟動(dòng)并控制爬蟲(chóng)運(yùn)行,首先由Spider根據(jù)編寫(xiě)的爬蟲(chóng)策略控制Scrapy Engine向Scheduler發(fā)送請(qǐng)求(Requests),Scheduler將請(qǐng)求加入隊(duì)列,依次向Downloader發(fā)送,Downloader接收請(qǐng)求后將互聯(lián)網(wǎng)信息下載到本地成為響應(yīng)(Response),傳遞給Spiders處理后形成Items,由Pipeline保存或輸出。
1.2 玉米價(jià)格爬蟲(chóng)設(shè)計(jì)
1.2.1 玉米價(jià)格爬蟲(chóng)特點(diǎn) 網(wǎng)絡(luò)爬蟲(chóng)分為全網(wǎng)爬蟲(chóng)和聚焦爬蟲(chóng)。全網(wǎng)爬蟲(chóng)面向整個(gè)互聯(lián)網(wǎng),目的是盡可能多地索引互聯(lián)網(wǎng)資源[13],是實(shí)現(xiàn)搜索引擎的主要工具;聚焦爬蟲(chóng)面向特定目標(biāo),目的是獲取信息和數(shù)據(jù),是信息挖掘的主要工具。玉米價(jià)格爬蟲(chóng)為聚焦爬蟲(chóng),目標(biāo)不是從網(wǎng)絡(luò)資源中抓取特定網(wǎng)頁(yè),而是從特定網(wǎng)站分類和檢索有價(jià)值的信息。因此,玉米價(jià)格爬蟲(chóng)不需要檢索全網(wǎng)資源,負(fù)載小,設(shè)計(jì)重點(diǎn)是對(duì)價(jià)格數(shù)據(jù)的提取。
1.2.2 爬取策略設(shè)計(jì) 以中國(guó)飼料行業(yè)信息網(wǎng)的玉米頁(yè)面(http://www.feedtrade.com.cn/yumi/yumi_daily/)為例,見(jiàn)圖2。矩形框①標(biāo)注的區(qū)域?yàn)橛衩變r(jià)格的文章列表;橢圓框②標(biāo)注的區(qū)域?yàn)榇廊〉奈恼聵?biāo)題。玉米價(jià)格爬蟲(chóng)的目標(biāo),是在網(wǎng)頁(yè)中定位文章列表區(qū)域,獲取文章列表,從中篩選出希望爬取的文章標(biāo)題,根據(jù)標(biāo)題指向的鏈接進(jìn)入文章內(nèi)容頁(yè),從內(nèi)容頁(yè)中下載需要的信息到本地,不斷循環(huán)直至獲取所有需要的信息。
爬蟲(chóng)工作流程如圖3,把入口點(diǎn)鏈接(http://www.feedtrade.com.cn/yumi/yumi_daily/)加入調(diào)度器(任務(wù)隊(duì)列)中,調(diào)度器將任務(wù)分配給下載器,下載器將鏈接指向的頁(yè)面下載到本地,根據(jù)解析規(guī)則判斷該頁(yè)面為文章列表頁(yè),從該頁(yè)面獲取文章列表,根據(jù)列表中的標(biāo)題是否包含“山東”、“玉米”字段選擇待爬取的文章標(biāo)題,取出標(biāo)題指向的內(nèi)容鏈接放入調(diào)度器中,之后判斷文章列表頁(yè)是否有下一頁(yè),如果有就將下一頁(yè)指向的鏈接放入調(diào)度器,依此循環(huán),直至不存在下一頁(yè)。這樣就將所有的文章內(nèi)容頁(yè)鏈接放入到了調(diào)度器,當(dāng)下載器下載到文章內(nèi)容頁(yè),就會(huì)下載玉米價(jià)格文章,交由Pipeline做分析處理,提取玉米價(jià)格信息。當(dāng)調(diào)度器中所有的鏈接都被下載,玉米價(jià)格信息爬取完成。
2 爬蟲(chóng)實(shí)現(xiàn)
2.1 定義爬取對(duì)象
網(wǎng)頁(yè)中包含許多內(nèi)容,爬蟲(chóng)只抓取需要的內(nèi)容。爬蟲(chóng)的Item定義了爬取的對(duì)象,在玉米價(jià)格爬蟲(chóng)中,用MaizeItem定義爬取對(duì)象,包括:文章標(biāo)題、文章日期、文章鏈接、文章內(nèi)容。
2.2 網(wǎng)頁(yè)爬取
Web網(wǎng)頁(yè)是結(jié)構(gòu)化的,網(wǎng)頁(yè)中的任何內(nèi)容都處于結(jié)構(gòu)體中,因此可以在結(jié)構(gòu)體的路徑中查詢到。如圖4所示,在Chrome瀏覽器中右鍵選擇“檢查”,可以看到網(wǎng)頁(yè)的結(jié)構(gòu)體,框①顯示網(wǎng)頁(yè)中展示的玉米價(jià)格條目,框②為該條目在結(jié)構(gòu)體中內(nèi)容,其中包括文字信息和指向鏈接,框③為該條目在結(jié)構(gòu)體中的路徑。使用xpath()可以根據(jù)結(jié)構(gòu)體的路徑定位到玉米價(jià)格條目。在玉米價(jià)格爬蟲(chóng)中,程序?qū)憺椋?. content=response.xpath(‘//ul/li/a[contains(@title,"山東玉米")])
該段代碼表示查找所有處于“ul/li/a”路徑下,題名包含“山東玉米”的條目,從中提取文章標(biāo)題、文章日期和文章鏈接放入MaizeItem中。文章鏈接存為contentUrl,放入調(diào)度器中。對(duì)文章內(nèi)容頁(yè)的解析與文章列表頁(yè)不同,使用scrapy.Request(contentUrl, callback=self.parseMaizePrice)指定解析規(guī)則是parseMaizePrice()。在parseMaizePrice中編寫(xiě)解析規(guī)則,同樣使用xpath抓取文章內(nèi)容,存入MaizeItem中,這樣形成了一條包括文章標(biāo)題、日期、鏈接、內(nèi)容的完整Item條目,交給Pipeline處理。此外,在文章列表頁(yè)和文章內(nèi)容頁(yè)使用xpath()定位“下一頁(yè)”的鏈接,如果存在,則放入調(diào)度器中,繼續(xù)循環(huán)。
2.3 數(shù)據(jù)提取
在Pipeline中對(duì)爬取的MaizeItem對(duì)象進(jìn)行處理,形成按日期索引的玉米價(jià)格數(shù)據(jù)。其中,MaizeItem中的文章內(nèi)容是文字格式,形式如“……山東濰坊市壽光金玉米淀粉,價(jià)格統(tǒng)一調(diào)整為1.6元/千克。濰坊壽光新豐淀粉,水分30以內(nèi)價(jià)格執(zhí)行1.61元/千克,落0.01元……”,該內(nèi)容信息分散,難以利用,需要對(duì)其進(jìn)行進(jìn)一步提取,以形成方便利用的價(jià)格數(shù)據(jù)。經(jīng)分析,MaizeItem數(shù)據(jù)中包含的多個(gè)公司的玉米價(jià)格信息,只有部分文字內(nèi)容和價(jià)格數(shù)據(jù)是每日變動(dòng)的,而公司名是每日重復(fù)的。因此,數(shù)據(jù)提取的任務(wù)是:忽略文字內(nèi)容,提取出公司名稱和價(jià)格數(shù)據(jù),并建立二者的關(guān)聯(lián)關(guān)系。endprint
首先整理出公司名稱列表,根據(jù)該列表,使用正則表達(dá)式查找并提取該公司的玉米價(jià)格。正則表達(dá)式以“\d”表示數(shù)字,使用匹配規(guī)則“公司名稱+‘.*?(\d+.\d*)元/千克”可以查找到公司名稱下以“元/千克”為單位的價(jià)格數(shù)字。但價(jià)格數(shù)據(jù)的類型并不完全相同,有的是“X.X元/千克”的形式,還有的是“XX元/噸”或者“XX-XX元/噸”的形式,所以需要對(duì)公司列表根據(jù)價(jià)格數(shù)據(jù)的類型進(jìn)行分類,然后用不同的正則表達(dá)式提取價(jià)格數(shù)據(jù)。數(shù)據(jù)提取的結(jié)果是公司列表中公司每日的玉米價(jià)格數(shù)據(jù)。
2.4 數(shù)據(jù)存儲(chǔ)
對(duì)于爬取得到的數(shù)據(jù)可以本地化存儲(chǔ),也可以存入數(shù)據(jù)庫(kù)中。
2.4.1 本地化存儲(chǔ) 雖然Pipeline中可以直接建立json文件將數(shù)據(jù)寫(xiě)入,但json文件可讀性比較差,因此,本研究嘗試將json文件進(jìn)一步處理后保存為可讀性強(qiáng)的excel文件。提取到的公司每日玉米價(jià)格數(shù)據(jù)表是一個(gè)二維表結(jié)構(gòu),Pandas庫(kù)是python中處理數(shù)據(jù)的主要工具,借助其中的DataFrame可以存儲(chǔ)二維表結(jié)構(gòu)。首先建立“{公司名:玉米價(jià)格}”的字典priceDict,再建立“{日期:priceDict}”的二維字典priceAll,將其保存為DataFrame,然后以公司列表建立DataFrame的索引,最終使用DataFrame的to_excel()方法保存為Excel文件(圖5)。
2.4.2 數(shù)據(jù)庫(kù)存儲(chǔ) 按照Scrapy中定義的數(shù)據(jù)模型在數(shù)據(jù)庫(kù)中建立表,使用python的第三方模塊pymysql登錄數(shù)據(jù)庫(kù),執(zhí)行sql語(yǔ)句向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)。為實(shí)現(xiàn)增量爬取,需要在數(shù)據(jù)表中建立校驗(yàn)字段,以內(nèi)容鏈接的MD5加密信息作為校驗(yàn)信息存儲(chǔ),在插入數(shù)據(jù)前,先查詢數(shù)據(jù)的校驗(yàn)信息是否已經(jīng)在數(shù)據(jù)庫(kù)中存在,防止插入重復(fù)的數(shù)據(jù)。
2.5 數(shù)據(jù)爬取結(jié)果展示
將爬取的玉米價(jià)格數(shù)據(jù)利用Echarts控件在Web中展示(如圖5)。項(xiàng)目共享在Github上:https://github.com/joray86/maizeSpider。
3 結(jié)語(yǔ)
本研究實(shí)現(xiàn)了基于Scrapy的農(nóng)業(yè)網(wǎng)絡(luò)數(shù)據(jù)爬取,爬蟲(chóng)運(yùn)行環(huán)境為CPU i5-4210U、4GB內(nèi)存、Windows 7 64位操作系統(tǒng),爬取中國(guó)飼料行業(yè)信息網(wǎng)(http://www.feedtrade.com.cn/yumi/yumi_daily/)的山東玉米價(jià)格信息,共訪問(wèn)頁(yè)面228個(gè),耗時(shí)6 383 ms,提取到山東省的玉米市場(chǎng)流通價(jià)格數(shù)據(jù),可在Web中進(jìn)行可視化展示,也可持久化存儲(chǔ)到數(shù)據(jù)庫(kù)中或者存為Excel文件,這為用大數(shù)據(jù)方法進(jìn)一步挖掘有價(jià)值的信息、市場(chǎng)信息監(jiān)測(cè)和預(yù)警分析,以及政府決策和供需結(jié)構(gòu)調(diào)整等提供了有力、可靠的數(shù)據(jù)支撐。
利用爬取的山東省玉米市場(chǎng)價(jià)格數(shù)據(jù),可實(shí)現(xiàn)玉米市場(chǎng)價(jià)格的年度間同比和月、日數(shù)據(jù)環(huán)比分析,獲得玉米市場(chǎng)價(jià)格的變化趨勢(shì),可為玉米產(chǎn)業(yè)的生產(chǎn)、流通、加工各環(huán)節(jié)起到一定的引領(lǐng)和指導(dǎo)作用。
參 考 文 獻(xiàn):
[1] 王文生, 郭雷風(fēng).農(nóng)業(yè)大數(shù)據(jù)及其應(yīng)用展望[J].江蘇農(nóng)業(yè)科學(xué), 2015, 43(9):43-46.
[2] 張石銳, 鄭文剛, 申長(zhǎng)軍, 等.嵌入式手持無(wú)線農(nóng)產(chǎn)品價(jià)格信息采集終端[J].計(jì)算機(jī)工程與設(shè)計(jì), 2012, 33(2):514-518.
[3] 尚明華, 秦磊磊, 王風(fēng)云, 等.基于智能手機(jī)的小麥生產(chǎn)風(fēng)險(xiǎn)信息采集系統(tǒng)[J].農(nóng)業(yè)工程學(xué)報(bào), 2011, 27(5):178-182.
[4] 段青玲, 魏芳芳, 張磊, 等.基于數(shù)據(jù)的農(nóng)業(yè)網(wǎng)絡(luò)信息自動(dòng)采集與分類系統(tǒng)[J].農(nóng)業(yè)工程學(xué)報(bào), 2016, 32(12):172-178.
[5] 孟繁疆, 姬祥, 袁琦, 等.農(nóng)產(chǎn)品價(jià)格主題搜索引擎的研究與實(shí)現(xiàn)[J].東北農(nóng)業(yè)大學(xué)學(xué)報(bào), 2016, 47(9):64-71.
[6] 郭雷風(fēng).面向農(nóng)業(yè)領(lǐng)域的大數(shù)據(jù)關(guān)鍵技術(shù)研究[D].北京:中國(guó)農(nóng)業(yè)科學(xué)院, 2016.
[7] 李慧, 何永賢, 葉云.基于聚焦爬蟲(chóng)的農(nóng)業(yè)信息服務(wù)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J].天津農(nóng)業(yè)科學(xué), 2016, 10(10):60-63.
[8] 馬聯(lián)帥. 基于Scrapy的分布式網(wǎng)絡(luò)新聞抓取系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2015.
[9] 時(shí)永坤.基于Web Driver的定向網(wǎng)絡(luò)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn)[J].軟件, 2016, 37(9):94-97.
[10]杜彬.基于Selenium的定向網(wǎng)絡(luò)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn)[J].金融科技時(shí)代, 2016, 7(7):35-39.
[11]趙本本, 殷旭東, 王偉.基于Scrapy的GitHub數(shù)據(jù)爬蟲(chóng)[J].電子技術(shù)與軟件工程, 2016, 6(6):199-202.
[12]夏火松, 李保國(guó).基于Python的動(dòng)態(tài)網(wǎng)頁(yè)評(píng)價(jià)爬蟲(chóng)算法[J].軟件工程, 2016, 19(2):43-46.
[13]Castillo C. Effective web crawling[J]. ACM SIGIR Forum,2005, 39(1):55-56.endprint