专栏首页喵叔's 专栏Scrapy 爬虫模板--XMLFeedSpider

Scrapy 爬虫模板--XMLFeedSpider

XMLFeedSpider 主要用于 RSS 的爬取。RSS 是基于 XML 的信息局和技术。这篇文章的最后一下小结我会利用爬取经济观察网 RSS 的例子来讲解它的具体用法。现在我们先看一下 XMLFeedSpider 的常用属性。

零、常用属性

  1. iterator:迭代器,主要用来分析 RSS 源,可用的迭代器有三种:
  • iternode:高性能的正则表达式迭代器,是默认迭代器
  • html:加载所有的 DOM 结构进行分析,但是如果数据量巨大会产生性能问题。唯一的优点是处理不合理的标签会很有用
  • xml:和 html 迭代器类似。
  1. itertag:指定需要迭代的节点
  2. namespaces:定义处理文档时所需要使用的命名空间。

一、常用方法

  1. adapt_response(response):在处理分析 Response 前触发,主要用于修改 Response 的内容,返回类型为 Response 。
  2. parse_node(response,selectot):怕渠道匹配的节点时触发这个方法处理数据。这个方法必须在项目代码中实现,否则爬虫不工作,并且必须返回 Item、Request 或者包含二者的迭代器。
  3. process_result(response,result):返回爬取结果时触发,用于将爬取结果传递给框架核心处理前来做最后的修改。

案例

下面我们通过爬取经济观察网的 RSS 来看看 XMLFeedSpider 在实战中怎么用。首先我们来看一下经济观察网的 RSS 结构:

从图中可以看出对我们有用的信息都位于 item 标签之间,那么这个标签之间的内容就是我们需要抓取的东西,这个标签被称为节点。

# -*- coding: utf-8 -*-
from scrapy.spiders import XMLFeedSpider
from ..items import RsshubItrem


class RsshubSpider(XMLFeedSpider):
    name = 'rsshub'
    allowed_domains = ['rsshub.app']
    start_urls = ['https://rsshub.app/eeo/01']
    iterator = 'iternodes'
    itertag = 'item'

    def parse_node(self, response, selector):
        item = RsshubItrem()
        item['title'] = selector.css("title::text").extract_first()
        item['public_date'] = selector.css("publicDate::text").extract_first()
        item['link'] = selector.css("link::text").extract_first()
        return item

        import scrapy


class RsshubItrem(scrapy.Item):
    title = scrapy.Field()
    public_date = scrapy.Field()
    link = scrapy.Field()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 正确调用事件处理程序

    不管是刚接触 C# 还是已经具有多年开发经验的大部分人会觉得事件处理很简单,只需要把事件定义好然后在需要的时候出发它就可以了。其实这种想法是错误的,这里面有很多...

    喵叔
  • Scrapy Pipeline

    Scrapy 中的 Pipeline 为我们提供了处理数据的功能,在实际开发中我们经常使用它来清洗/验证数据、去重和数据保存。在一个项目中会存在多种 Pipel...

    喵叔
  • TensorFlow学习笔记--CIFAR-10 图像识别

    是用于普通物体识别的小型数据集,一共包含 10个类别 的 RGB彩色图片(包含:(飞机、汽车、鸟类、猫、鹿、狗、蛙、马、船、卡车)。图片大小均为 3232像素*...

    喵叔
  • 基于汇编的 C/C++ 协程 - 切换上下文

    既然本系列讲的是基于汇编的 C/C++ 协程,那么这篇文章我们就来讲讲使用汇编来进行上下文切换的原理。

    amc
  • 系统架构师论文-论行业应用软件系统的开发规划

    cwl_java
  • Python-并发下载-gevent库

    协程,就是同时开启多个任务,但一次只顺序执行一个。等到所执行的任务遭到阻塞,就切换到下一个任务继续执行,从而节省阻塞所占用的时间。

    小团子
  • 云通信IM-离线推送收不到问题分析

    2.发送消息时MsgLifeTime设置的值是否为0,若设置该字段为0,则消息只发在线用户,不保存离线

    liyao
  • 高通量计算框架HTCondor(二)——环境配置

    HTCondor是开源跨平台的分布式计算框架,在其官网上直接提供了源代码和Windows、Linux以及MacOS的安装包。因为平台限制的原因,在Windows...

    charlee44
  • 浅谈numpy中np.array()与np.asarray的区别以及.tolist

    array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但...

    砸漏
  • InnoDB 缓冲池大小调整

    从MySQL 5.7.5开始,我们可以动态修改InnoDB Buffer Pool的大小。这个新特性同时也引入了一个参数--innodb_buffer_pool...

    田帅萌

扫码关注云+社区

领取腾讯云代金券