xpath提取div标签所有嵌套文本的实用方法

如何提取div标签下的所有文本呢?

<html> <body> <h1>Hello,World</h1> <div>轻点击<a>这条</a>链接</div> </body> </html>

按照我们之前的作风,肯定是提取每个标签的文本,例如下面这样

fromlxmlimportetree html=""" <html> <body> <h1>Hello,World</h1> <div>轻点击<a>这条</a>链接</div> </body> </html> """ _element=etree.HTML(html) div=_element.xpath('//div/text()') print(f"div标签文本获取结果:{div}") a=_element.xpath('//div/a/text()') print(f"a标签文本获取结果:{a}") text=div[0]+a[0]+div[1] print(f"最后结果:{text}")

输出结果:

由此我们可得知,直接利用xpath解析div标签文本,下一节点的内容文本是无法全部获取的,如果按照上面的这种写法,只能解决这类固定标签,如果里面有多个标签或者有多个子标签,子子标签,那肯定是行不通的,那怎么办呢?

etree有个toString方法,可以将element对象转换未字符串文本,这样我们就可以提取了,话不多说,直接实战

#!/usr/bin/python #-*-coding:utf-8-*- #@Time:2022/8/2819:01 #@Author:亮哥 #@微信公众号:亮哥数据实验室 #@File:aaaaa.py #Software:PyCharm fromlxmlimportetree html=""" <html> <body> <h1>Hello,World</h1> <div>轻点击 <a>这条</a> 链接 </div> </body> </html> """ _element=etree.HTML(html) text=_element.xpath('*//div') ent_text=etree.tostring(text[0],method='text',encoding='utf-8').decode() ent_text=ent_text.replace("n","").replace("","") print(f"最后结果:{ent_text}")

再随便构造几个子标签

#!/usr/bin/python #-*-coding:utf-8-*- #@Time:2022/8/2819:01 #@Author:亮哥 #@微信公众号:亮哥数据实验室 #@File:aaaaa.py #Software:PyCharm fromlxmlimportetree html=""" <html> <body> <h1>Hello,World</h1> <div>轻点击 <a>这条</a> 链接 <span> <a>点击播放</a> 歌名:我是真的爱上你 </span> "" <span> <span> 你有一双深情的眼睛 </span> <span> 你有融化冰雪的魔力 </span> </span> </div> </body> </html> """ _element=etree.HTML(html) text=_element.xpath('*//div') ent_text=etree.tostring(text[0],method='text',encoding='utf-8').decode() ent_text=ent_text.replace("","") ent_text=[iforiinent_text.split("n")ifi] print(f"最后结果:{ent_text}")

最终就可以得到我们想要的结果


总结:此方法是非常的实用,可以应对各大网站表格标签,table,tr,td下的所有标签不一致问题,以及其他情况,较为通用。

THE END