- 爬蟲框架:
- scrapy
- pyspider
- crawley
scrapy框架介紹
- https://doc.scrapy.org/en/latest/
-
http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html
scrapy概述
Scrapy五大基本構(gòu)成:
Scrapy框架主要由五大組件組成,它們分別是調(diào)度器 (Scheduler)、下載器(Downloader)、爬蟲(Spider)和實(shí)體管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面我們分別介紹各個(gè)組件的作用。
Scrapy Engine:神經(jīng)中樞,大腦,核心
Scrapy引擎是整個(gè)框架的核心.它用來控制調(diào)試器、下載器、爬蟲。實(shí)際上,引擎相當(dāng)于計(jì)算機(jī)的CPU,它控制著整個(gè)流程。
Scheduter調(diào)度器:引擎發(fā)來的request請(qǐng)求,調(diào)度器需要處理,然后交換引擎,
調(diào)度器,說白了把它假設(shè)成為一個(gè)URL(抓取網(wǎng)頁的網(wǎng)址或者說是鏈接)的優(yōu)先隊(duì)列,由它來決定下一個(gè)要抓取的網(wǎng)址是 什么,同時(shí)去除重復(fù)的網(wǎng)址(不做無用功)。用戶可以自己的需求定制調(diào)度器。
Downloader下載器:把引擎發(fā)來的requests發(fā)出請(qǐng)求,得到response
下載器,是所有組件中負(fù)擔(dān)最大的,它用于高速地下載網(wǎng)絡(luò)上的資源。Scrapy的下載器代碼不會(huì)太復(fù)雜,但效率高,主 要的原因是Scrapy下載器是建立在twisted這個(gè)高效的異步模型上的(其實(shí)整個(gè)框架都在建立在這個(gè)模型上的)。
Spider爬蟲:負(fù)責(zé)把下載器得到的網(wǎng)頁/結(jié)果進(jìn)行分解,分解成數(shù)據(jù)+鏈接
爬蟲,是用戶最關(guān)心的部份。用戶定制自己的爬蟲,用于從特定的網(wǎng)頁中提取自己需要的信息,即所謂的實(shí)體(Item)。 用戶也可以從中提取出鏈接,讓Scrapy繼續(xù)抓取下一個(gè)頁面。
Item Pipeline管理:詳細(xì)處理item
實(shí)體管道,用于處理爬蟲提取的實(shí)體。主要的功能是持久化實(shí)體、驗(yàn)證實(shí)體的有效性、清除不需要的信息。
DownloaderMiddleware下載中心件:自定義下載的功能擴(kuò)展組件
SpiderMiddleware爬蟲中間件:對(duì)spider進(jìn)行功能擴(kuò)展

Scrapy請(qǐng)求發(fā)出去的整個(gè)流程
Scrapy運(yùn)行時(shí),請(qǐng)求發(fā)出去的整個(gè)流程大概如下:
1.首先爬蟲將需要發(fā)送請(qǐng)求的url(requests)經(jīng)引擎交給調(diào)度器;
2.排序處理后,經(jīng)ScrapyEngine,DownloaderMiddlewares(有User_Agent, Proxy代理)交給Downloader;
3.Downloader向互聯(lián)網(wǎng)發(fā)送請(qǐng)求,并接收下載響應(yīng).將響應(yīng)經(jīng)ScrapyEngine,可選交給Spiders;
4.Spiders處理response,提取數(shù)據(jù)并將數(shù)據(jù)經(jīng)ScrapyEngine交給ItemPipeline保存;
5.提取url重新經(jīng)ScrapyEngine交給Scheduler進(jìn)行下一個(gè)循環(huán)。直到無Url請(qǐng)求程序停止結(jié)束。
爬蟲項(xiàng)目大概流程:
新建項(xiàng)目:scrapy startproject XXX
明確需要目標(biāo)/產(chǎn)出:編寫item.py
制作爬蟲:地址 spider/xxxspider.py
存儲(chǔ)內(nèi)容:pipelines.py
ItemPipeline
-對(duì)應(yīng)的是pipelines文件
爬出提取出數(shù)據(jù)存入item后。item中 保存的數(shù)據(jù)需要進(jìn)一步處理,比如清洗,去重,存儲(chǔ)等
pipeline需要處理process_item函數(shù)
process_item:
spider提取出來的item作為參數(shù)傳入,同時(shí)傳入的參數(shù)還有spider
此方法必須實(shí)現(xiàn)
必須返回一個(gè)item對(duì)象,被丟棄的item不會(huì)被之后的pipeline處理
- _init_:構(gòu)造函數(shù),進(jìn)行一些必要的參數(shù)初始化
- open_spider(spider)
spider對(duì)象被開啟時(shí)被調(diào)用 - close_spider(spider)
spider對(duì)象被關(guān)閉時(shí)被調(diào)用 - Spider
對(duì)應(yīng)的是文件夾spider下的文件
_init_:初始化爬蟲名稱,start_urls列表
start_requests:生成Reaquests對(duì)象交給Scrapy下載并返回response
parse:根據(jù)返回的response解析出對(duì)應(yīng)的item。item自動(dòng)進(jìn)入pipeline,如果需要,解析出url,url自動(dòng)交給requests模塊,一直循環(huán)下去
start_request:此方法僅能被調(diào)用一次,讀取start_urls內(nèi)容并啟動(dòng)循環(huán)過程
neme:設(shè)置爬蟲名
start_urls:設(shè)置開始第一批爬取的url
allow_domains:允許爬取的域名列表
start_request(self):只被調(diào)用一次
parse
log:日志記錄