Scrapy框架中的crawlspider爬虫
1 crawlspider是什么
在spider中要寻找下一页的url地址或者内容的url地址,想想是否有简单的方法省略寻找url的过程?
思路:
- 从response中提取所有的满足规则的url地址
- 自动的构造自己requests请求,发送给引擎
对应的crawlspider就可以实现上述需求,能够匹配满足条件的url地址,组装成Reuqest对象后自动发送给引擎,同时能够指定callback函数
即:crawlspider爬虫可以按照规则自动获取连接
crawlspider的作用:crawlspider可以按照规则自动获取连接
【crawlspider 继承自spider 爬虫类】【自动根据规则提取链接并发送给引擎】
2 创建crawlspider爬虫并观察爬虫内的默认内容
2.1 创建crawlspider爬虫:
scrapy genspider -t crawl job 163.com
2.2 spider中默认生成的内容如下:
class JobSpider(CrawlSpider):name = 'job'allowed_domains = ['163.com']start_urls = ['https://hr.163.com/position/list.do']rules = (Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),)def parse_item(self, response):item = {}#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()#i['name'] = response.xpath('//div[@id="name"]').extract()#i['description'] = response.xpath('//div[@id="description"]').extract()return item
【LinkExtractor用于设置链接提取规则,一般使用allow参数接收正则表达式】【follow参数决定是否在链接提取器提取的链接对应的响应中继续应用链接提取器提取链接】【使用Rule类生成链接提取对象】
【提取allow链接可以使用爬虫小工具shell来测试链接是否能取到及是否正确:参考博文:爬虫Scrapy框架小工具shell_IT之一小佬的博客-CSDN博客】
2.3 观察跟普通的scrapy.spider的区别
在crawlspider爬虫中,没有parse函数
重点在rules中:
- rules是一个元组或者是列表,包含的是Rule对象
- Rule表示规则,其中包含LinkExtractor,callback和follow等参数
- LinkExtractor:连接提取器,可以通过正则或者是xpath来进行url地址的匹配
- callback :表示经过连接提取器提取出来的url地址响应的回调函数,可以没有,没有表示响应不会进行回调函数的处理
- follow:连接提取器提取的url地址对应的响应是否还会继续被rules中的规则进行提取,True表示会,Flase表示不会
3. crawlspider网易招聘爬虫
通过crawlspider爬取网易招聘的详情页的招聘信息
url:职位搜索
思路分析:
- 定义一个规则,来进行列表页翻页,follow需要设置为True
- 定义一个规则,实现从列表页进入详情页,并且指定回调函数
- 在详情页提取数据
注意:连接提取器LinkExtractor中的allow对应的正则表达式匹配的是href属性的值
示例代码:
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule# crawspider经常应用于数据在一个页面上进行采集的情况,如果页面在多个页面上进行采集,这个时候通常使用spider
class WangyiSpider(CrawlSpider):name = 'wangyi'allowed_domains = ['163.com']start_urls = ['https://hr.163.com/position/list.do']rules = (# 使用Rule类生成链接提取对象# LinkExtractor用于设置链接提取规则,一般使用allow参数接收正则表达式# follow参数决定是否在链接提取器提取的链接对应的响应中继续应用链接提取器提取链接# 设置详情页链接提取规则Rule(LinkExtractor(allow=r'https://hr.163.com/position/detail.do\?id=\d+'), callback='parse_item'),# 设置翻页链接提取规则Rule(LinkExtractor(allow=r'https://hr.163.com/position/list.do\?currentPage=\d+'), follow=True),)def parse_item(self, response):item = {}item['name'] = response.xpath('./td[1]/a/text()').extract_first()print(item)return item
4 crawlspider使用的注意点:
- 除了用命令
scrapy genspider -t crawl <爬虫名> <allowed_domail>
创建一个crawlspider的模板,页可以手动创建 - crawlspider中不能再有以parse为名的数据提取方法,该方法被crawlspider用来实现基础url提取等功能
- Rule对象中LinkExtractor为固定参数,其他callback、follow为可选参数
- 不指定callback且follow为True的情况下,满足rules中规则的url还会被继续提取和请求
- 如果一个被提取的url满足多个Rule,那么会从rules中选择一个满足匹配条件的Rule执行
5 crawlspider其他知识点
链接提取器LinkExtractor的更多常见参数
- allow: 满足括号中的're'表达式的url会被提取,如果为空,则全部匹配
- deny: 满足括号中的're'表达式的url不会被提取,优先级高于allow
- allow_domains: 会被提取的链接的domains(url范围),如:
['hr.tencent.com', 'baidu.com']
- deny_domains: 不会被提取的链接的domains(url范围)
- restrict_xpaths: 使用xpath规则进行匹配,和allow共同过滤url,即xpath满足的范围内的url地址会被提取,如:
restrict_xpaths='//div[@class="pagenav"]'
Rule常见参数
- LinkExtractor: 链接提取器,可以通过正则或者是xpath来进行url地址的匹配
- callback: 表示经过连接提取器提取出来的url地址响应的回调函数,可以没有,没有表示响应不会进行回调函数的处理
- follow: 连接提取器提取的url地址对应的响应是否还会继续被rules中的规则进行提取,默认True表示会,Flase表示不会
- process_links: 当链接提取器LinkExtractor获取到链接列表的时候调用该参数指定的方法,这个自定义方法可以用来过滤url,且这个方法执行后才会执行callback指定的方法
Scrapy框架中的crawlspider爬虫相关推荐
- Scrapy中的crawlspider爬虫
crawlspider 介绍 创建模板 具体参数和解释 重点在rules中: 栗子: 介绍 Scrapy框架中分两类爬虫 Spider类和CrawlSpider类. crawlspider是Spide ...
- dataObject可以去重吗java_python爬虫scrapy框架之增量式爬虫的示例代码
scrapy框架之增量式爬虫 一 .增量式爬虫 什么时候使用增量式爬虫: 增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据.如一些电影网站会实时更新最近热门的 ...
- 基于Scrapy框架的Python新闻爬虫
概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...
- scrapy框架之增量式爬虫
scrapy框架之增量式爬虫 一 .增量式爬虫 什么时候使用增量式爬虫: 增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据.如一些电影网站会实时更新最近热门的 ...
- scrapy框架中实现登录人人网(一)(最新登录方式)
最近在弄scrapy框架的问题,感觉里面好玩的东西有很多,无意中在bilibili中看到关于在scrapy实现登录人人网的视频,人人网可能用户少,所以在现在的一些博客和教程里面看到最新的登录方法几乎没 ...
- 在scrapy框架中如何设置开放代理池达到反爬的目的
我们在随机爬取某个网站的时候,比如对网站发出成千上万次的请求,如果每次访问的ip都是一样的,就很容易被服务器识别出你是一个爬虫.因此在发送请求多了之后我们就要设置ip代理池来随机更换我们的ip地址,使 ...
- 使用scrapy框架做赶集网爬虫
使用scrapy框架做赶集网爬虫 一.安装 首先scrapy的安装之前需要安装这个模块:wheel.lxml.Twisted.pywin32,最后在安装scrapy pip install wheel ...
- python scrapy 框架的简单使用爬虫苏宁易购图书信息
python scrapy 框架的简单使用&&爬虫苏宁易购图书信息 前言 第一步: 分析网页 1.1 找到要爬取的数据位置 分类信息 图书信息 价格信息 1.2 分析如何获取数据 正则 ...
- python pipeline框架_Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法...
原博文 2017-07-17 16:39 − 当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的pytho ...
最新文章
- IJCAI 2021 医药AI必读论文推荐
- python ln2怎么写_Python2和3切换默认
- 关于stm32的数据类型
- c语言如何打印矩形图形的程序 五行七列,C语言习题与实验
- 解决方案:the program can't start because mspdb100.dll is missing from your computer
- Java Web专题(一)
- Linux下查看/管理当前登录用户及用户操作历史记录
- Qt工作笔记-ui文件连接信号与槽
- mysql数据库操作类
- 如何清理Docker占用的磁盘空间?
- [ 逻辑锻炼] 用 JavaScript 做一个小游戏 ——2048 (详解版)
- 搞懂 mismatch dep signature
- python利用什么写模块_python模块是什么?写法及作用分析
- 在Android 6.0 Marshmallow(API 23)上弃用了getColor(int id)
- 会不会导致内存泄漏_mysql内存数据淘汰机制和大查询会不会把内存打爆?
- ToStringBuilder介绍
- 朴素的模式匹配(布鲁特-福斯算法)
- EasyRecovery15Mac全面好用的苹果电脑数据恢复app
- 新零售微服务电商项目SpringBoot/SpringCloudAlibaba
- 使用Dockerfile创建openoffice镜像
热门文章
- 永远不要对 AI 说:“我不行!”
- 520 情人节 :属于Python 程序员的脱单攻略大合集(视频版)
- 用Python让蔡徐坤在我的命令行里打篮球!|附完整代码
- 中科创达孙力:不迷信 AI 算法,智能视觉如何转型升级?
- 精选26个Python实用技巧,想秀技能先Get这份技术列表!
- 热门 | Google Brain前员工深度盘点2017人工智能和深度学习各大动态
- 推荐一个 Java 接口快速开发框架
- Redis 生产架构选型解决方案
- 深度对比Jackson和Fastjson,最终我还是选择了...
- 优雅地处理重复请求(并发请求)——附Java实现