python爬蟲scrapy之rules的基本使用

2021-09-21 06:54:21 字數 4014 閱讀 9399

link extractors 是那些目的僅僅是從網頁(scrapy.http.response物件)中抽取最終將會被follow鏈結的物件。

scrapy預設提供2種可用的 link extractor, 但你通過實現乙個簡單的介面建立自己定製的link extractor來滿足需求。

每個linkextractor有唯一的公共方法是extract_links,它接收乙個response物件,並返回乙個scrapy.link.link物件。link extractors,要例項化一次並且extract_links方法會根據不同的response呼叫多次提取鏈結。

link extractors在crawlspider類(在scrapy可用)中使用, 通過一套規則,但你也可以用它在你的spider中,即使你不是從crawlspider繼承的子類, 因為它的目的很簡單: 提取鏈結。

上面都是官網解釋,看看就行了,這個rule啊其實就是為了爬取全站內容的寫法,首先我們繼承的就不是scrapy.spider類了,而是繼承crawlspider這個類,看原始碼就回明白crawlspider這個類也是繼承scrapy.spider類。

具體引數:

allow:這裡用的是re過濾,我們其實就是start_urls加上我們這個匹配到的具體鏈結下的內容。    linkextractor:故名思議就是鏈結的篩選器,首先篩選出來我們需要爬取的鏈結。

follow:預設是false,爬取和start_url符合的url。如果是true的話,就是爬取頁面內容所有的以start_urls開頭的url。

注意:rule無論有無callback,都由同乙個_parse_response函式處理,只不過他會判斷是否有follow和callback

fromscrapy.spiders.crawlimportrule, crawlspider

fromscrapy.linkextractorsimportlinkextractor

示例:fromwhole_website.itemsimportdoubanspider_book

fromscrapy.spiders.crawlimportrule, crawlspider

fromscrapy.linkextractorsimportlinkextractor

classdoubanspider(crawlspider):

name="douban"

allowed_domains=["book.douban.com"]

start_urls=['']

rules=[

rule(linkextractor(allow='subject/\d+'),callback='parse_items)

]

defparse_items(self, response):

items=doubanspider_book()

items['name']=response.xpath().extract_first()

items['author']=response.xpath('//*[@id="info"]//a/text()').extract()

data=

print(data

常用正規表示式學習記錄:

1、特殊字元

1)^ 代表字串起始字元

2)$ 代表字串結尾字元

3). 代表任意字元,匹配除換行符(\n、\r)之外的任何單個字元。要匹配包括 4)'\n' 在內的任何字元,請使用像"(.|\n)"的模式

5)* 代表前面字元可以重複多次,貪婪匹配,匹配前面的子表示式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價於

6)? 代表限制只取1個字元,匹配前面的子表示式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等價於

7)+ 代表匹配前面的子表示式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於

8)n 代表是乙個非負整數。至少匹配n 次。例如,'o' 不能匹配 "bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o' 等價於 'o+'。'o' 則等價於 'o*'

9) 代表m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o" 將匹配 "fooooood" 中的前三個 o。'o' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格

10)x|y 代表匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"

11)[ ] 代表字元集合,當為[xyz]時匹配所包含的任意乙個字元,例如, '[abc]' 可以匹配 "plain" 中的 'a'。當為[a-z]匹配指定範圍內的任意乙個字元,例如,'[a-z]' 可以匹配 'a' 到 'z' 範圍內的任意小寫字母字元。當為[a-z]匹配指定範圍內的任意6個字元。當為[a-z]匹配任何不在指定範圍內的任意字元,例如,'[a-z]' 可以匹配任何不在 'a' 到 'z' 範圍內的任意字元。另外,當*.等特殊字元在[ ]中就沒有特殊使用功能

12)\s 代表匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]

13)\s 代表匹配任何非空白字元。等價於 [^ \f\n\r\t\v]

14)\w 匹配字母、數字、下劃線。等價於[a-za-z0-9_]

15)\w 匹配非字母、數字、下劃線。等價於 [^a-za-z0-9_]

16)[\u4e00-\u9fa5] 這是專門用於匹配簡體中文的正規表示式, 繁體字也在裡面,[\u4e00-\u9fa5] 只匹配乙個中文,[\u4e00-\u9fa5]+ 匹配乙個或多個中文

17)(\d[年/-]\d([月/-]\d|[月/-]$|$)) 匹配年月日之間不同間隔的正規表示式,例如:2023年8月,2010/8,2010-8等

Python之scrapy框架爬蟲

scrapy命令詳解 可能是如今最全最簡單的scrapy命令解釋 明天上班,又要爬 現在每天做的工作有50 的時間爬 40 的時間清理資料,10 寫報告。若想自學資料分析,側重點很重要,我當初把大部分經歷放在了python的pandas numpymatplotlib上面,其他時間一部分放在sql身...

python爬蟲框架之Scrapy

scrapy 是乙個爬蟲框架,提取結構性的資料。其可以應用在資料探勘,資訊處理等方面。提供了許多的爬蟲的基類,幫我們更簡便使用爬蟲。基於twisted 準備步驟 首先安裝依賴庫twisted 在這個 下面去尋找符合你的python版本和系統版本的twisted pip install 依賴庫的路徑 ...

python爬蟲之Scrapy學習

在爬蟲的路上,學習scrapy是乙個必不可少的環節。也許有好多朋友此時此刻也正在接觸並學習scrapy,那麼很好,我們一起學習。開始接觸scrapy的朋友可能會有些疑惑,畢竟是乙個框架,上來不知從何學起。從本篇起,博主將開啟scrapy學習的系列,分享如何快速入門scrapy並熟練使用它。本篇作為第...