scrapy框架的流程圖
1、scrapy框架主要為個(gè)塊
??????(1)Scrapy Engine(引擎): 負(fù)責(zé)Spider倦蚪、ItemPipeline侣诵、Downloader痢法、Scheduler中間的通訊,信號杜顺、數(shù)據(jù)傳遞等财搁。
???????(2)Scheduler(調(diào)度器): 它負(fù)責(zé)接受引擎發(fā)送過來的Request請求,并按照一定的方式進(jìn)行整理排列躬络,入隊(duì)尖奔,當(dāng)引擎需要時(shí),交還給引擎穷当。
???????(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)作是一個(gè)可以自定義擴(kuò)展下載功能的組件铲咨。
???????(7)Spider Middlewares(Spider中間件):你可以理解為是一個(gè)可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses;和從Spider出去的Requests)
2、制作 Scrapy 爬蟲 一共需要4步
1蜓洪、新建項(xiàng)目: scrapy startproject 爬蟲項(xiàng)目名稱
2纤勒、新建一個(gè)新的爬蟲明確目標(biāo):(編寫items.py):明確你想要抓取的目標(biāo)
3、制作爬蟲scrapy genspider 爬蟲文件名稱 域名:制作爬蟲開始爬取網(wǎng)頁
4隆檀、存儲內(nèi)容pipelines.py):設(shè)計(jì)管道存儲爬取內(nèi)容
3摇天、scrapy 框架配置和安裝
1、Ubuntu 安裝方式:sudo pip3 install scrapy
4恐仑、scrapy框架的使用
1泉坐、創(chuàng)建爬蟲項(xiàng)目:scrapy startproject 項(xiàng)目名
2、新建爬蟲文件:scrapy genspider 爬蟲的名字 域名
3裳仆、明確我們的目標(biāo)腕让,就是我們所要抓取的url
4、打開項(xiàng)目文件下的item.py文件,在這里我們要寫入我們所需要獲取的數(shù)據(jù)字段
5纯丸、打開settings.py文件我們需要在這里配置爬蟲需要的信息
6偏形、打開爬蟲文件,在這里我們從item里獲取需要解析的字段進(jìn)行解析以及提取所需要的url用yield回調(diào)觉鼻。注意:yield 的作用就是把一個(gè)函數(shù)變成一個(gè) generator(生成器)俊扭,帶有 yield 的函數(shù)不再是一個(gè)普通函數(shù),Python 解釋器會將其視為一個(gè) generator坠陈,帶有yeild的函數(shù)遇到y(tǒng)eild的時(shí)候就返回一個(gè)迭代值萨惑,下次迭代時(shí), 代碼從 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。每個(gè)Item Pipeline都是實(shí)現(xiàn)了簡單方法的Python類隙疚,比如決定此Item是丟棄而存儲壤追。
例如:
在這里我們把管道作為儲存和過濾
在這里我們把數(shù)據(jù)保存至mongodb數(shù)據(jù)庫中,在設(shè)置好ip和數(shù)據(jù)庫的端口之后供屉,
指定它要存入的數(shù)據(jù)庫和集合行冰,如果沒有那個(gè)數(shù)據(jù)庫和集合,代碼會幫我們自動(dòng)創(chuàng)建
7伶丐、下載項(xiàng)目圖片(下載到本地)
1悼做、可以現(xiàn)在seetings.py文件里面定義一個(gè)本地圖片的保存路徑,例如:IMAGES_STORE = '/home/ljh/桌面/1804爬蟲/jobboleImage'
2、在items里面定義好項(xiàng)目圖片的url,以及本地存儲路徑的字段
3哗魂、在爬蟲文件里面對圖片地址進(jìn)行解析
4肛走、解析好的url返回給管道,進(jìn)行響應(yīng)以及對圖片的下載录别,具體操作如下
5的pipelines.py為爬蟲文件朽色,我們在這里的操作在主要是數(shù)據(jù)的過濾,保存和上傳
Spider類定義了如何爬取某個(gè)(或某些)網(wǎng)站组题。包括了爬取的動(dòng)作(例如:是否跟進(jìn)鏈接)以及如何從網(wǎng)頁的內(nèi)容中提取結(jié)構(gòu)化數(shù)據(jù)(爬取item)葫男。 換句話說,Spider就是您定義爬取的動(dòng)作及分析某個(gè)網(wǎng)頁(或者是有些網(wǎng)頁)的地方崔列。
class scrapy.Spider是最基本的類梢褐,所有編寫的爬蟲必須繼承這個(gè)類。
主要用到的函數(shù)及調(diào)用順序?yàn)椋?/p>
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)建項(xiàng)目
scrapy startproject 項(xiàng)目名字
創(chuàng)建爬蟲
scrapy genspider -t crawl 爬蟲名字 域
rules 規(guī)則屬性的參數(shù):是一個(gè)元阻,可以放多個(gè)Rule 對象
創(chuàng)建Rule:
LinkExtractor:設(shè)定提取的規(guī)則
(allow,deny,allow_dome...)
callback 設(shè)置回調(diào)函數(shù)
follwer 是否跟進(jìn)
rules = (
allow:一般跟一個(gè)正則表達(dá)式桶癣,表示允許的url*********************
deny:表示一個(gè)正則表達(dá)式拥褂,符合正則表達(dá)式的鏈接,我們不鏈接牙寞,優(yōu)先級比allow高
allowed_domains:提取額鏈接饺鹃,必須在我設(shè)置的域下面
deny_domains:提取鏈接時(shí),一定不能提取deny_domains設(shè)置的域下
restrict_xpaths:剛提取連接的時(shí)候我們可以定位到耨一些標(biāo)簽间雀,提取標(biāo)簽下符合規(guī)則的鏈接********
tags:可以指定要提取那些標(biāo)簽
attrs:;;可以提取哪一屬性
restrict_css:當(dāng)提取連接時(shí)可以使用css語法 **************
process_links:設(shè)置一個(gè)函數(shù)悔详,根據(jù)正則獲取的url,可以在回調(diào)函數(shù)中獲取到
process_request:設(shè)置一個(gè)函數(shù),可以在這個(gè)回調(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è)計(jì)原則是只爬取start_url列表中的網(wǎng)頁,而CrawlSpider類定義了一些規(guī)則Rule來提供跟進(jìn)鏈接的方便的機(jī)制连锯,從爬取的網(wǎng)頁結(jié)果中獲取鏈接并繼續(xù)爬取的工作
rules
CrawlSpider使用rules屬性來決定爬蟲的爬取規(guī)則归苍,并將匹配后的url請求提交給引擎,完成后續(xù)的爬取工作。
在rules中包含一個(gè)或多個(gè)Rule對象运怖,每個(gè)Rule對爬取網(wǎng)站的動(dò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)的時(shí)候一定不能重寫parse方法
2、要活取起始url的響應(yīng)結(jié)果,必須重寫parse_start_url
3埠偿、在設(shè)置Rule對象的時(shí)候透罢,如果沒有callback回調(diào)函數(shù),表示默認(rèn)跟進(jìn)
什么時(shí)候 會用到用用爬蟲冠蒋?
當(dāng)提取數(shù)據(jù)的目標(biāo)網(wǎng)站的網(wǎng)址很有規(guī)律羽圃,并且各個(gè)模塊很清晰,我們就可以使用通用爬蟲