(1)、簡介
在糗事百科爬蟲中我們的爬蟲是繼承scrapy.Spider類的,這也是基本的scrapy框架爬蟲,在這個爬蟲中我們自己在解析完整個頁面后再獲取下一頁的url,然后重新發送了一個請求,而使用CrawlsSpider類可以幫助我們對url提出條件,只要滿足這個條件,都進行爬取,CrawlSpider類繼承自Spider,它比之前的Spider增加了新功能,即可以定義url的爬取規則,而不用手動的yield Request。
(2)、創建CrawlSpider爬蟲
scrapy genspider -t crawl + 爬蟲名 + 主域名
(3)、CrawlSpider中的主要模塊介紹
1、LinkExtractors鏈接提取器(找到滿足規則的url進行爬取)
class crapy.linkextractors.lxmlhtml.
LxmlLinkExtractor
(allow=(), deny=(), allow_domains=(), deny_domains=(), deny_extensions=None, restrict_xpaths=(), restrict_css=(), tags=('a', 'area'), attrs=('href', ), canonicalize=True, unique=True, process_value=None)
主要參數介紹:
allow:允許的url,所有滿足這個正則表達式的url都會被提取
deny:禁止的url,所有滿足這個正則表達式的url都不會被提取
allow_domains:允許的域名,在域名中的url才會被提取
deny_domains:禁止的域名,在域名中的url不會被提取
restrict_xpaths:使用xpath提取
restrict_css:使用css提取
2、Rule規則類
class scrapy.contrib.spiders.Rule(link_extractor,callback=None,cb_kwargs=None,follow=None,process_links=None,process_request=None)
主要參數介紹:
link_extractor:一個LinkExtractor對象,用來定義爬取規則
callback:回調函數
follow:從response中提取的url如滿足條件是否進行跟進
process_links:從link_extractor中獲取到的鏈接首先會傳遞給該函數,主要用來過濾掉無用的鏈接
(4)、實驗(微信小程序社區爬蟲)
1、目標站點選取(http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1)
2、創建項目和爬蟲
scrapy startproject weixin_app---cd weixin_app---scrapy genspider -t crawl spider wxapp-union.com
觀察一下發現spider.py文件已改變了
3、編寫代碼
改寫settings.py
禁止遵循robots協議
設置請求頭
設置爬取延遲
開啟pipeline
改寫items.py
改寫pipeline.py
改寫spiders.py
(5)、運行效果展示(只貼出了第一條數據)
(6)、總結
1、CrawlSpider主要使用LinkExtractor 和 Rule
2、注意事項:allow設置方法:限定在我們想要的url上,不要與其他url產生相同的正則表達式,follow設置方法:在爬取頁面的時候需要將滿足條件的url進行跟進,設置為True,callback設置方法:在獲取詳情信息的頁面需指定callback,而對於只要獲取url,而不要具體數據的情況則不需要指定該參數。