Scrapy笔记:CrawSpider中rules中的使用

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)

 

转载于:https://www.cnblogs.com/zhangjpn/p/6802583.html

Scrapy框架CrawSpider源码分析 引言 这一期的文章我们来分析一下 Scrapy 框架中 CrawSpider 类的源码,希望能够加深对其处理逻辑的理解。 CrawlSpider 源码分析 CrawlSpider 继承了 Spider,其入口函数是 start_requests,该函数的 callback 为 CrawlSpider 下的 _parse 函数。 def _parse(self, response, **kwargs): return self._parse_response( response=res 阅读详情

相关推荐

爬虫学习笔记(八)—— Scrapy框架(三):CrawSpider模板

CrawlSpider 创建CrawlSpider 的爬虫文件 命令: scrapy genspider -t crawl 爬虫文件名 域名 Rule 功能:Rule用来定义CrawlSpider的爬取规则 参数: link_extractor: Link Extractor对象,它定义如何从每个已爬网页面中提取链接。 callback :回调函数 处理link_extractor形成的response cb_kwargs : cb:callback 回调函数的参数,是一个包含要传递给回调函数的关

别呀的博客 948

Python的scrapy爬虫框架—Rule

解释: Rule是在定义抽取链接的规则,上面的两条规则分别对应列表页的各个分页页面和详情页,关键点在于通过restrict_xpath来限定只从页面特定的部分来抽取接下来将要爬取的链接。 follow=False(不跟进), 只提取首页符合规则的url,然后爬取这些url页面数据,callback解析 follow=True(跟进链接), 在次级url页面中继续寻找符合规则的url,如此循环,直...

顾清风.的博客 1723

scrapy使用crawlspider

crawlspider介绍 CrawlSpider它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则Rule来提供跟进链接的方便的机制,从爬取的网页结果中获取链接并继续爬取的工作 举个简单的例子说明,我们需要提取下面的网站中每篇文章中的一些数据,如果每一页提取,只能提取基本的数据,而文章的作者,标题,内容,评论等信息都...

congge 5761

Scrapy的crawlspider爬虫

crawlspider的作用:crawlspider可以按照规则自动获取连接crawlspider爬虫的创建:scrapy genspider -t crawl xxx www.xxx.comcrawlspider中rules的使用:rules是一个元组或者是列表,包含的是Rule对象Rule表示规则,其中包含LinkExtractor,callback和follow等参数LinkExtractor:连接提取器,可以通过正则或者是xpath来进行url地址的匹配。

一勺菠萝丶的博客 1354

Q学习(Q-learning)入门小例子及python实现

一、从马尔科夫过程到Q学习 # 有一定基础的读者可以直接看第二部分 Q学习(Q-learning)算法是一种与模型无关的强化学习算法,以马尔科夫决策过程(Markov Decision Processes, MDPs)为理论基础。 标准的马尔科夫决策过程可以用一个五元组<S,A,P,R,γ>表示,其中: S是一个离散有界的状态空间; A是一个离散的动作空间; P为状态转...

wlm_py的博客 4万+

初探Proxmox Datacenter Manager:统一管理多集群与单节点的利器

本文介绍了Proxmox Datacenter Manager (PDM) 这一统一管理工具,它能有效解决多套Proxmox VE环境(包括集群和单节点)管理碎片化的痛点。文章详细阐述了PDM的核心功能、安装部署步骤,并通过实战演示了如何添加单节点与整个集群,实现资源的集中监控与基础运维,为运维人员提供了高效的集中管理解决方案。

weixin_29217235的博客 160

Scrapy中的Rules理解

Scrapy CrawlSpider Rules

wqh_jingsong的专栏 2万+

初学树莓派——(九)DHT11数据传入ONENET

目录 前言 DHT11实现本地温湿度监测 DHT11.py 接线图 效果图 温湿度数据上传至ONENET 新建产品 新建设备 ONENET.py 测试 Shell脚本配置 效果图 前言 本文分部分实现温湿度上传至OneNet云平台,本地数据监测,数据上传 新建一个文件夹,文件夹内包含DHT11.py、ONENET.py、tmp_data.txt、hum_data.txt DHT11实现本地温湿度监测 DHT11.py import RPi.GPIO as GPIO

会点灯的大力水手的博客 2612

python Scrapy(下)

ScrapyPipeline文件 —— 数据保存yield关键字 —— 生成器的一种item文件 Pipeline文件 —— 数据保存 注意事项: Pipeline在设置中的权重越小(字典中的值越小)优先级越高 Pipeline中process_item方法、open_spider方法和close_spider方法不能修改为其他的名称 可获取爬虫的名字 spider.name 可以在item中进行设置(item[xxx]=‘爬虫名’) # 字典当中的值越小,优先级越高,可以设置多个 ITEM

Jaydenzuo的博客 286

保姆级教程:用Intouch SMC连接S7-200 Smart PLC,Modbus TCP和S7协议一次搞定

本文详细介绍了如何使用Intouch SMC连接S7-200 Smart PLC,涵盖Modbus TCP和S7协议的双协议通信配置。通过环境准备、参数设置、常见问题排查及实战技巧,帮助工程师快速实现工业自动化系统中的稳定通信,提升设备监控效率。

weixin_30499315的博客 433

实战指南(一)SCAPS-1D太阳能电池模拟软件从零到一:模型构建与参数解析

本文详细介绍了SCAPS-1D太阳能电池模拟软件的使用方法,从模型构建到参数解析,帮助用户快速掌握这一免费且功能强大的工具。特别适合用于单结/多结电池的电学性能分析,涵盖钙钛矿电池等常见结构的模拟实践,并提供参数调试和收敛性问题处理的实用技巧。

weixin_30588675的博客 445

Scrapy框架中CrawSpider的使用

1.创建项目 scrapy startproject 项目名 2.创建爬虫(爬虫基于CrawSpider类) scrapy genspider -t craw 爬虫名 域名 3.爬虫文件中 # CrawSpider的使用 class BookSpider(CrawlSpider): name = 'book' allowed_domains = ['dushu.com'] # ----------注意-------- # 开始链接必须符合 正则提取的链接 s...

weixin_54345825的博客 786

别再为跨页读写发愁了!STM32F407模拟I2C驱动24C256/512的避坑指南

本文详细解析了STM32F407模拟I2C驱动24C256/512的跨页写入问题,揭示了24C系列存储器'写满一页不会自动翻页'的关键机制,并提供了经过验证的分页写入算法和优化方案。通过GPIO时序优化、地址计算和错误处理等技巧,帮助开发者解决数据错乱、覆盖等常见问题,实现稳定可靠的EEPROM读写操作。

weixin_42631411的博客 377

scrapy全站爬取拉勾网及CrawSpider介绍

一.指定模板创建爬虫文件 命令 创建成功后的模板,把http改为https 二.CrawSpider源码介绍   1.官网介绍:     这是用于抓取常规网站的最常用的蜘蛛,因为它通过定义一组规则为跟踪链接提供了便利的机制。它可能不是最适合您的特定网站或项目,但它在几种情况下足够通用,因此您可以从它开始并根据需要覆盖它以获得更多自定义功能,或者只是实现您自己的蜘蛛。 ...

weixin_33772645的博客 326

SAP-RPT-1 深度解读:面向企业表格数据的 rapid one

摘要: SAP在TechEd 2025大会上推出面向企业结构化数据的SAP-RPT-1(Relational Pretrained Transformer),旨在通过in-context learning直接预测表格数据中的缺失值,无需传统机器学习流程。与LLM不同,RPT专为业务表格设计,支持实时预测(如交货延迟、回款风险等)。提供Small(高吞吐)、Large(高精度)和开源版本,用户可通过无代码Playground(上传CSV并用[PREDICT]标记目标列)或Python API快速验证。典型场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 236

基于STM32设计的物联网疫苗冷链物流监测系统

本设计基于物联网技术,开发了一套疫苗冷链物流环境监测系统。系统采用STM32F103C8T6作为主控芯片,集成SHT30温湿度传感器、震动传感器、GPS定位模块和4G通信模块,实现对运输环境的温度、湿度及震动状况的实时监测与控制。通过继电器驱动半导体制冷模块和加湿器,系统能够自动调节环境温湿度,保障疫苗运输的安全性。采集的环境数据通过MQTT协议上传至华为云物联网平台,配套开发的Android手机APP和Windows上位机软件基于Qt平台设计,支持远程实时查看环境数据和车辆定位,提升了疫苗冷链运输的智能化

863

007:Scrapy核心架构和高级运用

本篇内容: Scrapy核心架构和其组件的功能 Scrapy的工作流 Scrapy的中文输出储存 介绍CrawSpider 编写了一个爬虫实战来进行我们的mysql数据库操作 Scrapy的核心架构 如下图所示: 主要组件包括了Scrapy引擎,调度器,管道,下载中间件,下载器,spider蜘蛛,爬虫中间件,实体管道(Item Pipeline)等。 1、Scrapy引擎: scrapy引擎是整...

李玺 9974

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

scrapy之Crawspider 腾讯招聘实战案例

1.  在虚拟机中cd到项目目录,再运行下面代码创建spider文件:   scrapy genspider -t crawl test www.baidu.com     2.  spider.py代码    import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders imp...

weixin_30645617的博客 149

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Scrapy之crawSpider和BaseSpider的区别

Scrapy中的BaseSpider爬虫类只能抓取start_urls中提供的链接,而利用Scrapy提供的crawlSpider类可以很方便的自动解析网页上符合要求的链接,从而达到爬虫自动抓取的功能。 要利用crawSpider和BaseSpider的区别在于crawSpider提供了一组Rule对象列表,这些Rule对象规定了爬虫抓取链接的行为,Rule规定的链接才会被抓取,交给相应的ca...

互联网思维 1316

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

python爬虫之十_scrapy框架进阶

一 CrawlSpider:URL规则过滤 CrawSpider类可以定义过滤url的规则,当spCrawSpiderder碰到满足条件的url都自动进行爬取,不用像基本爬虫类spider需手动yield Request。 4.1 创建CrawSpider scrapy genspider -t crawl [爬虫类名] [域名] 与创建基本爬虫相比,这里用 -t 指明了使用的模板为’crawl’,即继承自CrawlSpider。 4.2 URL过滤规则 Rule类: link_extractor:Lin

IMchg的博客 537

Scrapy框架

是一个爬去网页数据,提取数据结构的框架,只需要输入少量代码框架就可以帮你快速抓取需要的数据 Scrapy是一个异步网络框架 =================================================== 之前的爬去数据往往都是请求网页 ,然后获取数据提取数据和URL ,下次请求URL 然后处理数据 而Scrapy中拉取引擎的概念 ============...

谢志强 183

python爬虫环境spider_python爬虫之Scrapy框架(CrawSpider)

需求 想要爬去糗事百科全站的数据方法:(1)基于Scrapy框架中的Spider的递归爬去实现(2) 基于Scrapy框架的CrawlSpider的自动爬取来进行实现那么CrawlSpider又是什么呢?如何实现它的自动爬取?CrawlSpider的简介一 简介crawlspider是spider的一个子类,除了继承到Spider的功能外,还派生了其自己的更强大的功能和特性。其中最显著的功能就是'...

weixin_39641876的博客 286

利用Scrapy框架进行信息爬取并以mysql进行存储

以爬取当当网的相关数据对scrapy框架进行实现测试

Jayden的博客 774

scrapy:CrawlSpider及其案例

1. CrawSpider介绍 运行原理: 2. pymysql conda install pymysql 3. 案例-读书网爬虫&数据入库 3.1 案例需求 3.2 网页分析 3.3 创建爬虫项目 3.4 创建爬虫文件(与之前有区别) scrapy genspider -t crawl read https://www.dushu.com/book/1188.html...

yubaby 210

php 爬取拉钩,scrapy全站爬取拉勾网

一.指定模板创建爬虫文件 命令 创建成功后的模板,把http改为https二.CrawSpider源码介绍1.官网介绍:这是用于抓取常规网站的最常用的蜘蛛,因为它通过定义一组规则为跟踪链接提供了便利的机制。它可能不是最适合您的特定网站或项目,但它在几种情况下足够通用,因此您可以从它开始并根据需要覆盖它以获得更多自定义功能,或者只是实现您自己的蜘蛛。除了从Spider继承的属性(您必须指定)之外,此...

weixin_31833307的博客 189
上一篇: django+nginx+mod_wsgi+apache网站部署
下一篇: Scrapy笔记:日志的使用
dinght2000
博客等级 码龄11年 3粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值