本套课在线学习视频(网盘地址,保存到网盘即可免费观看):

https://pan.quark.cn/s/0d9ce13eec10

XPath是一种强大的查询语言,用于在XML和HTML文档中定位和选择节点。本文将详细介绍XPath的基础知识及其在数据分析中的应用,并通过实例分析帮助读者掌握XPath的使用技巧。

00:00 - XPath语法及其在数据分析中的应用

XPath的基本概念

XPath的基本单元是节点,包括元素、属性、文本等七种类型。文档以树状结构呈现,其中根节点(root)代表最顶层。XPath提供了多种方式来选取节点:

  • 直接引用节点名称:通过节点名称直接选取元素。
  • 从根或任意位置选取:使用 / 从根节点开始选取,使用 // 从任意位置选取。
  • 选取当前或父节点:使用 . 选取当前节点,使用 .. 选取父节点。
  • 获取属性:使用 @ 符号获取属性值。

示例代码

from lxml import etree

# 示例XML文档
xml_content = """
<root>
    <bookstore>
        <book>
            <title lang="en">Harry Potter</title>
            <price>29.99</price>
        </book>
        <book>
            <title lang="en">Learning XML</title>
            <price>39.95</price>
        </book>
    </bookstore>
</root>
"""

# 解析XML文档
tree = etree.fromstring(xml_content)

# 选取所有book节点
books = tree.xpath('//book')
for book in books:
    print(book.xpath('title/text()'))  # 输出: ['Harry Potter', 'Learning XML']

# 选取第一个book节点的title
first_book_title = tree.xpath('//book[1]/title/text()')
print(first_book_title)  # 输出: ['Harry Potter']

# 选取所有具有lang属性的title节点
titles_with_lang = tree.xpath('//title[@lang]')
for title in titles_with_lang:
    print(title.text)  # 输出: Harry Potter, Learning XML

03:23 - 深入理解XPath表达式及其应用

XPath表达式的基本语法

XPath表达式通过不同的符号来选取元素和属性:

  • /:从根节点开始选取。
  • //:从任意位置选取。
  • *:选取所有元素。
  • @:选取属性。

进一步筛选元素

通过位置、名称和属性值可以进一步筛选选取的元素:

  • 位置:使用 [n] 选取第n个元素。
  • 名称:使用 [@name='value'] 选取具有特定属性值的元素。
  • 属性值:使用 [@attribute='value'] 选取具有特定属性值的元素。

组合多个路径表达式

通过组合多个路径表达式可以实现更复杂的查询需求。

示例代码

# 选取所有价格大于30的book节点
expensive_books = tree.xpath('//book[price > 30]')
for book in expensive_books:
    print(book.xpath('title/text()'))  # 输出: ['Learning XML']

# 选取所有具有lang属性且值为'en'的title节点
titles_with_lang_en = tree.xpath('//title[@lang="en"]')
for title in titles_with_lang_en:
    print(title.text)  # 输出: Harry Potter, Learning XML

综合示例

以下是一个综合示例,展示了如何使用XPath进行复杂查询:

# 选取所有具有lang属性且值为'en'的title节点,并且其父节点book的价格大于30
titles_with_lang_en_and_price_gt_30 = tree.xpath('//book[price > 30]/title[@lang="en"]')
for title in titles_with_lang_en_and_price_gt_30:
    print(title.text)  # 输出: Learning XML

通过这些示例代码,您可以更好地理解XPath的语法和应用,从而高效地处理和解析XML和HTML文档数据。