**
etree数据处理之XPATH提取数据--------常用方法
**
parser = etree.HTMLParser(encoding=‘utf-8’)
html=etree.parse(‘A000000_table.html’,parser=parser)
/AAA 绝对路径 表示必须以AAA开头
print(html.xpath(‘/html’)[0])
/AAA/BBB 选择AAA下面的所有BBB元素 但是AAA必须是开头的元素
print(html.xpath(‘/html/body’)[0])
//AAA 文档中任意位置满足AAA的元素(无论层级关系)
//AAA//BBB 选择所有父元素是AAA的BBB元素
print(html.xpath(‘//table’)[0])
/AAA/BBB/CCC/* AAA下的BBB下的CCC 里面的所有元素
print(html.xpath(‘/html/body/table/*’)[0])
所有元素 出现在任何地方的任何元素
print(html.xpath(‘//*’)[0])
选择AAA下的第一个BBB元素
print(html.xpath(‘/AAA/BBB[1]’))
选择AAA下的最后一个BBB元素
print(html.xpath(‘/AAA/BBB[last()]’))
//@id 获取所有的id属性
print(html.xpath(‘//@id’))
//BBB[@id]选择有id属性的BBB元素
print(html.xpath(‘//td[@id]’))
选择有任意属性的BBB元素
print(html.xpath(‘//BBB[@*]’))
选择没有属性的 BBB元素
print(html.xpath(‘//BBB[not(@*)]’))
//BBB[@id=xxx] id=xxx的BBB元素
print(html.xpath(“//td[@data-id=‘xxx’]”))
normallize-space 去掉空格之后
print(html.xpath(“//td[normalize-space(@data-id=‘xxx’])”))
//*[count(BBB)=2] #含有两个BBB子元素的 元素
print(html.xpath(“//*[count(tr)=2]”))
//*[starts-with(name(),‘B’)] 选择所有名字以B开头的元素
print(html.xpath(“//*[starts-with(name(),‘t’)]”))
//*[contains(name(),‘B’)] 选择名字里带有B的元素
print(html.xpath(“//*[contains(name(),‘t’)]”))
//*[string-length(name())=3] 选择名字长度=3的元素
print(html.xpath(“//*[string-length(name())=3]”))
//BBB/parent:😗 选择BBB的父元素
print(html.xpath(“//tr/parent:😗”))
//BBB/ancestor:😗 选择BBB的祖先节点
print(html.xpath(“//td/ancestor:😗”))
//BBB/following-sibling:😗 选择BBB的下面的所有兄弟节点
print(html.xpath(“//td/following-sibling:😗”))