Scrapy類
name
字元串,爬蟲名稱,必須唯一,代碼會通過它來定位spider
allowed_domains
清單,允許域名
沒定義 或 空: 不過濾,
url不在其中: url不會被處理,
域名過濾功能: settings中OffsiteMiddleware
start_urls
:清單或者元組,任務的種子
custom_settings
:字典,覆寫項目中的settings.py
crawler
:Crawler 執行個體
settings
:Settings 執行個體
logger
:記錄日志
from_crawler()
:類方法,建立spider時調用
start_requests()
:必須傳回一個可疊代對象
make_requests_from_url(url)
:預設parse回調, dont_filter=True,不過濾url
parse(response)
: 預設回調方法, 傳回值隻能是Request, 字典和item對象,或者它們的可疊代對象
log(message[, level, component])
:對logger的包裝
closed(reason)
:spider結束時調用
參考文章
scrapy系列(三)——基礎spider源碼解析CrawlSpider類
CrawlSpider繼承于Spider,為全站爬取而生
rules:清單,元素為Rule類的執行個體,采集行為。類似Django的url比對
如果有多個rule都比對同一個連結,那麼位置下标最小的一個rule将會被使用。
要request的位址和allow_domain裡面的沖突,進而被過濾掉。
可以停用過濾功能。
yield Request(url, callback=self.parse_item, dont_filter=True)
__init__:執行了_compile_rules方法
parse:重寫預設回調方法,調用方法_parse_response
parse_start_url:處理parse傳回的response
_requests_to_follow:response中解析出目标url,并将其包裝成request請求
_response_downloaded:_requests_to_follow的回調方法,作用就是調用_parse_response方法
_parse_response:spider._follow_links的值是從settings的CRAWLSPIDER_FOLLOW_LINKS值擷取到的。
_compile_rules:将rule中的字元串表示的方法改成實際的方法
from_crawler:
Rule類
link_extractor:Link Extractor執行個體,解析規則。
callback:方法或字元串,回調方法,慎用parse做為回調方法
cb_kwargs:字典,用于給callback方法傳遞參數
follow:布爾對象,表示是目前response否繼續采集。如果callback是None,那麼它就預設為True,否則為False。
process_links:在crawlspider中的_requests_to_follow方法中被調用,元素為Link的清單作為參數,傳回值也是一個元素為Link的清單,目标url是相對的連結,那麼scrapy會将其擴充成絕對的
process_request:處理request
CrawlSpider樣例
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
name = 'example.com'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
rules = (
# 提取比對 'category.php' (但不比對 'subsection.php') 的連結并跟進連結(沒有callback意味着follow預設為True)
Rule(LinkExtractor(allow=('category\.php', ), deny=('subsection\.php', ))),
# 提取比對 'item.php' 的連結并使用spider的parse_item方法進行分析
Rule(LinkExtractor(allow=('item\.php', )), callback='parse_item'),
)
def parse_item(self, response):
self.log('Hi, this is an item page! %s' % response.url)
item = scrapy.Item()
item['id'] = response.xpath('//td[@id="item_id"]/text()').re(r'ID: (\d+)')
item['name'] = response.xpath('//td[@id="item_name"]/text()').extract()
item['description'] = response.xpath('//td[@id="item_description"]/text()').extract()
return item
參考文章:
scrapy系列(四)——CrawlSpider解析 Spiders-爬取規則(Crawling rules)