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

AI风控系统中的实时决策架构:架构师的关键设计

当用户点击「确认支付」时,一场毫秒级的“欺诈攻防战”正在后台悄然打响:系统需要在100ms内完成用户行为特征提取→欺诈模型推理→规则引擎校验→最终决策返回。这就是AI风控实时决策架构的核心——用技术对抗“实时化的欺诈手段”。本文将以「餐厅智能点餐系统」为类比,拆解实时风控架构的每一层逻辑:从“如何快速拿到用户的实时行为特征”(像服务员实时收集顾客的忌口),到“如何让模型和规则协同决策”(像厨师长结合菜谱和经验判断菜能不能做),再到“如何保证系统扛住大促的高并发”(像餐厅加桌子应对客流高峰)。我们会用。

2502_91592937的博客 1472

保姆级教程:在S32DS 3.4上安装S32K3xx RTD 4.4驱动包(附常见安装失败排查)

本文提供在S32DS 3.4上安装S32K3xx RTD 4.4驱动包的详细教程,涵盖环境准备、分步安装指南及常见问题排查。特别针对NXP S32K3系列MCU开发者,解决网络问题、路径配置等安装难点,并分享进阶配置技巧和最佳实践,助力高效开发。

weixin_42696271的博客 288

Scrapy中的Rules理解

Scrapy CrawlSpider Rules

wqh_jingsong的专栏 2万+

tecplot 通过数据点、坐标点绘制云图、三维云图

使用坐标点绘制二维云图或三维云图

medicalmask的博客 3万+

python Scrapy(下)

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

Jaydenzuo的博客 286

TSP:车为什么能和云端交互?

TSP:车为什么能和云端交互?

天赐好车的博客 410

【INMP441】 MEMS麦克风,让硬件“听得见”,更要“听得清”

INMP441是一款数字MEMS麦克风,采用PDM接口输出高质量数字音频信号。相比传统模拟麦克风,它具有高度集成、抗干扰强、功耗低等优势,支持通过时钟启停实现软件控制开关。该麦克风体积小巧但功能强大,内置MEMS传感器、ADC转换器等模块,适合智能音箱、语音遥控等应用。工程师可通过ESP32等主控芯片轻松连接INMP441,利用多麦克风阵列实现波束成形等高级功能。INMP441展现了数字音频采集的先进技术,为创客和智能硬件开发者提供了优秀的音频解决方案。

深耕CV 1536

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

UE5实现物体高亮描边效果(含UE相关源码浅析)

UE5实现物体高亮描边效果

专注GIS开发 7334

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

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

weixin_33772645的博客 326

大津法(OTSU)点云强度信息分割

大津法(OTSU)是一种灰度图像自适应的阈值分割方法,大津法根据图像的灰度分布,将图像分成背景和前景两部分,前景就是需要按照阈值分割出来的部分。由于点云的强度信息的特性,也可以利用此方法进行分类,但需要保证信息干扰较少,例如道路标线分割等场景较为适用。

qq_48694523的博客 965

华为OD机试真题 新系统2026-04-01 C语言 实现【空间占用计算】

员工A的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

MISAYAONE的博客 231

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Scrapy之crawSpider和BaseSpider的区别

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

互联网思维 1316

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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、付费专栏及课程。

余额充值