python爬蟲scrapy之rules的基本使用
Link Extractors
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:故名思議就是鏈接的篩選器,首先篩選出來我們需要爬取的鏈接。
deny:這個參數跟上面的參數剛好想反,定義我們不想爬取的鏈接。
follow:默認是false,爬取和start_url符合的url。如果是True的話,就是爬取頁面內容所有的以start_urls的url。
restrict_xpaths:使用xpath表達式,和allow共同作用過濾鏈接。還有一個類似的restrict_css
callback:定義我們拿到可以爬取到的url後,要執行的方法,並傳入每個鏈接的response內容(也就是網頁內容)
註意:rule無論有無callback,都由同一個_parse_response函數處理,只不過他會判斷是否有follow和callback
from scrapy.spiders.crawl import Rule, CrawlSpider from scrapy.linkextractors import LinkExtractor
示例:
from whole_website.items import DoubanSpider_Book from scrapy.spiders.crawl import Rule, CrawlSpider from scrapy.linkextractors import LinkExtractor class DoubanSpider(CrawlSpider): name = "douban" allowed_domains = ["book.douban.com"] start_urls = [‘https://book.douban.com/‘] rules = [ Rule(LinkExtractor(allow=‘subject/\d+‘),callback=‘parse_items) ] def parse_items(self, response): items = DoubanSpider_Book() items[‘name‘] = response.xpath(‘//*[@id="wrapper"]/h1/span/text()‘).extract_first() items[‘author‘] = response.xpath(‘//*[@id="info"]//a/text()‘).extract() data = {‘book_name‘:items[‘name‘], ‘book_author‘:items[‘author‘] } print(data)
參考地址:http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/link-extractors.html
python爬蟲scrapy之rules的基本使用