fromlxmlimporthtml
fromlxmlimportetree
importrequests
fromlxml.etreeimportHTMLParser
text='''
'''
html=etree.HTML(text,etree.HTMLParser())
print(type(html))
result=html.xpath('//*')#获取所有节点
result=html.xpath('//li')#获取所有li节点
print(result)
resutl=html.xpath('//a')#获取所有a节点
print(result)
result=html.xpath('//li/a')#选择li节点下的a节点
print(resutl)
result=html.xpath('//a[@href]/../@class')#['item-0', 'item-1']
print(result)
result=html.xpath('//a[@href="link1.html"]/../@class')#['item-0']
print(result)
#..可以用parent::*替换
result=html.xpath('//a[@href="link1.html"]/parent::*/@class')#['item-0']
print(result)
result=html.xpath('//li[@class]')
print(result)
#获取特定属性的标签
result=html.xpath('//li[@class="item-0"]')
print(result)
#获取文本内容
#
第一个result=html.xpath('//a[@href]/text()')
print(result)
result=html.xpath('//a[@href="link1.html"]/text()')
print(result)
result=html.xpath('//li[@class="item-0"]//text()')#代表所有子孙节点中li节点的子孙节点内容
print(result)
#获取某个节点的属性
print("-"*30)
resutl=html.xpath('//a/@href')
print(result)
resutl=html.xpath('//li/a/@href')
print(result)
resutl=html.xpath('//li//@href')
print(result)
text=text1='''
'''
html=etree.HTML(text,etree.HTMLParser())
#能不能模糊查询,然后精确定位
result=html.xpath('//li[@class = "aaa"]/a/text()')
print(result)#空列表
#用contains(@attr,value)可以使实现精确定位
result=html.xpath('//li[contains(@class, "aa")]/a/text()')
print(result)
result=html.xpath('//li/a[contains(@href, "link2")]/text()')
print(result)
#同上
result=html.xpath('//a[contains(@href, "link2")]/text()')
print(result)
text1='''
'''
#匹配多个属性定位一个节点 and
html=etree.HTML(text1,etree.HTMLParser())
result=html.xpath('//li[@class = "aaa" and @name = "item"]/a/text()')
print(result)
html=etree.HTML(text1,etree.HTMLParser())
#[]中可以用一个contains 也可以用and连接多个contains,contains里面要以(@atrr,value)形式
result=html.xpath('//li[contains(@class,"aa") and contains(@name,"ite")]/a/text()')
print(result)
#还可以这样写
result=html.xpath('//li[contains(@class,"aaa") and @name = "item"]/a/text()')
print(result)
#当匹配到的标签全部一样时,只有string内容不一样,只想要最后一个一个或者中间某个,这时候需要索引
text1='''
'''
html=etree.HTML(text1,etree.HTMLParser())
#获取第一个
result=html.xpath('//li[1][contains(@class,"aaa")]/a/text()')
print(result)
#获取第二个
result=html.xpath('//li[2][contains(@class,"aaa")]/a/text()')
print(result)
#获取倒数第一个
result=html.xpath('//li[last()][contains(@class,"aaa")]/a/text()')
print(result)
#获取倒数第2个
result=html.xpath('//li[last()-1][contains(@class,"aaa")]/a/text()')
print(result)
#获取第二个和第三个
result=html.xpath('//li[position() > 1 and position() < 4][contains(@class,"aaa")]/a/text()')
print(result)
#获取当前节点的所有祖先节点
result=html.xpath('//li[1]/a/ancestor::*')
print(result)
#获取祖先节点div
result=html.xpath('//li[1]/a/ancestor::div')
print(result)
#获取当前节点的所有属性值
result=html.xpath('//li[1]/a/attribute::*')
print(result)
result=html.xpath('//li[1]/attribute::*')
print(result)
#获取当前节点的所有直接子节点
result=html.xpath('//li[1]/child::*')
print(result)
#获取当前节点的同级节点
result=html.xpath('//li[1]/following-sibling::*')
print(result)
#获取当前节点的之后的所有节点,是同级剩下的节点和子节点,而不是在内部找之后的节点
result=html.xpath('//li[1]/following::*')
print(result)
#获取所有子孙节点中的a节点
result=html.xpath('//li[1]/descendant::a')
print(result)