Scrapy 爬虫模板--XMLFeedSpider
时间:2022-07-24
本文章向大家介绍Scrapy 爬虫模板--XMLFeedSpider,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
XMLFeedSpider 主要用于 RSS 的爬取。RSS 是基于 XML 的信息局和技术。这篇文章的最后一下小结我会利用爬取经济观察网 RSS 的例子来讲解它的具体用法。现在我们先看一下 XMLFeedSpider 的常用属性。
零、常用属性
- iterator:迭代器,主要用来分析 RSS 源,可用的迭代器有三种:
- iternode:高性能的正则表达式迭代器,是默认迭代器
- html:加载所有的 DOM 结构进行分析,但是如果数据量巨大会产生性能问题。唯一的优点是处理不合理的标签会很有用
- xml:和 html 迭代器类似。
- itertag:指定需要迭代的节点
- namespaces:定义处理文档时所需要使用的命名空间。
一、常用方法
- adapt_response(response):在处理分析 Response 前触发,主要用于修改 Response 的内容,返回类型为 Response 。
- parse_node(response,selectot):怕渠道匹配的节点时触发这个方法处理数据。这个方法必须在项目代码中实现,否则爬虫不工作,并且必须返回 Item、Request 或者包含二者的迭代器。
- 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()
- 10行代码,Python实现爬取淘宝/天猫评论
- 4.请求安全-- 结合使用的安全优势总结
- TensorFlow强化学习入门(4)——深度Q网络(DQN)及其扩展
- 3.请求安全-- 如何验证请求的唯一性
- 2.请求安全-- MD5的必要性以及实际应用场景
- 1.请求安全-- 一个简单的 单设备登录 单点登录
- phalapi-进阶篇3(自动加载和拦截器)
- phalapi-进阶篇2(DI依赖注入和单例模式)
- 基于PhalApi的DB集群拓展 V0.1bate
- phalapi-进阶篇1(Api,Domain,和Model)
- 你不知道的Javascript:有趣的setTimeout
- phalapi-入门篇5(数据库操作和Model层)
- HTML5.2新特性解读
- phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaScript编码规范
- HTML编码规范
- postgres数据库不能用ip地址访问的问题
- Flutter基础widgets教程-ButtonBar篇
- 如何在linux服务上创建samba文件共享服务
- Salesforce Javascript(二) 箭头函数
- java面试基础部分;
- 7-2.表单-HTML基础
- 如何在github上传多个项目
- Flutter基础widgets教程-Card篇
- Springboot热部署,使用spring-boot-devtools、springloaded两种方式进行热部署
- SpringBoot中jsp里面的静态资源js、css、images访问不到解决办法
- spring boot jsp里面的静态资源访问不到解决办法
- Flutter基础widgets教程-Center篇
- 如何上传项目到GitHub