版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章人工智能示教編程爬蟲簡(jiǎn)介爬蟲流程爬蟲框架網(wǎng)絡(luò)爬蟲是模擬用戶訪問(wèn)網(wǎng)站,通過(guò)處理和提取得到的網(wǎng)頁(yè)內(nèi)容,實(shí)現(xiàn)對(duì)圖片、文字等資源的獲取的一種計(jì)算機(jī)程序或自動(dòng)化腳本。Python作為一種擴(kuò)展性高的語(yǔ)言,有豐富的獲取網(wǎng)頁(yè)內(nèi)容、處理提取網(wǎng)頁(yè)內(nèi)容的爬蟲框架,是目前主流的網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)技術(shù)。爬蟲框架主要是將一些常見的功能代碼、業(yè)務(wù)邏輯等進(jìn)行封裝,從而能夠使開發(fā)人員以更高的效率開發(fā)出對(duì)應(yīng)的爬蟲項(xiàng)目。爬蟲框架Scrapy框架Scrapy框架Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用程序框架,可以應(yīng)用在包括數(shù)據(jù)挖掘、信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。其最初是為了網(wǎng)頁(yè)抓?。ňW(wǎng)絡(luò)抓?。┧O(shè)計(jì)的,也可以應(yīng)用在獲取API所返回的數(shù)據(jù)(如AmazonAssociatesWebServices)或通用的網(wǎng)絡(luò)爬蟲中。Scrapy框架Scrapy是一個(gè)爬蟲框架而非功能函數(shù)庫(kù),簡(jiǎn)而言之,它是一個(gè)半成品,可以幫助用戶簡(jiǎn)單快速地部署一個(gè)專業(yè)的網(wǎng)絡(luò)爬蟲。Scrapy爬蟲框架的組件引擎(Engine)調(diào)度器(Scheduler)下載器(Downloader)爬蟲(Spiders)項(xiàng)目管道(ItemPipelines)下載器中間件(DownloaderMiddlewares)Spider中間件(SpiderMiddlewares)Scrapy框架Scrapy框架的每個(gè)組件具有不同的分工與功能引擎(Engine)負(fù)責(zé)控制數(shù)據(jù)流在系統(tǒng)所有組件中的流向,并能在不同的條件下觸發(fā)相對(duì)應(yīng)的事件。引擎相當(dāng)于爬蟲的“大腦”,是整個(gè)爬蟲的調(diào)度中心。調(diào)度器(Scheduler)調(diào)度器從引擎接受請(qǐng)求并將它們加入隊(duì)列,以便之后引擎需要它們時(shí)可以提供給引擎。初始爬取的URL和后續(xù)在網(wǎng)頁(yè)中獲取的待爬取的URL都將被放入調(diào)度器中,等待爬取,同時(shí)調(diào)度器會(huì)自動(dòng)去除重復(fù)的URL。部分特定的URL不需要去重也可以通過(guò)設(shè)置實(shí)現(xiàn)不去重,如POST請(qǐng)求的URL。Scrapy框架下載器(Downloader)下載器的主要功能是獲取網(wǎng)頁(yè)內(nèi)容,并將其提供給引擎和Spiders。SpidersSpiders是Scrapy用戶編寫的用于分析響應(yīng),并提取Items或額外跟進(jìn)的URL的一個(gè)類。每個(gè)Spiders實(shí)例負(fù)責(zé)處理一個(gè)(一些)特定網(wǎng)站。Scrapy框架ItemPipelines主要功能:處理被Spiders提取出來(lái)的Items。典型的處理有清理、驗(yàn)證及持久化(如存取到數(shù)據(jù)庫(kù)中)。網(wǎng)頁(yè)中被爬蟲解析的數(shù)據(jù)存入Items后Items將被發(fā)送到項(xiàng)目管道(Pipelines)經(jīng)過(guò)幾個(gè)特定的處理數(shù)據(jù)的工序最后存入本地文件或數(shù)據(jù)庫(kù)Scrapy框架下載器中間件(DownloaderMiddlewares)下載器中間件是一組在引擎及下載器之間的特定鉤子(SpecificHook),主要功能是處理下載器傳遞給引擎的響應(yīng)(Response)。下載器中間件提供了一個(gè)簡(jiǎn)便的機(jī)制,可通過(guò)插入自定義代碼來(lái)擴(kuò)展Scrapy的功能。通過(guò)設(shè)置下載器中間件可以實(shí)現(xiàn)爬蟲自動(dòng)更換User-Agent、IP等功能。Spider中間件(SpiderMiddlewares)Spider中間件是一組在引擎及Spiders之間的特定鉤子(SpecificHook),主要功能是處理Spiders的輸入(響應(yīng))和輸出(Items及請(qǐng)求)。Spider中間件提供了一個(gè)簡(jiǎn)便的機(jī)制,可通過(guò)插入自定義代碼來(lái)擴(kuò)展Scrapy的功能。Scrapy框架Scrapy框架各組件之間的數(shù)據(jù)流向圖Scrapy框架(1)引擎(Engine)打開一個(gè)網(wǎng)站,找到處理該網(wǎng)站的Spiders,并向該Spiders請(qǐng)求第一個(gè)要爬取的URL。(2)引擎將爬取請(qǐng)求轉(zhuǎn)發(fā)給調(diào)度器(Scheduler),調(diào)度器指揮進(jìn)行下一步。(3)引擎向調(diào)度器獲取下一個(gè)要爬取的請(qǐng)求。(4)調(diào)度器返回下一個(gè)要爬取的URL給引擎,引擎將URL通過(guò)下載器中間件(請(qǐng)求方向)轉(zhuǎn)發(fā)給下載器(Downloader)。(5)當(dāng)網(wǎng)頁(yè)下載完畢時(shí),下載器會(huì)生成一個(gè)該網(wǎng)頁(yè)的響應(yīng),并將其通過(guò)下載器中間件(返回響應(yīng)方向)發(fā)送給引擎。數(shù)據(jù)流在Scrapy中由執(zhí)行引擎控制,數(shù)據(jù)流運(yùn)作的基本步驟如下。Scrapy框架(6)引擎從下載器中接收到響應(yīng)并通過(guò)Spiders中間件(輸入方向)發(fā)送給Spiders處理。(7)Spiders處理響應(yīng)并返回爬取到的Items及發(fā)送新的請(qǐng)求給引擎。(8)引擎將爬取到的Items(Spiders返回的)給ItemPipelines(項(xiàng)目管道),將請(qǐng)求(Spiders返回的)給調(diào)度器。(9)重復(fù)第(2)步,直到調(diào)度器中沒(méi)有更多的URL請(qǐng)求,引擎關(guān)閉該網(wǎng)站。數(shù)據(jù)流在Scrapy中由執(zhí)行引擎控制,其基本步驟如下。Crawley框架Crawley框架Crawley是用Python開發(fā)出來(lái)的一款爬蟲框架。Crawley框架致力于改變?nèi)藗儚幕ヂ?lián)網(wǎng)中提取數(shù)據(jù)的方式,可以更高效地從互聯(lián)網(wǎng)中爬取對(duì)應(yīng)內(nèi)容。Crawley框架的主要特點(diǎn)Crawley框架高速地爬取對(duì)應(yīng)網(wǎng)頁(yè)的內(nèi)容??蓪⑴廊〉降膬?nèi)容輕松地存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)中,如Postgres、MySQL、Oracle等數(shù)據(jù)庫(kù)??梢詫⑴廊〉臄?shù)據(jù)導(dǎo)出為JSON、XML等格式。支持非關(guān)系型數(shù)據(jù)庫(kù),如MongoDB、CouchDB等。支持使用命令行工具。支持使用Cookie登錄,并訪問(wèn)那些只有登錄才能夠訪問(wèn)的網(wǎng)頁(yè)。Portia框架Portia框架Portia框架是一款允許沒(méi)有任何編程基礎(chǔ)的用戶可視化地爬取網(wǎng)頁(yè)的爬蟲框架。給出要爬取的網(wǎng)頁(yè)中感興趣的數(shù)據(jù)內(nèi)容,通過(guò)Portia框架,可以將所要爬取的信息從相似的網(wǎng)頁(yè)中自動(dòng)提取出來(lái)。PySpider由binux編寫的強(qiáng)大的網(wǎng)絡(luò)爬蟲系統(tǒng),并帶有強(qiáng)大的WebUI。PySpider采用Python語(yǔ)言編寫,分布式架構(gòu),支持多種數(shù)據(jù)庫(kù)后端,具有強(qiáng)大的WebUI支持腳本編輯器、任務(wù)監(jiān)視器、項(xiàng)目管理器和結(jié)果查看器。PySpider框架PySpider的具體特性PySpider框架使用Web界面編寫調(diào)試腳本,監(jiān)控執(zhí)行狀態(tài),查看活動(dòng)歷史,獲取結(jié)果產(chǎn)出。支持MySQL、MongoDB、Redis、SQLite、PostgreSQL和SQLAIchemy。支持RabbitMQ、Beanstalk、Redis和Kombu作為消息隊(duì)列。支持抓取JavaScript的頁(yè)面。強(qiáng)大的調(diào)度控制,支持超時(shí)重爬及優(yōu)先級(jí)設(shè)置。組件可替換,支持單機(jī)部署或分布式部署,支持Docker部署。PySpider的架構(gòu)PySpider框架PySpider的架構(gòu)組件架構(gòu)組件有:schedule(調(diào)度器)、fetcher(爬取器)、processors(處理器)、WebUI(監(jiān)控&前端控制臺(tái))??蚣芙M件之間通過(guò)消息隊(duì)列進(jìn)行連接,運(yùn)行在各自所屬的進(jìn)程或者線程之中,并且是可以替換的。這意味著,當(dāng)處理速度緩慢時(shí),可以通過(guò)啟動(dòng)多個(gè)processor實(shí)例來(lái)充分利用多核CPU來(lái)提高效率,或者進(jìn)行分布式部署來(lái)提高效率。schedule(調(diào)度器)調(diào)度器從processor返回的新任務(wù)隊(duì)列中接收任務(wù)。判斷是新任務(wù)還是需要重新爬取。需要注意的是,在當(dāng)前的調(diào)度器實(shí)現(xiàn)中,只允許一個(gè)調(diào)度器運(yùn)行。PySpider框架通過(guò)優(yōu)先級(jí)對(duì)任務(wù)進(jìn)行分類,并且利用令牌桶算法將任務(wù)發(fā)送給fetcher(爬取器),處理周期任務(wù)、丟失的任務(wù)和失敗的任務(wù),并且稍后重試未成功運(yùn)行的任務(wù)。fetcher(爬取器)fetcher的職責(zé)是獲取Web頁(yè)面然后把結(jié)果發(fā)送給processor??梢栽O(shè)置請(qǐng)求method、headers、cookie、proxy和etag等的抓取調(diào)度控制。PySpider框架processors(處理器)處理器的職責(zé)是運(yùn)行用戶編寫的腳本,去解析和提取信息。腳本在無(wú)限制的環(huán)境中運(yùn)行,有各種各樣的工具(如PyQuery、XPath和BeautifulSoup)可以提取信息和連接,用戶可以使用任何想使用的方法來(lái)處理響應(yīng)。處理器會(huì)捕捉異常和記錄日志,發(fā)送狀態(tài)(任務(wù)跟蹤)和新的任務(wù)給調(diào)度器,發(fā)送結(jié)果給ResultWorker(結(jié)果處理器)。PySpider框架PySpider有一個(gè)內(nèi)置的結(jié)果處理器將數(shù)據(jù)保存至resultdb,可以根據(jù)需要重寫結(jié)果處理器。WebUI(監(jiān)控&前端控制臺(tái))WebUI是一個(gè)面向內(nèi)容的Web前端。PySpider框架WebUI組成腳本編輯器腳本調(diào)試器項(xiàng)目管理器任務(wù)監(jiān)控程序結(jié)果查看器PySpider框架的任務(wù)執(zhí)行流程的邏輯比較清晰。PySpider框架當(dāng)單擊WebUI上的Run按鈕時(shí),每個(gè)腳本都有一個(gè)名為on_start的回調(diào)。on_start產(chǎn)生的新任務(wù)將會(huì)提交給調(diào)度器作為項(xiàng)目的入口。調(diào)度程序使用一個(gè)數(shù)據(jù)URL將這個(gè)on_start任務(wù)分派為要獲取的普通任務(wù)。fetcher會(huì)發(fā)出一個(gè)請(qǐng)求和一個(gè)響應(yīng),然后送給處理器。PySpider框架處理器調(diào)用on_start方法并生成一些要抓取的新URL。處理器向調(diào)度程序發(fā)送一條消息,說(shuō)明此任務(wù)已完成,并通過(guò)消息隊(duì)列將新任務(wù)發(fā)送給調(diào)度程序。調(diào)度程
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 起重吊裝安全督查課件
- 職業(yè)健康歸屬感對(duì)醫(yī)療員工組織承諾的正向影響
- 連云港2025年江蘇連云港市教育局直屬學(xué)校招聘編制內(nèi)教師32人筆試歷年參考題庫(kù)附帶答案詳解
- 鹽城2025年江蘇鹽城射陽(yáng)縣招聘政府購(gòu)買服務(wù)工作人員157人筆試歷年參考題庫(kù)附帶答案詳解
- 溫州浙江溫州市公安局招聘年薪制警務(wù)輔助人員5人筆試歷年參考題庫(kù)附帶答案詳解
- 瀘州四川瀘州合江縣鄉(xiāng)鎮(zhèn)事業(yè)單位從“大學(xué)生志愿服務(wù)西部”高校畢業(yè)生中招聘筆試歷年參考題庫(kù)附帶答案詳解
- 江門廣東江門市公安局蓬江分局蓬江分局招聘鐵騎輔警人員筆試歷年參考題庫(kù)附帶答案詳解
- 常德2025年湖南常德市澧縣部分事業(yè)單位招聘8人筆試歷年參考題庫(kù)附帶答案詳解
- 安徽2025年安徽醫(yī)科大學(xué)招聘管理崗和專業(yè)技術(shù)輔助崗(第二批)筆試歷年參考題庫(kù)附帶答案詳解
- 臺(tái)州浙江臺(tái)州市椒江區(qū)市場(chǎng)開發(fā)服務(wù)中心招聘9人筆試歷年參考題庫(kù)附帶答案詳解
- 2026屆南通市高二數(shù)學(xué)第一學(xué)期期末統(tǒng)考試題含解析
- 寫字樓保潔培訓(xùn)課件
- 2026中國(guó)電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘?jìng)淇碱}庫(kù)有完整答案詳解
- 計(jì)量宣貫培訓(xùn)制度
- 運(yùn)輸人員教育培訓(xùn)制度
- 2026中國(guó)電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘?jìng)淇碱}庫(kù)有答案詳解
- 升降貨梯買賣安裝與使用說(shuō)明書合同
- 河南豫能控股股份有限公司及所管企業(yè)2026屆校園招聘127人考試備考題庫(kù)及答案解析
- 房地產(chǎn)公司2025年度總結(jié)暨2026戰(zhàn)略規(guī)劃
- 物業(yè)管家客服培訓(xùn)課件
- 虛假貿(mào)易十不準(zhǔn)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論