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
