多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ***** 之前的代码中,我们有很大一部分时间在寻找下一页的URL地址或者内容的URL地址上面,这个过程能更简单一些吗? 思路: 1.从response中提取所有的a标签对应的URL地址 2.自动的构造自己resquests请求,发送给引擎 URL地址:`http://www.circ.gov.cn/web/site0/tab5240` 目标:通过爬虫了解crawlspider的使用 生成crawlspider的命令:`scrapy genspider -t crawl cf cbrc.gov.cn` ``` # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule class YgSpider(CrawlSpider): name = 'yg' allowed_domains = ['sun0769.com'] start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4&page=0'] rules = ( # LinkExtractor 连接提取器,提取URL地址 # callback 提取出来的URL地址的response会交给callback处理 # follow 当前URL地址的响应是够重新来rules来提取URL地址 Rule(LinkExtractor(allow=r'wz.sun0769.com/html/question/201811/\d+\.shtml'), callback='parse_item'), Rule(LinkExtractor(allow=r'http:\/\/wz.sun0769.com/index.php/question/questionType\?type=4&page=\d+'), follow=True), ) def parse_item(self, response): item = {} item['content'] = response.xpath('//div[@class="c1 text14_2"]//text()').extract() print(item) ``` **注意点** 1.用命令创建一个crawlspider的模板:scrapy genspider -t crawl <爬虫名字> <all_domain>,也可以手动创建 2.CrawlSpider中不能再有以parse为名字的数据提取方法,这个方法被CrawlSpider用来实现基础URL提取等功能 3.一个Rule对象接受很多参数,首先第一个是包含URL规则的LinkExtractor对象,常用的还有callback和follow - callback:连接提取器提取出来的URL地址对应的响应交给他处理 - follow:连接提取器提取出来的URL地址对应的响应是否继续被rules来过滤 4.不指定callback函数的请求下,如果follow为True,满足该rule的URL还会继续被请求 5.如果多个Rule都满足某一个URL,会从rules中选择第一个满足的进行操作 ## CrawlSpider补充(了解) ![](https://img.kancloud.cn/88/18/88186f73506d0eff05d88f5fec33cff7_1570x992.png)