Scrapy框架的学习(9.Scrapy中的CrawlSpider类的作用以及使用,实现优化的翻页爬虫)
1.CrawlSpider類通過一些規則(rules),使對于鏈接(網頁)的爬取更具有通用性,
? ? ? 換句話說,CrawlSpider爬蟲為通用性的爬蟲,
? ? ? ? 而Spider爬蟲更像是為一些特殊網站制定的爬蟲。它基于Spider并有一些獨特屬性
? ? ?rules: 是Rule對象的集合,用于匹配目標網站并排除干擾
? ? ?parse_start_url: 用于爬取起始響應,必須要返回Item
2. Scrapy中的爬蟲方法繼承四種類來建立我們的scrapy爬蟲,
? ? 他們是:Spider類,CrawlSpider類, CSVFeedSpider類和XMLFeedSpider類
? ? ?
?3. 通過命令的方式生成一個CrawlSpider類的模板
? ? ?scrapy genspider -t crawl 爬蟲 域名
4. 通過爬取這個網站http://bxjg.circ.gov.cn/web/site0/tab5240/module14430/page1.htm 來使用CrawlSpider類進行爬蟲
? ?(1)創建好項目后,創建爬蟲(加入了-t crawl)?scrapy genspider -t crawl punish bxjg.circ.gov.cn
? ?(2)?? 可以使用rules規則,就可以不用再寫一個專門針對于下一頁的請求函數了
rules = (Rule(LinkExtractor(allow=r'/web/site0/tab5240/info\d+\.htm'), callback='parse_item'),Rule(LinkExtractor(allow=r'/web/site0/tab5240/module14430/page\d+\.htm'),follow=True),)LinkExtractor 連接提取器,提取url?
? ? ?參數:?
? ? ? ? url allow : 可以寫入正則表達式
? ? ? ?callback: 提取出來的url地址的response交給callback處理 ,需要時再用,一般對應的網站詳情頁面要使用
? ? ? ? ?follow: 表示當前的url地址的響應是否重新經過rules來提取url地址,需要時再用
? (3)? 然后 編寫爬蟲的代碼?
# -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule import re '''繼承spider的crawlspider類''' class PunishSpider(CrawlSpider):name = 'punish'allowed_domains = ['bxjg.circ.gov.cn']start_urls = ['http://bxjg.circ.gov.cn/web/site0/tab5240/module14430/page1.htm']'''可以定義提取url地址的規則LinkExtractor 連接提取器,提取urlallow : 可以寫入正則表達式callback: 提取出來的url地址的response交給callback處理follow: 表示當前的url地址的響應是否重新經過rules來提取url地址'''rules = (Rule(LinkExtractor(allow=r'/web/site0/tab5240/info\d+\.htm'), callback='parse_item'),Rule(LinkExtractor(allow=r'/web/site0/tab5240/module14430/page\d+\.htm'),follow=True),)'''與Spider類不同,CrawlSpider類中的parse函數有特殊功能,不能定義'''def parse_item(self, response):item = {}item['title'] = re.findall("<!--TitleStart-->(.*?)<!--TitleEnd-->",response.body.decode())[0]item['publish_date'] = re.findall("發布時間:(20\d{2}-\d{2}-\d{2})",response.body.decode())[0]print(item)? ?(4)? 在setting.py里面設置? ?LOG_LEVEL = "WARNING" 以及開啟并設置 USER_AGENT,然后在終端運行程序
? ??scrapy crawl punish
? ??
(5) LinKExtractor更多常見的參數:
? ?
5.? 再請求詳情頁的時候,我們也可以使用在Spider類中一樣,
? ? 通過? ?yield scrapy.Request()? ?方法也可以實現,但是代碼會寫的比使用Crawlspider類中的多
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Scrapy框架的学习(9.Scrapy中的CrawlSpider类的作用以及使用,实现优化的翻页爬虫)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scrapy框架的学习(8.scrapy
- 下一篇: Scrapy框架的学习(10.Scrap