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)