Python lxml使用XPath解析Html
半野

1.安装 lxml

直接 pip 安装

1
pip install lxml

image.png

2.构建 DOM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from lxml import etree

html="""
<html>
<body>
<form>
<div id="myDiv">
<h3>text</h3>
<ul id="china">
<li>ul1 li1</li>
<li>ul1 li2</li>
</ul>
<ul id="england">
<li>england li1</li>
<li>england li2</li>
</ul>
</div>
</form>
<body>
<html>"""

dom = etree.HTML(html)

3.XPath 查询

3.1.获取当前节点及其内容

代码:

1
2
3
4
ele = dom.xpath('//ul[1]/li')[0] 
con = etree.tostring(ele).decode('utf-8')
# 打印当前节点及其内容
print(str(con))

结果:

image.png

3.2.获获取当前节点的 tagName 和 id 属性

代码:

1
2
3
4
5
ele = dom.xpath('//ul')[0] 
# 打印当前节点的tagName
print(ele.tag)
# 打印当前节点的id
print(ele.attrfb.get('id'))

结果:

image.png

3.3.获取节点的内容

代码:

1
2
3
ele = dom.xpath('//ul[@id="china"]/li')[0] 
# 打印当前节点的内容
print(ele.text)

结果:

image.png

4.注意

  1. 使用 lxml 的 xpath 得到的结果总是 list 类型
  2. 若标签 tag.text 仅仅能获得处于 tag 下而不处于 tag 的子节点下的内容,例如 Html 代码如下:
1
2
3
4
5
6
<div id="div1">
div1.text
<div id="div2">
......
</div>
</div></code><

获取 id=”div1” 的内容,只能得到 div1.text,而不会得到 div2 元素及其内容。

由 Hexo 驱动 & 主题 Keep
总字数 105.7k 访客数 访问量