Python爬蟲第七天:多線程爬蟲|Scrapy框架

內(nèi)容簡述:

? ? ?一:多線程爬蟲

? ? ?二:Scrapy框架

一:多線程爬蟲原理

【示例見代碼】

二:Scrapy框架

定義:Scrapy是基于Python實(shí)現(xiàn),方便爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)的應(yīng)用框架。

底層:使用Twisted異步網(wǎng)絡(luò)框架來處理網(wǎng)絡(luò)通訊,加快下載速度。

????????????不用手動(dòng)實(shí)現(xiàn)異步框架,包含了多種中間件接口,非常靈活。

Scrapy運(yùn)行架構(gòu)流程圖:

?組件說明:

? ? ? ? ? ?Scrapy Engine(引擎): 負(fù)責(zé)Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號、數(shù)據(jù)傳遞等。

? ? ? ? ? ?Scheduler(調(diào)度器): 負(fù)責(zé)接收引擎發(fā)送過來的Request請求,并按照一定的方式進(jìn)行整理排列,入隊(duì),當(dāng)引擎需要時(shí),交還給引擎。

????????????Downloader(下載器):負(fù)責(zé)下載引擎發(fā)送的所有Requests請求,并將其獲取到的Responses交還給引擎,由引擎交給Spider來處理。

????????????Spider(爬蟲):負(fù)責(zé)處理所有Responses,分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入調(diào)度器

????????????Item Pipeline(管道):負(fù)責(zé)處理Spider中獲取到的Item,并進(jìn)行后期處理(如詳細(xì)分析、過濾、存儲等).

????????????Downloader Middlewares(下載中間件):類似一個(gè)可以自定義擴(kuò)展下載功能的組件。

Spider Middlewares(Spider中間件):類似一個(gè)可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses以及從Spider出去的Requests)

簡單使用:(安裝)pip3 install scrapy

???? (1)創(chuàng)建項(xiàng)目scrapy startproject spider1(項(xiàng)目名稱)

????? (2)目錄結(jié)構(gòu)

??????? spider1

?????????? spider1

????????????? spiders????? ?????爬蟲目錄(寫代碼位置)

???????????????? __init__.py

???????????????? lala.py?????? 爬蟲文件

????????????? __init__.py

????????????? items.py????????? 定義數(shù)據(jù)結(jié)構(gòu)地方

????????????? middlewares.py??? 中間件

????????????? pipelines.py????? 管道文件

????????????? settings.py?????? 項(xiàng)目配置文件

?????????? scrapy.cfg

??????? 通過指令創(chuàng)建爬蟲文件

?????????? cd spider1/spider1

?????????? scrapy genspider qiubai"www.qiushibaike.com"

?????????? 此時(shí)在spider1/spider1/spiders里面自動(dòng)創(chuàng)建一個(gè)qiubai.py

??????? name:爬蟲的名字,啟動(dòng)的時(shí)候根據(jù)爬蟲的名字啟動(dòng)項(xiàng)目

??????? allowed_domains:允許的域名。意思是爬取的時(shí)候這個(gè)請求要不要發(fā)送,如果是該允許域名下的url,就會發(fā)送,否則過濾掉這個(gè)請求?!玖斜碓试S多個(gè)域名】

??????? start_urls:爬蟲起始url,是一個(gè)列表,里面可以寫多個(gè),一般只寫一個(gè)

??????? def parse(self, response):寫代碼的入口,parse函數(shù)名是固定。當(dāng)收到下載數(shù)據(jù)時(shí)系統(tǒng)會自動(dòng)調(diào)用

????????????參數(shù)response,是一個(gè)響應(yīng)對象,可從中獲取html字符串,然后解析之。

????????????【溫馨提示】這個(gè)parse函數(shù)必須返回一個(gè)可迭代對象

????? (3)定制items.py,個(gè)性化定義數(shù)據(jù)結(jié)構(gòu)格式。

????? (4)運(yùn)行-打印response對象測試下?????

????????????????來到終端下:

?????????? ????????????cd spider1/ spider1/spiders

? ? ? ? ? ? ? ? ? ? ? ?scrapy crawl qiubai

??????? ????????根據(jù)response獲取網(wǎng)頁內(nèi)容

?????????? ????????????????response.text? 字符串類型??response.body二進(jìn)制類型

????? (5)運(yùn)行,直接通過命令導(dǎo)出json格式

?????????? ????????????scrapy crawl qiubai -o qiubai.json

?????????? ????????????scrapy crawl qiubai -o qiubai.xml

?????????? ????????????scrapy crawl qiubai -o qiubai.csv

????? 【注】window 安裝問題參考

? ?????????????pip install Scrapy

? ? ? ? ? ? ? ?building 'twisted.test.raiser' extension

? ? ? ? ? ? ? ?error: Microsoft Visual C++ 14.0 is required.Get it with "Microsoft Visual C++? BuildTools": http://landinghub.visualstudio.com/visual-cpp-build-tools

?? 解決方案:

????? http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

????? 下載twisted對應(yīng)版本的whl文件(如我的Twisted-17.5.0-cp36-cp36m-win_amd64.whl),cp后面是python版本,amd64代表64位,運(yùn)行命令:

????? pip install C:\Users\CR\Downloads\Twisted-17.5.0-cp36-cp36m-win_amd64.whl

? ? ? pip install Scrapy

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容