在scrapy中使用Selector提取数据

news2024/11/24 9:41:52

经院吉吉:

    首先说明一下,在scrapy中使用选择器是基于Selector这个对象滴,selector对象在scrapy中通过XPATH或是CSS来提取数据的,我们可以自己创建selector对象,但在实际开发中我们不需要这样做,因为response内置有selector对象,我们可以直接调用其方法,scrapy源码中相关实现过程如下:

可以看到scrapy.selector模块在selector这个方法中,并且response对象有XPATH和CSS方法,为了更好的运用selector对象,先聊聊XPATH和CSS

XPATH(XML Path Language)

基本语法
name选取name元素的所有子节点
/name选取根元素name
name/ax选取所有属于name的子元素的a元素
//divx选取所有div子元素(不论出现文档任何地方)
name//divx选取所有属于name元素的后代的div元素,不管他出现在name之下的任何位置
//@classx选取所有名为class的属性
/name/div[1]x选取属于name子元素的第一个div元素(注意索引值和列表中的规则不同)
/name/div[last()]x选取name子元素最后一个div元素
/name/div[last()-1]x选取属于article子元素的最后一个div元素
//div[@lang]x选取所有拥有lang属性的div元素
//div[@lang='eng']x选取所有lang属性为eng的div元素
/div/*x选取属性为div元素的所有子节点
//*x选取所有元素
//div[@*]x选取所有带属性的title元素
/div/a | //ulx选取文档中的span和ul元素
//span | //ulx选取文档中的span和ul元素
article/div/p | //spanx选取所有属于article元素的div元素的p元素以及文档中所有的span元素

下面介绍xpath中两个常用的字符串函数

string(arg):返回参数的字符串值,来具体看看实例

1.首先创建一个Selector对象

2.结合上面的表格来看看string()的具体功能

其实很容易看出string()代替了text()功能,(其中extract()方法返回选中内容的Unicode字符串)但是不仅仅如此,再来看看对比图

所以得出结论:如果想得出a中的整个字符串"EXO is handsome",使用text()是不行滴,因为两个字符串在不同元素下,这时就要用到string()进行连接了。

  • contain(str1,str2):判断str1中是否包含str2,返回布尔值。不详细说明,举个简单栗子,大家可以试试:
    sel.xpath(//p[contains(@class,"small")])#选择class属性中包含small的p元素

CSS选择器基本语法

*x选择所有节点
#containerx选择id为container的节点
.containerx选择所有class包含container的节点
li ax选择取所有li下的所有a节点(子节点)
ul + px选取ul后面的第一个p元素(兄弟节点)
div#container > ulx选取id为container的div的第一个ul子元素
ul ~ px选取与ul相邻的所有p元素
a[title]x选取所有title属性的a元素
a[href="http://jobbole.com"]x选取所有href属性为jobble.com值的元素
a[href="jobble"]x选取所有href属性包含jobble的a元素
a[href^="jobble"]选取所有href属性值以jobble开头的a元素
a[href$="jobble"]选取所有href属性值以jobble结尾的a元素
div:not(#container)x选取所有id非container的div属性
li:nth-child(3)x选取第三个li元素
li:nth-child(2n)d第偶数个li元素
div:emptyx选中没有子元素的div元素
div::textx选中div元素的文本节点
[class~=clearfix]x选中包含class属性且值包含clearfix的元素
[class=clearfix]

选中包含class属性且值为clearfix的元素

以上就是xpath和css选择器的简单用法表,欢迎大家指出不足,鄙人虚心请教。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAY10-力扣刷题

1.最后一个单词的长度(简单) 58. 最后一个单词的长度 - 力扣(LeetCode) 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子…

8.华为两台交换机的三种连接方式access 、trunk、undo portswitch

目的:两台三层交换机的三种连接方式 1.access 2.trunk 3.undo portswitch 模拟机不支持此配置,实体机支持 第一种access CE1配置 [~HUAWEI]vlan batch 10 [~HUAWEI]int Vlanif 10 [~HUAWEI-Vlanif10]ip add 10.10.10.1 24 [~HUAWEI]int g1/0/0 [~HUAWE…

空间复杂度 线性表,顺序表尾插。

各位少年,大家好,我是那一脸阳光,本次分享的主题是时间复杂度和空间复杂度 还有顺序表文章讲解和分享,如有不对可以评论区指导。 时间复杂度例题 // 计算斐波那契递归Fib的时间复杂度? long long Fib(size_t N){if(N…

用友U9-UBF自定义报表-打印模板开发学习笔记

自定义报表、打印模板开发学习笔记 一、基础了解 1、UBF开发工具的了解 Ideconfig.xml配置 True:打印、报表设计模式 False:单据设计模式 2、开发环境试用 BE:实体项目 BF:操作项目 SV:服务项目 分析项目&am…

昨天gitee网站访问不了,开始以为电脑哪里有问题了

昨天gitee网站下午访问不了,开始以为是什么毛病。 结果同样的网络,手机是可以访问的。 当然就ping www.gitee.com 结果也下面那样是正常的 以为是好的,但就是访问www.gitee.com也是不行,后来用阿里云的服务器curl访问是下面情况&…

当flex-direction: column时,设置flex:1不生效解决办法

当需求是: 页面纵向排列,且最后一个元素撑满剩余高度 flex:1在横向排列时是可以的,但是纵向排列会失效,此时需要给最后一个子元素设置align-self: stretch;即可撑满剩余高度 <div class"father"><div class"child child1"></div><div…

2021数学建模C题目– 生产企业原材料的订购与运输

C 题——生产企业原材料的订购与运输 思路&#xff1a;该题主要是通过对供应商的供货能力和运送商的运货能力进行估计&#xff0c;给出合适的材料订购方案 程序获取 第一题问题思路与结果&#xff1a; 对 402 家供应商的供货特征进行量化分析&#xff0c;建立反映保障企业生…

配置 python 脚本操作Excel 环境

在已装python的前提下 一、安装依赖库 pip install pandas pip install openpyxl安装完后&#xff0c;可以在 Python 中运行以下命令来查看 pandas 或 openpyxl 的安装路径&#xff1a; import pandas as pd print(pd.__path__)import openpyxl print(openpyxl.__path__)二、测…

Redis数据过期、淘汰策略

数据过期策略&#xff1a; 惰性删除&#xff1a; 设置该key过期时间后&#xff0c;我们不去管它&#xff0c;当需要该key时&#xff0c;我们在检查其是否过期&#xff0c;如果过期&#xff0c;我们就删掉它&#xff0c;反之返回该key。 这种方式对cpu友好&#xff08;只在用…

lambdastreammaven

1.Lambda &#xff08;1&#xff09;Java 8 Lambda 表达式 在 Java 8 以前&#xff0c;若我们想要把某些功能传递给某个方法&#xff0c;总要去写内部类 或匿名内部类类。代码示例&#xff1a; list.sort(new Comparator<User>() { Override public int compare(User …

C语言| 数组倒置算法

数组倒置 方法一 1 定义两个数组a[5] b[5],两个循环变量i j 2 用for循环&#xff0c;把数组a的最后一个数&#xff0c;赋值给数组b第一个元素 3 输出数组b 【程序代码】 #include <stdio.h> int main(void) { int a[5] {11, 22, 33, 44, 55}; int b[5]; …

nodejs从基础到实战学习笔记-nodejs简介

一、Node.js简介 • Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。 • Node采用Google开发的V8引擎运行js代码&#xff0c;使用事件驱动、非阻塞和异步I/O模型等技术来提高性能&#xff0c;可优化应用程序的传输量和规模。 1.1 特性 …

PPT的精细化优化与提升策略

&#x1f44f;&#x1f44f;&#x1f44f;欢迎来到我的博客 ! 亲爱的朋友们&#xff0c;欢迎您们莅临我的博客&#xff01;这是一个分享知识、交流想法、记录生活的温馨角落。在这里&#xff0c;您可以找到我对世界独特视角的诠释&#xff0c;也可以与我一起探讨各种话题&#…

【SAP ME 42】关于SAP ME自定义开发中NWDS中配置JDK

1、NWDS启动配置JDK -vm C:/Java/jdk1.8.0_361/bin 2、开发组件配置JDK

一种简单的图像分析

简介 一种简单的边界分析&#xff0c;通过相邻的像素的灰度进行判断&#xff0c;计算出边界。 测试1 原图 结果 测试2 原图 结果 代码说明 主要的技术在makeTable过程中&#xff0c;这个过程主要执行了以下几步 计算每个像素的灰度计算相邻多个像素的最大灰度差统计灰度差…

GPT-4o目前暂无音频输出的能力

OpenAI的发布会惊艳的操作&#xff0c;近乎实时的语音对话&#xff0c;让很多人向往。 但实际上Chat对话时&#xff0c;尚无输出音频的能力&#xff0c;可能还未开放。 这是国外的一个开发小哥的交流帖子&#xff0c;可能还需要些时日才能用的上实时的音频输出。 不过当前Op…

Python MicroPython库:嵌入式开发

更多Python学习内容&#xff1a;ipengtao.com MicroPython是一种精简高效的Python解释器&#xff0c;专为运行在微控制器和受限环境下设计。它支持大多数Python语法和标准库&#xff0c;同时提供了丰富的硬件控制接口&#xff0c;使开发者能够用Python编写嵌入式应用。MicroPyt…

Windows系统下安装RabbitMQ详细步骤

声明&#xff1a;原文参考链接出自&#xff1a; 如何在Windows系统下安装RabbitMQ_rabbitmq windows安装-CSDN博客 https://zhuanlan.zhihu.com/p/693160757 一、RabbitMQ安装软件资源准备 因为RabbitMQ是Erlang语言开发的&#xff0c;因此安装Erlang环境在进行安装RbbitMQ的…

展讯-GPIO操作

1.修改IO配置 以GPIO92为例 IO配置文件在&#xff1a; bsp/kernel/kernel4.14/arch/arm64/boot/dts/sprd/uis8581e5h10.dts bsp/bootloader/u-boot15/board/spreadtrum/uis8581e5h10/pinmap-sp9863a.c 配置 按上述内容&#xff0c;配置IO口 编译之前查看硬件GPIO&#xff0c…

【Java】已解决java.io.UnsupportedEncodingException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.io.UnsupportedEncodingException异常 在Java编程中&#xff0c;java.io.UnsupportedEncodingException异常通常发生在尝试使用java.nio.charset.Charset或者它的旧版本…