scrapy框架的流程圖
2018-11-01框架流程圖
1、scrapy框架主要為個塊
??????(1)Scrapy Engine(引擎): 負(fù)責(zé)Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號、數(shù)據(jù)傳遞等。
???????(2)Scheduler(調(diào)度器): 它負(fù)責(zé)接受引擎發(fā)送過來的Request請求,并按照一定的方式進(jìn)行整理排列,入隊,當(dāng)引擎需要時,交還給引擎。
???????(3)Downloader(下載器):負(fù)責(zé)下載Scrapy Engine(引擎)發(fā)送的所有Requests請求,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理
???????(4)Spider(爬蟲):它負(fù)責(zé)處理所有Responses,從中分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入Scheduler(調(diào)度器)
???????(5)Item Pipeline(管道):它負(fù)責(zé)處理Spider中獲取到的Item,并進(jìn)行進(jìn)行后期處理(詳細(xì)分析、過濾、存儲等)的地方.
???????(6)Downloader Middlewares(下載中間件):你可以當(dāng)作是一個可以自定義擴(kuò)展下載功能的組件。
???????(7)Spider Middlewares(Spider中間件):你可以理解為是一個可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses;和從Spider出去的Requests)
2、制作 Scrapy 爬蟲 一共需要4步
1、新建項目: scrapy startproject 爬蟲項目名稱
2、新建一個新的爬蟲明確目標(biāo):(編寫items.py):明確你想要抓取的目標(biāo)
3、制作爬蟲scrapy genspider 爬蟲文件名稱 域名:制作爬蟲開始爬取網(wǎng)頁
4、存儲內(nèi)容pipelines.py):設(shè)計管道存儲爬取內(nèi)容
3、scrapy 框架配置和安裝
1、Ubuntu 安裝方式:sudo pip3 install scrapy
4、scrapy框架的使用
1、創(chuàng)建爬蟲項目:scrapy startproject 項目名
2、新建爬蟲文件:scrapy genspider 爬蟲的名字 域名
3、明確我們的目標(biāo),就是我們所要抓取的url
4、打開項目文件下的item.py文件,在這里我們要寫入我們所需要獲取的數(shù)據(jù)字段
5、打開settings.py文件我們需要在這里配置爬蟲需要的信息
6、打開爬蟲文件,在這里我們從item里獲取需要解析的字段進(jìn)行解析以及提取所需要的url用yield回調(diào)。注意:yield 的作用就是把一個函數(shù)變成一個 generator(生成器),帶有 yield 的函數(shù)不再是一個普通函數(shù),Python 解釋器會將其視為一個 generator,帶有yeild的函數(shù)遇到y(tǒng)eild的時候就返回一個迭代值,下次迭代時, 代碼從 yield 的下一條語句繼續(xù)執(zhí)行,而函數(shù)的本地變量看起來和上次中斷執(zhí)行前是完全一樣的,于是函數(shù)繼續(xù)執(zhí)行, 直到再次遇到 yield。

這里的name是指爬蟲的名字
allowed_domains指的是允許爬蟲訪問的域
atart_urls指的是我們的初始目標(biāo)url
6、Scrapy Item pipeline(管道文件)使用
1、Item Pipeline 當(dāng)Item在Spider中被收集之后,它將會被傳遞到Item Pipeline,這些Item Pipeline組件按定義的順序處理Item。每個Item Pipeline都是實現(xiàn)了簡單方法的Python類,比如決定此Item是丟棄而存儲。
例如:
在這里我們把管道作為儲存和過濾
2018-11-05 19-23-14mongodb.png
在這里我們把數(shù)據(jù)保存至mongodb數(shù)據(jù)庫中,在設(shè)置好ip和數(shù)據(jù)庫的端口之后,
指定它要存入的數(shù)據(jù)庫和集合,如果沒有那個數(shù)據(jù)庫和集合,代碼會幫我們自動創(chuàng)建
7、下載項目圖片(下載到本地)
1、可以現(xiàn)在seetings.py文件里面定義一個本地圖片的保存路徑,例如:IMAGES_STORE = '/home/ljh/桌面/1804爬蟲/jobboleImage'
2、在items里面定義好項目圖片的url,以及本地存儲路徑的字段
3、在爬蟲文件里面對圖片地址進(jìn)行解析
4、解析好的url返回給管道,進(jìn)行響應(yīng)以及對圖片的下載,具體操作如下
2018-11-05 20-01-09圖片下載圖.png
5的pipelines.py為爬蟲文件,我們在這里的操作在主要是數(shù)據(jù)的過濾,保存和上傳
Spider類定義了如何爬取某個(或某些)網(wǎng)站。包括了爬取的動作(例如:是否跟進(jìn)鏈接)以及如何從網(wǎng)頁的內(nèi)容中提取結(jié)構(gòu)化數(shù)據(jù)(爬取item)。 換句話說,Spider就是您定義爬取的動作及分析某個網(wǎng)頁(或者是有些網(wǎng)頁)的地方。
class scrapy.Spider是最基本的類,所有編寫的爬蟲必須繼承這個類。
主要用到的函數(shù)及調(diào)用順序為:
init() : 初始化爬蟲名字和start_urls列表
start_requests() 調(diào)用make_requests_from url():生成Requests對象交給Scrapy下載并返回response
parse():
解析response,并返回Item或Requests(需指定回調(diào)函數(shù))。
Item傳給Item pipline持久化 , 而Requests交由Scrapy下載,并由指定的回調(diào)函數(shù)處理(默認(rèn)parse()),一直進(jìn)行循環(huán),直到處理完所有的數(shù)據(jù)為止。
8、通用爬蟲
1、創(chuàng)建項目
scrapy startproject 項目名字
創(chuàng)建爬蟲
scrapy genspider -t crawl 爬蟲名字 域
rules 規(guī)則屬性的參數(shù):是一個元阻,可以放多個Rule 對象
創(chuàng)建Rule:
LinkExtractor:設(shè)定提取的規(guī)則
(allow,deny,allow_dome...)
callback 設(shè)置回調(diào)函數(shù)
follwer 是否跟進(jìn)
rules = (
allow:一般跟一個正則表達(dá)式,表示允許的url*********************
deny:表示一個正則表達(dá)式,符合正則表達(dá)式的鏈接,我們不鏈接,優(yōu)先級比allow高
allowed_domains:提取額鏈接,必須在我設(shè)置的域下面
deny_domains:提取鏈接時,一定不能提取deny_domains設(shè)置的域下
restrict_xpaths:剛提取連接的時候我們可以定位到耨一些標(biāo)簽,提取標(biāo)簽下符合規(guī)則的鏈接********
tags:可以指定要提取那些標(biāo)簽
attrs:;;可以提取哪一屬性
restrict_css:當(dāng)提取連接時可以使用css語法 **************
process_links:設(shè)置一個函數(shù),根據(jù)正則獲取的url,可以在回調(diào)函數(shù)中獲取到
process_request:設(shè)置一個函數(shù),可以在這個回調(diào)方法中攔截所有根據(jù)正則規(guī)則提取到的url構(gòu)建的Request對象
Rule(LinkExtractor(
allow=('.*?qwd=&p=\d+',),
deny=(),
allowed_domains=(),
deny_domains=(),
restrict_xpaths=(),
tags=(),
attrs=(),
restrict_css=()
),
2、Scrapy CrawlSpiders介紹和使用
它是Spider的派生類,Spider類的設(shè)計原則是只爬取start_url列表中的網(wǎng)頁,而CrawlSpider類定義了一些規(guī)則Rule來提供跟進(jìn)鏈接的方便的機(jī)制,從爬取的網(wǎng)頁結(jié)果中獲取鏈接并繼續(xù)爬取的工作
rules
CrawlSpider使用rules屬性來決定爬蟲的爬取規(guī)則,并將匹配后的url請求提交給引擎,完成后續(xù)的爬取工作。
在rules中包含一個或多個Rule對象,每個Rule對爬取網(wǎng)站的動作定義了某種特定操作,比如提取當(dāng)前相應(yīng)內(nèi)容里的特定鏈接,是否對提取的鏈接跟進(jìn)爬取,對提交的請求設(shè)置回調(diào)函數(shù)等。
主要參數(shù):
allow:滿足括號中“正則表達(dá)式”的URL會被提取,如果為空,則全部匹配。
deny:滿足括號中“正則表達(dá)式”的URL一定不提取(優(yōu)先級高于allow)。
allow_domains:會提取的鏈接的domains。
deny_domains:一定不會被提取鏈接的domains。
restrict_xpaths:使用xpath表達(dá)式,和allow共同作用過濾鏈接
注意:設(shè)置回調(diào)的時候一定不能重寫parse方法
2、要活取起始url的響應(yīng)結(jié)果,必須重寫parse_start_url
3、在設(shè)置Rule對象的時候,如果沒有callback回調(diào)函數(shù),表示默認(rèn)跟進(jìn)
什么時候 會用到用用爬蟲?
當(dāng)提取數(shù)據(jù)的目標(biāo)網(wǎng)站的網(wǎng)址很有規(guī)律,并且各個模塊很清晰,我們就可以使用通用爬蟲


