scrapy.spiders.crawl.CrawlSpider类的使用
这个类比较适用于对网站爬取批量网页,相比于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类的使用相关推荐
- Scrapy框架的学习(9.Scrapy中的CrawlSpider类的作用以及使用,实现优化的翻页爬虫)
1.CrawlSpider类通过一些规则(rules),使对于链接(网页)的爬取更具有通用性, 换句话说,CrawlSpider爬虫为通用性的爬虫, 而Spider爬虫更像是为一些特殊网站制定的爬虫. ...
- 爬虫的高阶使用——scrapy框架crawl shell,crawlSpider imagepipeline
一.scrapy shell的使用 在命令行输入scrapy shell "网址名",以百度的域名为例子,需要了解即可,可以打印你想知道的信息 (python38) F:\Spid ...
- Scrapy框架CrawlSpider类爬虫实例
CrawlSpider类爬虫中: rules用于定义提取URl地址规则,元祖数据有顺序 #LinkExtractor 连接提取器,提取url地址 #callback 提取出来的url地址的respo ...
- Scrapy中的crawlspider爬虫
crawlspider 介绍 创建模板 具体参数和解释 重点在rules中: 栗子: 介绍 Scrapy框架中分两类爬虫 Spider类和CrawlSpider类. crawlspider是Spide ...
- 爬虫利器Scrapy之Crawl Spider 模板的使用
1.Spider模板 scrapy默认创建的spider模板就是basic模板,创建spider文件的命令是:scrapy genspider dribbble dribbble.com,查看spid ...
- scrapy框架 crawl spider 爬取.gif图片
创建项目: scrapy startproject qiumeimei 建立爬虫应用: scrapy genspider -t crawl meimei www.qiumeimei.com 爬虫文件 ...
- 三十四、Scrapy中的CrawlSpider
@Author:Runsen Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 目前腾讯招聘的官网改变了,因此本文只能了解,不能实战 创建CrawlSpider模板: scra ...
- Scrapy框架之Crawlspider的使用
Scrapy存在多种爬虫类,最常用的有两种:第一种是基于basic模版创建的普通爬虫类Scrapy.spider.另一种是基于crawl的规则性爬虫类scrapy.spider.crawlspider ...
- Python 爬虫:scrapy 没有crawl 命令
scrapy 爬虫框架启用命令注意事项 1.cd 到你指定的文件夹下: 2.scrapy startproject Spider(项目名字:自定义): 3.cd Spider(cd到你创建的项目下); ...
- crawlspider类的使用
scrapy的crawlspider爬虫 学习目标: 了解 crawlspider的作用 应用 crawlspider爬虫创建的方法 应用 crawlspider中rules的使用 1 crawlsp ...
最新文章
- app如何打开了request url_手机日历app内如何打开节日提醒功能?支持提前提醒节日的云便签...
- Servlet 服务器端小程序
- php基础标签大全,HTML基础之HTML常用标签
- 66319d电源使用说明书_蒸汽熨斗怎么用 蒸汽熨斗使用方法及注意事项【介绍】...
- ChinaMM竞赛:低光照人脸检测
- php软件开发--html进阶
- matlab 符号 推倒,【MATLAB】符号数学计算(四):符号表达式操作
- 网络故障处理手册大全
- dwr运行时出现Servlet.init() for servlet dwr-invoker threw exception的解决方法
- 计算机基础(七):ION定义与使用方法
- 【JAVA源码分析——Java.lang】String源码分析
- RTF文件格式编码说明
- linux 文件管理系统
- 《圈子圈套1》—— 读后总结
- 三目表达式运算符优先级分析
- 互联网创业项目加盟,超低门槛,0经验也能开
- ElementUi Carousel 走马灯,自定义el-carousel箭头左右切换
- 【shell脚本】——IFS的概念和用法
- 加班的程序员:996 没有未来
- Web全栈开发学习笔记—Part2 与服务端通信—d.在服务端将数据Alert出来
热门文章
- C盘爆满,你的专属清道夫来啦
- (5.2.1)配置服务器参数——即时文件初始化(IFI)
- 2022年全球市场电镀金刚石线总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 文档无法保存 读取文档时出现问题(135)
- 6-2 两顶点之前有路径吗?
- duck duck go VS Google
- 读书笔记5.2——《让数字说话:审计,就这么简单》:孙含晖
- Swift 模式(Patterns)
- 寒霜PBR阅读与实践[1]:Material材质--Physically Based Rendering 3.0 --SIGGRAPH 2014
- android快速复制粘贴,Android开发复制和粘贴