在scrapy中使用Selector提取数据

经院吉吉:

    首先说明一下,在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.mzph.cn/web/32024.shtml

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

相关文章

御道源码(ruoyi-vue-pro)个人使用小结

御道源码(ruoyi-vue-pro)个人使用小结 一、Git地址 1、平台项目简介及地址 2、开发指南,如图所示,部分功能需要收费,可自行了解 二、项目文件夹结构示例: 三、技术介绍 1.基于 Spring Boot MyBatis P…

Java字符串连接符拼接操作

在Java的算术运算符中的加法符号“ ”,可以用来进行算术运算,也可以用来当作连接符进行字符串的拼接。 当“ ”操作中出现字符串时,这个“ ”是字符串连接符,而不是运算符了。 会将前后的数据进行拼接在一起,并产生…

dll丢失应该怎么解决,总结5种解决DLL丢失问题的方法

在数字时代,我们与计算机的每一天都密不可分。然而,就像所有技术产品一样,我们的计算设备也时不时地会出现一些问题,让人头疼不已。就在上周,我遭遇了一个令人崩溃的技术挑战——DLL文件丢失。这个看似微不足道的小问题…

转--基于OpenEuler的Docker容器安装使用

/usr/sbin/sshd执行以下命令查看ssh服务是否已经开始监听22端口: netstat -tuln | grep :22看到以下输出证明ssh服务已启动: [rootmaster /]# netstat -tuln | grep :22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN …

【MySQL】 -- 事务

如果对表中的数据进行CRUD操作时,不加控制,会带来一些问题。 比如下面这种场景: 有一个tickets表,这个数据库被两个客户端机器A和B用时连接对此表进行操作。客户端A检查tickets表中还有一张票的时候,将票出售了&#x…

OpenCloudOS系统上安装Java环境

在腾讯云OpenCloudOS系统上安装Java环境,可以使用yum包管理器进行安装。以下是安装Java环境的步骤和示例代码: 首先打开终端。 执行以下命令以更新yum包索引: sudo yum update 安装OpenJDK Java环境,可以选择安装Java 8或者更…

【Linux基础IO】深入理解缓冲区

缓冲区在文件操作的过程中是比较重要的,理解缓冲区向文件刷新内容的原理可以更好的帮助我们更深层的理解操作系统内核对文件的操作。 FILE 因为IO相关函数与系统调用接口对应,并且库函数封装系统调用,所以本质上,访问文件都是通过…

ES数值类型慢查询优化

现象 某个查询ES接口慢调用告警,如图,接口P999的耗时都在2500ms: 基本耗时都在查询ES阶段: 场景与ES设定 慢调用接口为输入多个条件分页查询,慢调用接口调用的ES索引为 express_order_info,该索引通过DTS(数据同步…

STM32人工智能检测-筛选机器人

前言 本文描述了一种使用STM32进行机器人筛选的办法。筛选对象是我的粉s,删选办法是瞪眼法。 问题现象 每次当我的STM32 向外界发出一篇新的的报文,总能在1H之内得到focus,格式如下 [title][body][tail]于是我对各个focus 我报文的对象进…

Redis数据过期、淘汰策略

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

浏览器/H5复制链接功能

方法1:execCommand copyLink(){//复制链接--execCommandlet input document.createElement(input); //创建一个input标签input.value this.shareForm.url; //复制的内容,没有先获取标签document.body.appendChild(input);//将input添加的document中in…

C# OCCT Winform 界面搭建

目录 1.创建一个WInform项目 2.代码总览 代码解析 3.添加模型到场景 4.鼠标交互 1.创建一个WInform项目 2.代码总览 using Macad.Occt.Helper; using Macad.Occt; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting.Co…

PHP学习总结-入门篇

PHP简介 PHP (Hypertext Preprocessor),即“超文本预处理器”。PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP语法吸收了C语言、Java和Perl的特点,便于学习。PHP 是开源免费的,主要适用于Web开发领域,使用广泛。…

vue简介实例

先看样式 再看代码 <div v-else class"relative mt-4 h-44 cursor-pointer overflow-hidden rounded-xl"><divclass"absolute flex h-44 w-full blur-lg":style"{ backgroundImage: url(${currentSongList.list[0]?.coverImgUrl}) }"…

1394. 找出数组中的幸运数

在整数数组中&#xff0c;如果一个整数的出现频次和它的数值大小相等&#xff0c;我们就称这个整数为「幸运数」。 给你一个整数数组 arr&#xff0c;请你从中找出并返回一个幸运数。 如果数组中存在多个幸运数&#xff0c;只需返回 最大 的那个。如果数组中不含幸运数&#…

STM32单片机USART串口收发数据包

文章目录 1. 串口通信 1.1 串口初始化 1.2 库函数 2. 串口收发HEX数据包 2.1 Serial.c 2.2 Serial.h 2.3 main.c 3. 串口收发文本数据包 3.1 Serial.c 3.2 Serial.h 3.3 main.c​​​​​​​ 1. 串口通信 对于串口通信的详细​​​​​​​解析可以看下面这篇文章…

Java 图书管理系统功能实现

承接上一篇的 图书管理系统 &#xff0c;点击这里跳转 要实现什么功能 1.查找图书 2.增加图书 3.删除图书 4.展示图书 5.退出系统 6.借阅图书 7.归还图书 1.查找图书 要完成这个功能需要以下步骤 输入书名&#xff0c; 然后在书架里找到这本书打印出来&#xff0c;…

05-5.3.2_2 二叉树的线索化

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

创建web服务器

1 创建返回固定数据的web服务器&#xff1a;通过 localhost:8000/index.html 进行访问 import socketif __name__ __main__:# socket.AF_INET :IPv4 地址 socket.SOCK_STREAM:TCP链接tcp_server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口号复用…

04_FFmpeg常用API及内存模型

【说明】课程学习地址&#xff1a;https://ke.qq.com/course/468797 FFmpeg内存模型 FFmpeg内存模型 int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);问题(数据的申请和释放): …