目标: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’]
‘/’
如果觉得《xpath选择器和css选择器的用法》对你有帮助,请点赞、收藏,并留下你的观点哦!