python爬虫:scrapy框架Scrapy类与子类CrawlSpider

简介: python爬虫:scrapy框架Scrapy类与子类CrawlSpider

Scrapy类

name 字符串,爬虫名称,必须唯一,代码会通过它来定位spider


allowed_domains 列表,允许域名

没定义 或 空: 不过滤,

url不在其中: url不会被处理,

域名过滤功能: settings中OffsiteMiddleware


start_urls:列表或者元组,任务的种子


custom_settings:字典,覆盖项目中的settings.py


crawler:Crawler 实例


settings:Settings 实例


logger:记录日志


from_crawler():类方法,创建spider时调用


start_requests():必须返回一个可迭代对象

 

make_requests_from_url(url):默认parse回调, dont_filter=True,不过滤url


parse(response): 默认回调方法, 返回值只能是Request, 字典和item对象,或者它们的可迭代对象


log(message[, level, component]):对logger的包装


closed(reason):spider结束时调用


参考文章

scrapy系列(三)——基础spider源码解析


CrawlSpider类

CrawlSpider继承于Spider,为全站爬取而生


rules:列表,元素为Rule类的实例,采集行为。类似Django的url匹配

如果有多个rule都匹配同一个链接,那么位置下标最小的一个rule将会被使用。


要request的地址和allow_domain里面的冲突,从而被过滤掉。

可以停用过滤功能。

yield Request(url, callback=self.parse_item, dont_filter=True)


__init__:执行了_compile_rules方法


parse:重写默认回调方法,调用方法_parse_response


parse_start_url:处理parse返回的response


_requests_to_follow:response中解析出目标url,并将其包装成request请求


_response_downloaded:_requests_to_follow的回调方法,作用就是调用_parse_response方法


_parse_response:spider._follow_links的值是从settings的CRAWLSPIDER_FOLLOW_LINKS值获取到的。


_compile_rules:将rule中的字符串表示的方法改成实际的方法


from_crawler:


Rule类

link_extractor:Link Extractor实例,解析规则。


callback:方法或字符串,回调方法,慎用parse做为回调方法


cb_kwargs:字典,用于给callback方法传递参数


follow:布尔对象,表示是当前response否继续采集。如果callback是None,那么它就默认为True,否则为False。


process_links:在crawlspider中的_requests_to_follow方法中被调用,元素为Link的列表作为参数,返回值也是一个元素为Link的列表,目标url是相对的链接,那么scrapy会将其扩展成绝对的


process_request:处理request


CrawlSpider样例


import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com']
    rules = (
        # 提取匹配 'category.php' (但不匹配 'subsection.php') 的链接并跟进链接(没有callback意味着follow默认为True)
        Rule(LinkExtractor(allow=('category\.php', ), deny=('subsection\.php', ))),
        # 提取匹配 'item.php' 的链接并使用spider的parse_item方法进行分析
        Rule(LinkExtractor(allow=('item\.php', )), callback='parse_item'),
    )
    def parse_item(self, response):
        self.log('Hi, this is an item page! %s' % response.url)
        item = scrapy.Item()
        item['id'] = response.xpath('//td[@id="item_id"]/text()').re(r'ID: (\d+)')
        item['name'] = response.xpath('//td[@id="item_name"]/text()').extract()
        item['description'] = response.xpath('//td[@id="item_description"]/text()').extract()
        return item

参考文章:

scrapy系列(四)——CrawlSpider解析


Spiders-爬取规则(Crawling rules)

相关文章
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
1523 0
分布式爬虫框架Scrapy-Redis实战指南
|
12月前
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
7月前
|
缓存 供应链 芯片
电子元件类商品 item_get - 商品详情接口深度分析及 Python 实现
电子元件商品接口需精准返回型号参数、规格属性、认证及库存等专业数据,支持供应链管理与采购决策。本文详解其接口特性、数据结构与Python实现方案。
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
1512 31
|
数据采集 存储 Web App开发
轻量级爬虫框架Feapder入门:快速搭建企业级数据管道
本教程基于Feapder框架,讲解如何构建轻量级爬虫采集豆瓣电影数据。通过配置代理IP、Cookie与User-Agent,实现企业级数据管道能力,包括动态请求与信息提取(如电影名称、导演、演员等)。适合具备Python基础及爬虫原理知识的读者,提供从环境搭建到代码实现的完整流程,并分析常见错误与解决方法,助力高效开发。
579 1
轻量级爬虫框架Feapder入门:快速搭建企业级数据管道
|
11月前
|
数据采集 存储 监控
Scrapy框架下地图爬虫的进度监控与优化策略
Scrapy框架下地图爬虫的进度监控与优化策略
|
11月前
|
数据采集 存储 NoSQL
分布式爬虫去重:Python + Redis实现高效URL去重
分布式爬虫去重:Python + Redis实现高效URL去重
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
732 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
310 11
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
321 1

推荐镜像

更多