xpath基础知识点

    xiaoxiao2025-07-19  9

    from lxml import etree

    text="""

    <title>新华书店</title> <book href="http://www.langlang2017.com/"> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book href="http://www.baidu.com/"> <title lang="zh">Learning XML</title> <price>39.95</price> </book> <book> <title>python 大全</title> <price>99.95</price> </book> """

    #将字符串对象转换为xml对象才可以使用xpath

    html_xml = etree.HTML(text) print(html_xml)

    #1 获取所有的book标签

    result1=html_xml.xpath("//book") print(result1)

    #2获取第一个book标签

    first_book=result1[0]#返回第一个book标签,类型是xml可以在此基础上用xpath print(first_book) print(type(first_book))

    #3 获取第一本书当前节点的href属性 #两个斜杠表示全局查找,从bookstore开始 #/ 表示从从bookstore开始,但是不能全局查找 #.表示当前标签下进行查找 f

    irst_href=first_book.xpath("//@href")#直接使用first_book作为根节点 print(first_href)

    #4 获取first_book节点的父节点的下面的所有book节点的href #…表示当前节点的父节点

    href_list=first_book.xpath("..//book/@href") print(href_list)

    #5获取价格小于40的书名

    book_name=html_xml.xpath("//book[price<40]/title/text()") print(book_name)

    #6获取价格等于99.95的书

    book_name=html_xml.xpath("//book[price=99.95]/title/text()") print(book_name)

    #7 获取book标签中的title标签和price标签 | 表示只要符合一个,就可以返回,是或者的关系

    result2=html_xml.xpath("//book/title|//book/price") print(result2) print(len(result2))

    #8 获取href含有baidu字符的book标签 然后获取此标签的书名 #contains表示包含

    result3=html_xml.xpath("//book[contains(@href,'baidu')]/title/text()") print(result3)

    #9获取bookstore前两本书的书名 #position表示位置从1开始

    result4=html_xml.xpath('//book[position()<3]/title/text()') print(result4)

    #10 匹配所有节点属性 #* 表示任何属性

    result5=html_xml.xpath("//@*") print(result5)

    #11 获取所有有属性的title标签并且获取文本信息 #[@*] 修饰title,表示含有属性

    result6=html_xml.xpath("//title[@*]/text()") print(result6)

    #12 获取href=http://www.langlang2017.com/的book节点,在此基础上再获取book后面的兄弟book节点。获取他们的书名

    esult7=html_xml.xpath("//book[@href='http://www.langlang2017.com/']/following-sibling::book/title/text()") print(result7)

    13获取href=http://www.langlang2017.com/的book节点,在此基础上再获取book后面的兄弟book,href="http://www.baidu.com/"节点。获取他们的书名

    result8=html_xml.xpath("//book[@href='http://www.langlang2017.com/']/following-sibling::book[@href='http://www.baidu.com/']/title/text()") print(result8)

    #14 使用child获取所有的书名

    result9=html_xml.xpath("//book/child::title/text()") print(result9)

    #15 从title出发,获取最后的书名

    result10=html_xml.xpath("//title/ancestor::bookstore/book[last()]/title/text()") print(result10)
    最新回复(0)