爬蟲之Scrapy框架--------> @_@

scrapy框架的流程圖


2018-11-01框架流程圖
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若未。

2018-11-05 舉例.png

這里的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是丟棄而存儲壤追。
在這里我們把管道作為儲存和過濾

例如:
2018-11-05 19-23-14mongodb.png

在這里我們把數(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)以及對圖片的下載录别,具體操作如下


2018-11-05 20-01-09圖片下載圖.png

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è)模塊很清晰,我們就可以使用通用爬蟲

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抖剿,一起剝皮案震驚了整個(gè)濱河市朽寞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斩郎,老刑警劉巖脑融,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缩宜,居然都是意外死亡肘迎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門锻煌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妓布,“玉大人,你說我怎么就攤上這事炼幔∏锩#” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵乃秀,是天一觀的道長肛著。 經(jīng)常有香客問我,道長跺讯,這世上最難降的妖魔是什么枢贿? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮刀脏,結(jié)果婚禮上局荚,老公的妹妹穿的比我還像新娘。我一直安慰自己愈污,他們只是感情好耀态,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暂雹,像睡著了一般首装。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杭跪,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天仙逻,我揣著相機(jī)與錄音驰吓,去河邊找鬼。 笑死系奉,一個(gè)胖子當(dāng)著我的面吹牛檬贰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缺亮,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼翁涤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了萌踱?” 一聲冷哼從身側(cè)響起迷雪,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虫蝶,沒想到半個(gè)月后章咧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡能真,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年赁严,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粉铐。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疼约,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝙泼,到底是詐尸還是另有隱情程剥,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布汤踏,位于F島的核電站织鲸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏溪胶。R本人自食惡果不足惜搂擦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哗脖。 院中可真熱鬧瀑踢,春花似錦、人聲如沸才避。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桑逝。三九已至棘劣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肢娘,已是汗流浹背呈础。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留橱健,地道東北人而钞。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像拘荡,于是被迫代替她去往敵國和親臼节。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容