lxml支持哪些选择器

lxml是一个Python库,它提供了一种简单而高效的方式来解析和操作XML和HTML文档,在lxml中,选择器是用来定位和提取XML或HTML文档中特定元素的模式,lxml支持多种选择器,包括元素选择器、属性选择器、文本选择器等。

lxml支持哪些选择器
(图片来源网络,侵删)

1. 元素选择器:元素选择器用于选择XML或HTML文档中的特定元素,它可以匹配一个或多个元素,并返回匹配的元素列表,要选择所有``元素,可以使用以下代码:

from lxml import etree

html = """
<html>
    <body>
        <div class="container">...</div>
        <div class="header">...</div>
        <div class="footer">...</div>
    </body>
</html>
"""
root = etree.fromstring(html)
div_elements = root.xpath("//div")
for div in div_elements:
    print(etree.tostring(div, encoding='unicode'))

输出结果将是匹配到的``元素的XML表示。

2. 属性选择器:属性选择器用于选择具有特定属性的元素,它使用方括号语法指定属性名,并可以选择特定的属性值,要选择所有具有`class`属性且值为"container"的元素,可以使用以下代码:

lxml支持哪些选择器
(图片来源网络,侵删)
from lxml import etree

html = """
<html>
    <body>
        <div class="container">...</div>
        <div class="header">...</div>
        <div class="footer">...</div>
    </body>
</html>
"""
root = etree.fromstring(html)
div_elements = root.xpath("//div[@class='container']")
for div in div_elements:
    print(etree.tostring(div, encoding='unicode'))

输出结果将是匹配到的具有`class`属性且值为"container"的``元素的XML表示。

3. 文本选择器:文本选择器用于选择包含特定文本的元素,它使用单引号或双引号将文本括起来,要选择所有包含"Hello"文本的``元素,可以使用以下代码:

from lxml import etree

html = """
<html>
    <body>
        <p>Hello, World!</p>
        <p>This is a paragraph.</p>
        <p>Another paragraph with "Hello" inside.</p>
    </body>
</html>
"""
root = etree.fromstring(html)
p_elements = root.xpath('//p[contains(text(), "Hello")]')
for p in p_elements:
    print(etree.tostring(p, encoding='unicode'))

输出结果将是匹配到的包含"Hello"文本的``元素的XML表示。

lxml支持哪些选择器
(图片来源网络,侵删)

4. XPath表达式:XPath是一种用于在XML文档中定位元素的查询语言,lxml支持使用XPath表达式来选择元素,要选择所有父元素为``的``元素,可以使用以下代码:

from lxml import etree

html = """
<html>
    <body>
        <p>Paragraph 1</p>
        <p>Paragraph 2</p>
    </body>
</html>
"""
root = etree.fromstring(html)
paragraphs = root.xpath("//body/p")
for p in paragraphs:
    print(etree.tostring(p, encoding='unicode'))