#导入xlml包下的etree类 from lxml import etree #随意定义一段html代码块 wb_data=""" <div> <ul> <li><a href="//a.4399.cn/game-id-195566.html">aaa</a></li> <li><a href="//a.4399.cn/game-id-150471.html">bbb</a></li> <li><a href="//a.4399.cn/game-id-122141.html">ccc</a></li> <li><a href="//a.4399.cn/game-id-144729.html">ddd</a></li> </ul> <div> """ #将字符串转换为html的对象(编号), #自动补全<html><body>...</body></html>标签 html=etree.HTML(wb_data) #用 / 代表根节点(最上级) # data1默认为列表类型 data1=html.xpath("/html") print(data1) print("-"*80) #用 // 代表任意标签起点 data2=html.xpath("//a") for i in data2: print(i.text) # 输出a标签的内容 print("-"*80) #. 代表当前节点 data3=html.xpath("/html/body/div/ul") for i in data3: #这里获取的ul标签类容 a = i.xpath("./li/a") #.代表当前标签(ul)然后再接后面的标签最后获取的是a标签 for j in a: print(j.text) #循环输出a标签里的内容 print("-"*80) #.. 代表父级节点(父标签) data4=html.xpath("/html/body/div/ul") for i in data4: #这里获取的ul标签类容 div=i.xpath("..") #ul的父标签=div print(div) print("-"*80) # @ 选取属性(也就是标签里的属性) data5=html.xpath("//a/@href") #这里获取的是a标签里的href内容 for i in data5: print(i) print("-"*80) #指定具体的节点(获取指定相同标签的其中一个,[]下标从1开始) data6=html.xpath("//li[1]") print(data6) print("-"*80) #选取a标签内有href的并且路径为//a.4399.cn/game-id-122141.html data7=html.xpath('//a[@href="//a.4399.cn/game-id-122141.html"]') print(data7) print(data7[0].text) # 输出a标签的内容 print("-"*80) #未知节点/标签(*代表未知) data8=html.xpath("//*") print(len(data8)) #这段html代码块共有多少个标签 for i in data8: if hasattr(i,"text"): print(i.text) #输出每个标签里的内容 print("-"*80) #未知属性 data9=html.xpath("//@*") print(len(data9)) #这段html代码块共有多少个属性 for i in data9: print(i) #输出属性内的值 print("-"*80) # | 匹配两个(| 是或) data10=html.xpath("//li | //a") print(len(data10)) #获取了li和a标签共有多少个