详解xpath

什么是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定位器进行标签定位
源码:

详解xpath_第1张图片

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()')

参考资料:菜鸟教程

你可能感兴趣的:(py爬虫学习)