Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CrawlSpider爬虫教程

CrawlSpider爬虫教程

原创
作者头像
用户2200417
发布于 2022-03-12 03:09:41
发布于 2022-03-12 03:09:41
34600
代码可运行
举报
文章被收录于专栏:PycharmPycharm
运行总次数:0
代码可运行

CrawlSpider

在上一个糗事百科的爬虫案例中。我们是自己在解析完整个页面后获取下一页的url,然后重新发送一个请求。有时候我们想要这样做,只要满足某个条件的url,都给我进行爬取。那么这时候我们就可以通过CrawlSpider来帮我们完成了。CrawlSpider继承自Spider,只不过是在之前的基础之上增加了新的功能,可以定义爬取的url的规则,以后scrapy碰到满足条件的url都进行爬取,而不用手动的yield Request

CrawlSpider爬虫:

创建CrawlSpider爬虫:

之前创建爬虫的方式是通过scrapy genspider [爬虫名字] [域名]的方式创建的。如果想要创建CrawlSpider爬虫,那么应该通过以下命令创建:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrapy genspider -c crawl [爬虫名字] [域名]

LinkExtractors链接提取器:

使用LinkExtractors可以不用程序员自己提取想要的url,然后发送请求。这些工作都可以交给LinkExtractors,他会在所有爬的页面中找到满足规则的url,实现自动的爬取。以下对LinkExtractors类做一个简单的介绍:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class scrapy.linkextractors.LinkExtractor(
    allow = (),
    deny = (),
    allow_domains = (),
    deny_domains = (),
    deny_extensions = None,
    restrict_xpaths = (),
    tags = ('a','area'),
    attrs = ('href'),
    canonicalize = True,
    unique = True,
    process_value = None
)

主要参数讲解:

  • allow:允许的url。所有满足这个正则表达式的url都会被提取。
  • deny:禁止的url。所有满足这个正则表达式的url都不会被提取。
  • allow_domains:允许的域名。只有在这个里面指定的域名的url才会被提取。
  • deny_domains:禁止的域名。所有在这个里面指定的域名的url都不会被提取。
  • restrict_xpaths:严格的xpath。和allow共同过滤链接。

Rule规则类:

定义爬虫的规则类。以下对这个类做一个简单的介绍:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class scrapy.spiders.Rule(
    link_extractor, 
    callback = None, 
    cb_kwargs = None, 
    follow = None, 
    process_links = None, 
    process_request = None
)

主要参数讲解:

  • link_extractor:一个LinkExtractor对象,用于定义爬取规则。
  • callback:满足这个规则的url,应该要执行哪个回调函数。因为CrawlSpider使用了parse作为回调函数,因此不要覆盖parse作为回调函数自己的回调函数。
  • follow:指定根据该规则从response中提取的链接是否需要跟进。
  • process_links:从link_extractor中获取到链接后会传递给这个函数,用来过滤不需要爬取的链接。

微信小程序社区CrawlSpider案例

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
读书笔记-JavaScript面向对象编程(一)
前前后后大概花了两周的时间,终于把这本书大致看完了,对之前javascript高级程序设计中模糊不清的概念,有了一些新的看法和角度,整体上来说,本书还是一本比较适合有一定前端基础的朋友们阅读。参考http://pan.baidu.com/s/1eSDSTVW 密码: 75jr 第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对象的程序设计   1.5.1 对象(属性和方法的集合)   1.5.2 类 (相似对象的共同特征,如麻雀、老鹰都是鸟类)   1.5.
小古哥
2018/03/08
8870
JavaScript 数组总结 原
JavaScript没有明确的数组数据类型,但是外面可以通过使用内置Array对象和它的方法对数组进行操作,Array对象有很多操作数组的方法,比如 合并,反转 ,排序,数组对象有一个决定数组长度和使用正则表达式操作其他属性的属性,你可以分配length属性,写一个小于数组元素变量的值会缩短数组本身,写0会彻底清空数组
tianyawhl
2019/04/04
5080
37个JavaScript基本面试问题和解答(建议收藏)
1、使用typeof bar ===“object”来确定bar是否是一个对象时有什么潜在的缺陷?这个陷阱如何避免?
用户1272076
2019/03/26
3.3K0
JS数组去重!!!一篇不怎么靠谱的"深度"水文
数组去重,这是一个老梗了...今天我又拿出来说了... 我们在考虑全面一点的情况下,数组去重的实现,比如针对NaN,undefined,{}; 这其中涉及的知识点挺多,不信跟着走一波; 这里不考虑浏览器兼容性这些破问题,因为涉及ES5&6
CRPER
2018/08/28
6190
Javascript数组操作
使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间;思虑下,堪能如此继续之?当狠心深学下方是正道。 一, 数组常用方法 1. 数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度 var arrayObj = new Array([element0[, element1
晚晴幽草轩轩主
2018/03/27
4K0
你可能从未使用过的11+个JavaScript特性
这篇文章中描述的大多数功能已被暂停使用。 它们仍然在许多图书中很常见,因此值得学习。
Javanx
2020/01/14
1.1K0
你可能从未使用过的11+个JavaScript特性
JavaScript权威指南 - 数组
JavaScript数组是一种特殊类型的对象。 JavaScript数组元素可以为任意类型,最大容纳232-1个元素。 JavaScript数组是动态的,有新元素添加时,自动更新length属性。 JavaScript数组元素索引可以是不连续的,它们之间可以有空缺。
Esofar
2018/09/05
4.2K0
剑指 offer -JavaScript 版(第3期23-32题)
21.输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
前端迷
2019/12/19
3050
如何答一道惊艳面试官的数组去重问题?
思想: 双重 for 循环是比较笨拙的方法,它实现的原理很简单:先定义一个包含原始数组第一个元素的数组,然后遍历原始数组,将原始数组中的每个元素与新数组中的每个元素进行比对,如果不重复则添加到新数组中,最后返回新数组;因为它的时间复杂度是O(n^2),如果数组长度很大,效率会很低。
coder_koala
2019/12/27
1.3K0
如何答一道惊艳面试官的数组去重问题?
javascript模式 读书笔记一
模式是指一个通用问题的解决方案。 模式分三种 设计模式 编码模式:javascript特有的
lilugirl
2019/05/26
1.1K0
JavaScript数组去重(12种方法)
数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看。 在真实的项目中碰到的数组去重,一般都是后台去处理,很少让前端处理数组去重。虽然日常项目用到的概率比较低,但还是需要了解一下,以防面试的时候可能回被问到。
Javanx
2019/09/04
3850
JavaScript数组去重(12种方法)
44 个 JavaScript 变态题解析
当初笔者做这套题的时候不仅怀疑智商, 连人生都开始怀疑了…. 不过, 对于基础知识的理解是深入编程的前提. 让我们一起来看看这些变态题到底变态不变态吧! 第1题 ["1", "2", "3"].map(parseInt) 知识点: Array/map Number/parseInt JavaScript parseInt 首先, map接受两个参数, 一个回调函数 callback, 一个回调函数的this值 其中回调函数接受三个参数 currentValue, index, arrary; 而题目中, m
用户1667431
2018/04/18
9770
分享 20 个提升效率的 JavaScript 缩写小技巧
JavaScript中有很多速记技巧,可以缩短代码长度,减少冗余,提高代码的可读性和可维护性。本文将介绍20个提高效率的JS缩写技巧,帮助你告别写垃圾的生活,轻松写出优雅的代码!
前端达人
2023/10/25
4240
分享 20 个提升效率的 JavaScript 缩写小技巧
JavaScript小技能:变量
如果我们没有变量,我们就不得不写大量的代码去枚举和检查输入的名字,然后去显示它们,这样做显然是低效率和不可行的 。
公众号iOS逆向
2022/08/22
7720
JavaScript小技能:变量
Javascript数组方法(ES5-ES6)
join(speparator):将数组的元素组起一个字符串,spearator为分隔符,省略的话则用默认用逗号为分隔符,该方法只接收一个参数,即分隔符。
用户9298250
2021/12/29
1.1K0
「查缺补漏」送你 54 道 JavaScript 面试题
. VS = 操作符优先级 let a = {n : 1}; let b = a; a.x = a = {n: 2}; console.log(a.x) console.log(b.x) 输出是什么呢? 真的想明白了吗? 答案 undefined { n : 2} 你真的了解作用域吗 var a = 0, b = 0; function A(a) {
童欧巴
2020/12/15
1.1K0
如何高效删除 JavaScript 数组中的重复元素?
在日常编程中,我们经常会遇到数组去重的问题。今天,我们就来聊聊如何用JavaScript来优雅地解决这个问题。
前端达人
2024/07/20
9820
如何高效删除 JavaScript 数组中的重复元素?
《现代Javascript高级教程》JavaScript数组
在JavaScript中,数组(Array)是一种重要且广泛应用的数据结构,用于存储和操作一组有序的数据。JavaScript提供了丰富的数组方法和属性,使我们能够方便地对数组进行增删改查等操作。本文将详细介绍JavaScript数组的方法API、属性,并探讨如何模拟实现数组的API。此外,还将介绍数组的应用场景,帮助读者更好地理解和应用数组。
linwu
2023/07/31
2470
重新介绍 JavaScript(JS全面系列教程)
为什么会有这一篇“重新介绍”呢?因为 JavaScript 堪称世界上被人误解最深的编程语言。虽然常被嘲为“玩具语言”,但在它看似简洁的外衣下,还隐藏着强大的语言特性。 JavaScript 目前广泛应用于众多知名应用中,对于网页和移动开发者来说,深入理解 JavaScript 就尤有必要。
ihoey
2018/10/31
1.7K0
Web前端-JavaScript基础教程上
JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript是必备的前端技能。
达达前端
2019/07/03
2.3K0
Web前端-JavaScript基础教程上
相关推荐
读书笔记-JavaScript面向对象编程(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验