这个类比较适用于对网站爬取批量网页,相比于Spider类,CrawlSpider主要使用规则(rules)来提取链接

  rules = (

    Rule(LinkExtractor(allow=(r'https://movie.douban.com/subject/\d+/')), callback="parse_item1"),

    Rule(LinkExtractor(allow=(r'https://movie.douban.com/subject/.+')), callback="parse_item2"),

    )

  如果接触过django,那么可以发现这个规则与django的路由系统十分相似,CrawlSpider的rules属性是直接从response对象的文本中提取url,然后自动创建新的请求。与Spider不同的是,CrawlSpider已经重写了parse函数,因此我们可以看到,scrapy的官网文档的例子中并没有重写parse。

这一切是scrapy自动实现的,具体过程是:

  scrapy crawl spidername开始运行,程序自动使用start_urls构造Request并发送请求,然后调用parse函数对其进行解析,在这个解析过程中使用rules中的规则从html(或xml)文本中提取匹配的链接,通过这个链接再次生成Request,如此不断循环,直到返回的文本中再也没有匹配的链接,或调度器中的Request对象用尽,程序才停止。

  rules中的规则如果callback没有指定,则使用默认的parse函数进行解析,如果指定了,那么使用自定义的解析函数。

  如果起始的url解析方式有所不同,那么可以重写CrawlSpider中的另一个函数parse_start_url(self, response)用来解析第一个url返回的Response,但这不是必须的。

  Rule对象的follow参数的作用是:指定了根据该规则从response提取的链接是否需要跟进。

参考: http://scrapy-chs.readthedocs.io/zh_CN/stable/topics/spiders.html#crawling-rules

 1 #!/usr/bin/python
 2 # -*- coding: utf-8 -*-
 3
 4 import scrapy
 5 from tutorial01.items import MovieItem
 6 from scrapy.spiders.crawl import Rule, CrawlSpider
 7 from scrapy.linkextractors import LinkExtractor
 8
 9
10 class DoubanmoviesSpider(CrawlSpider):
11     name = "doubanmovies"
12     allowed_domains = ["douban.com"]
13     start_urls = ['https://movie.douban.com/tag/']
14 #     http_user='username' #http协议的基本认证功能 ;http_user和http_pass
15 #     http_pass='password'
16     rules = ( #自动从response中根据正则表达式提取url,再根据这个url再次发起请求,并用callback解析返回的结果
17         Rule(LinkExtractor(allow=(r'https://movie.douban.com/subject/\d+/')), callback="parse_item"),
18         #Rule(LinkExtractor(allow=(r'https://movie.douban.com/tag/\[wW]+'))), # 从网页中提取http链接
19
20     )
21
22
23     def parse_item(self, response):
24         movie = MovieItem()
25         movie['name'] = response.xpath('//*[@id="content"]/h1/span[1]/text()').extract()[0]
26         movie['director'] = '/'.join(response.xpath('//a[@rel="v:directedBy"]/text()').extract())
27         movie['writer'] = '/'.join(response.xpath('//*[@id="info"]/span[2]/span[2]/a/text()').extract())
28         movie['url'] = response.url
29         movie['score'] = response.xpath('//*[@class="ll rating_num"]/text()').extract()[0]
30         movie['collections'] = response.xpath('//span[@property="v:votes"]/text()').extract()[0] #评价人数
31         movie['pub_date'] = response.xpath('//span[@property="v:initialReleaseDate"]/text()').extract()[0]
32         movie['actor'] = '/'.join(response.css('span.actor span.attrs').xpath('.//a[@href]/text()').extract())
33         movie['classification'] = '/'.join(response.xpath('//span[@property="v:genre"]/text()').extract())
34         print('movie:%s  |url:%s'%(movie['name'],movie['url']))
35         return movie
36
37     def parse_start_url(self, response):
38         urls = response.xpath('//div[@class="article"]//a/@href').extract()
39         for url in urls:
40             if 'https' not in url: # 去除多余的链接
41                 url = response.urljoin(url) # 补全
42                 print(url)
43                 print('*'*30)
44                 yield scrapy.Request(url)

scrapy.spiders.crawl.CrawlSpider类的使用相关推荐

  1. Scrapy框架的学习(9.Scrapy中的CrawlSpider类的作用以及使用,实现优化的翻页爬虫)

    1.CrawlSpider类通过一些规则(rules),使对于链接(网页)的爬取更具有通用性, 换句话说,CrawlSpider爬虫为通用性的爬虫, 而Spider爬虫更像是为一些特殊网站制定的爬虫. ...

  2. 爬虫的高阶使用——scrapy框架crawl shell,crawlSpider imagepipeline

    一.scrapy shell的使用 在命令行输入scrapy shell "网址名",以百度的域名为例子,需要了解即可,可以打印你想知道的信息 (python38) F:\Spid ...

  3. Scrapy框架CrawlSpider类爬虫实例

    CrawlSpider类爬虫中: rules用于定义提取URl地址规则,元祖数据有顺序 #LinkExtractor 连接提取器,提取url地址  #callback 提取出来的url地址的respo ...

  4. Scrapy中的crawlspider爬虫

    crawlspider 介绍 创建模板 具体参数和解释 重点在rules中: 栗子: 介绍 Scrapy框架中分两类爬虫 Spider类和CrawlSpider类. crawlspider是Spide ...

  5. 爬虫利器Scrapy之Crawl Spider 模板的使用

    1.Spider模板 scrapy默认创建的spider模板就是basic模板,创建spider文件的命令是:scrapy genspider dribbble dribbble.com,查看spid ...

  6. scrapy框架 crawl spider 爬取.gif图片

    创建项目: scrapy startproject qiumeimei 建立爬虫应用: scrapy genspider -t crawl meimei www.qiumeimei.com 爬虫文件 ...

  7. 三十四、Scrapy中的CrawlSpider

    @Author:Runsen Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 目前腾讯招聘的官网改变了,因此本文只能了解,不能实战 创建CrawlSpider模板: scra ...

  8. Scrapy框架之Crawlspider的使用

    Scrapy存在多种爬虫类,最常用的有两种:第一种是基于basic模版创建的普通爬虫类Scrapy.spider.另一种是基于crawl的规则性爬虫类scrapy.spider.crawlspider ...

  9. Python 爬虫:scrapy 没有crawl 命令

    scrapy 爬虫框架启用命令注意事项 1.cd 到你指定的文件夹下: 2.scrapy startproject Spider(项目名字:自定义): 3.cd Spider(cd到你创建的项目下); ...

  10. crawlspider类的使用

    scrapy的crawlspider爬虫 学习目标: 了解 crawlspider的作用 应用 crawlspider爬虫创建的方法 应用 crawlspider中rules的使用 1 crawlsp ...

最新文章

  1. app如何打开了request url_手机日历app内如何打开节日提醒功能?支持提前提醒节日的云便签...
  2. Servlet 服务器端小程序
  3. php基础标签大全,HTML基础之HTML常用标签
  4. 66319d电源使用说明书_蒸汽熨斗怎么用 蒸汽熨斗使用方法及注意事项【介绍】...
  5. ChinaMM竞赛:低光照人脸检测
  6. php软件开发--html进阶
  7. matlab 符号 推倒,【MATLAB】符号数学计算(四):符号表达式操作
  8. 网络故障处理手册大全
  9. dwr运行时出现Servlet.init() for servlet dwr-invoker threw exception的解决方法
  10. 计算机基础(七):ION定义与使用方法
  11. 【JAVA源码分析——Java.lang】String源码分析
  12. RTF文件格式编码说明
  13. linux 文件管理系统
  14. 《圈子圈套1》—— 读后总结
  15. 三目表达式运算符优先级分析
  16. 互联网创业项目加盟,超低门槛,0经验也能开
  17. ElementUi Carousel 走马灯,自定义el-carousel箭头左右切换
  18. 【shell脚本】——IFS的概念和用法
  19. 加班的程序员:996 没有未来
  20. Web全栈开发学习笔记—Part2 与服务端通信—d.在服务端将数据Alert出来

热门文章

  1. C盘爆满,你的专属清道夫来啦
  2. (5.2.1)配置服务器参数——即时文件初始化(IFI)
  3. 2022年全球市场电镀金刚石线总体规模、主要生产商、主要地区、产品和应用细分研究报告
  4. 文档无法保存 读取文档时出现问题(135)
  5. 6-2 两顶点之前有路径吗?
  6. duck duck go VS Google
  7. 读书笔记5.2——《让数字说话:审计,就这么简单》:孙含晖
  8. Swift 模式(Patterns)
  9. 寒霜PBR阅读与实践[1]:Material材质--Physically Based Rendering 3.0 --SIGGRAPH 2014
  10. android快速复制粘贴,Android开发复制和粘贴