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

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

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

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

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


内容:xpath选择器语法

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

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

  1. 选取节点用到的是表达式,表达式包括符号和元素。
    符号的定义:
    nodename:选取该节点的所有子节点。
    /:从根节点选-
    //: 从全局选
    .: 从当前节点选
    ..: 从父结点选
    @: 从包含此属性的节点中选
    通配符:*:匹配任何元素节点。@*: 匹配任何属性节点。

  2. 典型事例一
    文本: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 元素。

  3. 常用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’: ‘http://example.com/’}
获取属性,得到字典里的值。
response.css(‘base’).attrib[‘href’]
‘http://example.com/’


猜你喜欢

转载自blog.csdn.net/beauthy/article/details/123812194