什么是xpath
xpath其实就是一个html标签定位器,通过一些表达式定位到你想提取信息的标签位置,从而方便做进一步解析和提取。
xpath解析流程
1. 通过etree.HTML("网页源码")方法获取一个etree对象
2. 使用xpath定位器进行标签定位
3. 使用xpath进行属性和文本的提取
xpath表达式
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点来选择元素。 |
// | 从匹配选择的当前节点来对文档中的节点进行选择。 |
. | 选取当前节点。 |
… | 选取当前节点的父节点。 |
@ | 选取属性。 |
例如
html源码
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
路径表达式 | 选取结果 |
---|---|
bookstore | 选取bookstore的所有子节点 |
/bookstore | 选取根节点bookstore |
bookstore/book | 选取以bookstore为根的所有book子元素 |
//book | 选取所有的book子元素,而不管他们在文档中的位置 |
bookstore//book | 选取属于bookstore元素的后代的所有book元素,而不管他们位于bookstore下的什么位置 |
//@lang | 选取名为 lang 的所有属性。 |
通配符
通配符 | 描述 |
---|---|
* | 匹配任何元素结点 |
@* | 匹配任何属性结点 |
node() | 匹配任何类型结点 |
例如
路径表达式 | 选取结果 |
---|---|
/bookstore/* | 选取 bookstore 元素的所有子元素。 |
//* | 选取文档中的所有元素。 |
//title[@*] | 选取所有带有属性的 title 元素。 |
以爬取豆瓣书籍top250实战项目为例:
1、通过etree.HTML(“网页源码”)方法获取一个etree对象
response = requests.get(url, headers=headers, timeout=10)
html = etree.HTML(response.text)
2、使用xpath定位器进行标签定位
源码:
books = html.xpath('//tr[@class="item"] ')
3、使用xpath进行属性和文本的提取
html源码:
<div class="pl2"> <a href="url" title="红楼梦">红楼梦 </div>
xpath提取书名
books_name = html.xpath('//div[@class="pl2"]/a/@title')
html源码:
<span class="rating_nums">9.6</span> text()方法输出该html标签的文本信息
xpath提取评分
rating_nums = html.xpath('//span[@class="rating_nums"]/text()')
参考资料:菜鸟教程