第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > xpath选择器和css选择器的用法

xpath选择器和css选择器的用法

时间:2024-05-16 12:46:34

相关推荐

xpath选择器和css选择器的用法

目标:xpath选择器和css选择器的用法

前文使用scrapy爬虫框架用到selector选择器了,本文补充两种选择器的使用细节

xpath选择器语法css选择器语法掌握常用的xpath选择器和css选择器

知识就像是抽象出来的规则。学习在大脑中分类。

内容:xpath选择器语法

XPath 使用路径表达式来选取 XML或HTML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

选取节点:xml中的节点是以树结构(二叉树的树)来命名的,和HTML中的元素,标签是类似的。

选取节点用到的是表达式,表达式包括符号和元素。

符号的定义:

nodename:选取该节点的所有子节点。

/:从根节点选-

//: 从全局选

.: 从当前节点选

..: 从父结点选

@: 从包含此属性的节点中选

通配符:*:匹配任何元素节点。@*: 匹配任何属性节点。

典型事例一

文本:text(),选取文本。xpath选择器语法本无文本节点。

1)表达式:'bookstore',等价于选取bookstore元素的所有子节点。

2)表达式:'//book/title/text()',选取文中所有book节点下的title中的文本。

3)表达式:'//book/title/@lang',选取文中所有book节点下的title的lang属性的值。

4)表达式:'//title[@lang='eng']]/text()',选取文中所有具有节点下的title

5)表达式:'//@lang',选取名为 lang 的所有属性。

6)表达式:'/bookstore/*',选取 bookstore 元素的所有子元素。

7)表达式:'//*',选取文档中的所有元素。

8)表达式:'//title[@*]',选取所有带有属性的title 元素。

常用xpath选择器表达式–HTLML(收藏)

例如:response.xpath("//a/@href"):选取所有a标签下href属性的值,返回选择器列表selectorlist.

读书百遍其意自现:

response.xpath(’//title/text()’)

人话:选取所有title下的文本;

response.xpath(’//div[@id=“images”]/a/text()’).get()

人话:选取所有id为images的div标签中a标签的文本。

response.xpath(’//base/@href’).get()

人话:选取所有base标签中的href属性的值:

response.xpath(’//a[contains(@href, “image”)]/@href’).getall()

人话:包含某标签img,具有某属性的标签+属性值

response.xpath(’//a[contains(@href, “image”)]/img/@src’).getall()

人话:属性标签+标签+属性值

归根结底:重要是是落脚点是选择标签、选择标签的属性值,还是选择文本。

选择标签,以标签名称结尾,选择属性值以@属性结尾,选择文本以text()结尾。

再则,是选择全局,部分(特定位置或特定属性)。

最后,检查一遍,看能不能读通,是否完备没有歧义。

内容:css选择器语法

同理。css选择器也有语法,与xpath的区别是没有用路径形式,个人感觉还是xpath简单一点。读书百遍其意自现!

::text取文本节点元素

文本节点没有属性,属性值已经是字符串值,也没有子节点。

*::text选择所有子代文本节点

foo::text空文本元素标签。没有text的标签,比如img标签,确取tex,getall返回空列表,get可设置默认结果。

意味着 .css(‘foo::text’).get() 即使元素存在,也无法返回“无”。

获得属性的值

::attr(name)取属性值

a::attr(href)选择 href 子链接

response.css('a::attr(href)')

.attrib['href']

获取属性,得到字典:

response.css(‘base’).attrib

{‘href’: ‘/’}

获取属性,得到字典里的值。

response.css(‘base’).attrib[‘href’]

‘/’

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。