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)