需求 想要爬去糗事百科全站的数据
方法:
(1) 基于 Scrapy 框架中的 Spider 的递归爬去实现
(2) 基于 Scrapy 框架的 CrawlSpider 的自动爬取来进行实现
那么 CrawlSpider 又是什么呢? 如何实现它的自动爬取?
CrawlSpider 的简介
一 简介
crawlspider 是 spider 的一个子类, 除了继承到 Spider 的功能外, 还派生了其自己的更强大的功能和特性. 其中最显著的功能就是'"LinkExtractors 链接提取器'.Spider 是所有怕爬虫类的基类
二 使用
步骤:
(1) 创建 scrapy 工程: scrapy startproject projectName
(2) 创建爬虫文件: scrapy genspider -t crawl spidername www.xxx.com
注意 这里创建爬虫文件时比之前创建的爬虫文件多了 - t crawl 表示的时创建的爬虫文件是一个基于 CrawlSpider 这个类, 而不是 Spider 这个基类了
(3) 生成的爬虫文件和之前的 spider 基类的爬虫文件有所不同
需求 爬取到抽屉网站中分页中的 url
- import scrapy
- from scrapy.linkextractors import LinkExtractor
- from scrapy.spiders import CrawlSpider, Rule
- # 爬取抽屉网站的分页的 URL
- # 注意 这里继承的类是 CrawlSpider 而不是 Spider
- class ChoutiSpider(CrawlSpider):
- name = 'chouti'
- # allowed_domains = ['www.xxx.com']
- start_urls = ['https://dig.chouti.com/r/scoff/hot/1']
- #allow 表示链接提取器提取链接的规则
- rules = (
- #Rule 规则提取器: 将链接提取器提取到的链接所对应的页面进行指定形式的解析
- #follow 让连接提取器继续作用到链接提取器提取到的链接所对应的页面中
- Rule(LinkExtractor(allow=r'/r/scoff/hot/\d+'), callback='parse_item', follow=True),
- )
- def parse_item(self, response):
- print(response)
- item = {}
- item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
- item['name'] = response.xpath('//div[@id="name"]').get()
- item['description'] = response.xpath('//div[@id="description"]').get()
- return item
需求 爬取糗事百科网站的分页的 URL
- # 爬取糗事百科网站的分页的 URL
- class ChoutiSpider(CrawlSpider):
- name = 'qiubai'
- # allowed_domains = ['www.xxx.com']
- start_urls = ['https://www.qiushibaike.com/pic/']
- #allow 表示链接提取器提取链接的规则
- link = LinkExtractor(allow=r'/pic/page/\d+\?s=\d+')
- link1 = LinkExtractor(allow=r'/pic/$')
- #注意这里可以有多个规则
- rules = (
- #Rule 规则提取器: 将链接提取器提取到的链接所对应的页面进行指定形式的解析
- #follow 让连接提取器继续作用到链接提取器提取到的链接所对应的页面中
- Rule(link, callback='parse_item', follow=True),
- Rule(link1,callback='parse_item',follow=True)
- )
- def parse_item(self, response):
- print(response)
来源: http://www.bubuko.com/infodetail-2977126.html