使用lxml提取HTML/XML 数据

  1. demo
    1. 获取标签元素内容为空的两种不同效果:

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
html = '''
<html lang="en">
<head>
<meta charset="UTF-8">
<title class="sub_title">Title</title>
</head>
<body>
<div class="none">
<a href ="#">Spaceack's code</a>
</div>
<div class="link">
<a href ="http://spaceack.com">Spaceack's blog</a>
</div>
</body>
</html>
'''

from lxml import etree
tree = etree.HTML(html)
# 获取class为link的a标签的元素内容
a_content = tree.xpath('.//div[@class="link"]/a/text()')
print(a_content)
# ["Spaceack's blog"]

# 使用attrib获取标签的属性值
href_element = tree.xpath('.//div[@class="link"]/a')
print(href_element)
# [<Element a at 0x7ff3571a4d80>]
href = href_element[0].attrib.get('href')
print(href)
# http://spaceack.com

获取标签元素内容为空的两种不同效果:

  • demo
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from lxml import etree
    # 可见第二个标签 td 元素内容为空
    tree = etree.HTML("<th>水果</th><td>苹果</td><th>价格</th><td></td>")
    key = tree.xpath("//th/text()")
    value = tree.xpath("//td/text()")
    print(key, value)
    '''
    ['水果', '价格'] ['苹果']
    '''
    如果想让价格使用None或空字符串''来占位,可以这样做:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
key = tree.xpath("//th")
value = tree.xpath("//td")

key = [item.text for item in key]
value = [item.text for item in value]
print(key, value)
'''
['水果', '价格'] ['苹果', None]
'''
key = ["" if item.text==None else item.text for item in key]
value = ["" if item.text==None else item.text for item in value]
print(key, value)
'''
key ['水果', '价格']
['水果', '价格'] ['苹果', '']
'''

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [email protected]com

文章标题:使用lxml提取HTML/XML 数据

文章字数:323

本文作者:Spaceack

发布时间:2017-06-19, 12:00:00

最后更新:2020-02-14, 14:52:46

原始链接:http://spaceack.com/2017/06/19/2017-06-19-python-lxml-shippet/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录