使用xpath helper或者是chrome中的copy xpath都是从element中提取的数据,但是爬虫获取的是url对应的响应,往往和elements不一样
1 xpath如何获取文本,如何获取任意标签下的文本
"a/text()" 获取a下的文本
"a//text()" 获取a下的所有标签的文本
"//a[text()="下一页"]" 选择文本为下一页这三个字的的a标签
2 @ 符号 xpath如何获取属性,如何对标签进行定位
a/@href
//ul[@id="detail-list"]
3 //
在xpath最前面表示从当前html中任意位置开始选择
li//a
表示的是li下任何一个标签
xpath节点选择语法
|
|
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有的子节点 |
. | 选取当前节点 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑与他们的位置 |
/ | 从根节点选取 |
… | 选取当前节点的父节点 |
@ | 选取属性class |
如:获取某div下的a标签 获取倒数第二页(xpath语法的最后一页用的是last())
获取页码小于4的
获取兄弟节点的标签
如获取兄弟标签的第一个dd标签
following-sibling::dd[1]
pip install lxml
lxml使用注意点 使用xpath得到的是一个列表类型
1 lxml能够修正HTML代码,但是可能会改错了
2 使用etree.tostring观察修改之后的html的样子,根据修改之后的html字符串写xpath
3 lxml 能够接受bytes和str的字符串
from lxml import etree
element = etree.HTML(bytes、str) #把字符串转化为element对象
etree.tostring(element) #把element对象转化为字符串
element.xpath("xpath_str")