04xpath
数据提取
lxml和xpath
lxml是Python的第三方解析库,完全使用Python语言编写,它对Xpath表达式提供了良好的支持,能够了高效地解析HTML/XML文档。
XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言,同样适用于HTML文档的检索。
安装:pip install lxml
使用流程
1.导入模块:from lxml import etree
2.创建解析对象:
- 将本地的html源码数据加载到etree对象中:
parse_html = etree.parse(filepath)
- 从互联网上获取的数据源码加载到etree对象中:
parse_html = etree.HTML(conetent_text)
3.xpath表达式书写 xpath返回一个列表
r_list = parse_html.xpath('xpath语法')
xpath语法
| 表达式 | 描述 |
|---|---|
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
| / | 某节点下的某个节点 |
| @ | 选取某个节点的属性 |
| text() | 选取文本 |
| . | 当前节点 |
| ... | 父节点 |
谓语:谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中
| 表达式 | 描述 |
|---|---|
| /bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 |
| /bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
| //title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 |
/表示从根节点开始定位,也表示一个层级
//表示多个层级,也表示从任意层级开始定位
下面三种方式的作用(结果)相同:
r = parse_htmlparse_html.xpath('/html/body/div')
r = parse_html.xpath('/html//div')
r = parse_html.xpath('//div')
- 属性定位:
r = parse_html.xpath('//div[@class='song']')
- 索引定位:从1开始
r = parse_html.xpath('//div[@class='song']/p[1]')
-获取文本:
/text() 获取标签中直系的文本内容
//text() 获取标签下的所有文本内容
-获取属性值:
/@attrName
例: r = tree.xpath('/div[@class='song']/img/@src')

浙公网安备 33010602011771号