继上一篇BeautifuSoup 提取数据,这里通过xpath提取元素,如果是xml格式的是一种提取方法,如果是html格式的也是一种提取方法,
from lxml import etree xml = """ <book> <id>1</id> <name>野花遍地香</name> <price>1.23</price> <nick>臭豆腐</nick> <author> <nick id="10086">周大强</nick> <nick id="10010">周芷若</nick> <nick class="joy">周杰伦</nick> <nick class="jolin">蔡依林</nick> <div> <nick>惹了</nick> </div> </author> <partner> <nick id="ppc">胖胖陈</nick> <nick id="ppbc">胖胖不陈</nick> </partner> </book> """ et = etree.XML(xml) # result = et.xpath("/book") # /表示根节点 name = et.xpath("/book/name/text()")[0] # 野花遍地香 nik = et.xpath("/book//nick") # 两个/表示的是所有的子孙后代 snick = et.xpath("/book/*/nick/text()") # 拿孙子辈的nick *代表通配符 翻译可理解为book里面的谁都行 result = et.xpath("/book/author/nick[@class='joy']/text()") # []表示属性筛选 @属性名=值 result1 = et.xpath("/book/partner/nick/@id") # 最后一个/表示拿到nick里面的id的内容,@属性,可以直接拿到属性值 print(result1)
----------------------------------------------------------------------------------------------------------------------------
html = """ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <li><a href="http://www.baidu.com">百度</a></li> <li><a href="http://www.Google.com">谷歌</a></li> <li><a href="http://www.sougou.com">s搜狗</a></li> </ul> <ol> <li><a href="plane">飞机</a></li> <li><a href="bike">自行车</a></li> <li><a href="car">轿车</a></li> </ol> <div class="cat">tom</div> <div class="mouse">jerry</div> </body> </html> """ et = etree.HTML(html) # print(et.xpath("/html/body/ul/li[2]/a/text()")) # [] 这个代表第几个,这句话的意思是拿到第二个li标签下a标签里面的文本,打印结果['谷歌'] li_list = et.xpath("/html/body//li") # //表示所有子孙后代,这句话的意思是html标签下body标签里面所有标签下面的li标签 # print(li_list) li_list1 = et.xpath("//li") for li in li_list1: href = li.xpath("./a/@href")[0] # 当前节点下a标签中href的内容 text = li.xpath("./a/text()")[0] # 当前节点下a标签中的文本 print(href, text)