如何使用Python包lxml检索节点中的可见文本,排除任何子节点或隐藏元素?
我在文档中找到的所有内容都是node.text_content()
,但所有这一切都是删除html标记,无论可见性如何都会返回所有深度的所有文本。我也尝试了node.text
,但似乎只为所有节点返回None。
答案 0 :(得分:1)
您可以使用xpath提取所需的文本。
由于只需要可见的文本,请将/text()
放在xpath中。
例如,如果我需要摘录第二段:
import requests
from lxml import etree
r = requests.get("https://stackoverflow.com/questions/32029681/how-to-retrieve-only-visible-node-text-with-lxml")
html = etree.HTML(r.text)
list_of_text = html.xpath('//*[@id="question"]/div[2]/div[2]/div[1]/p//text()') #xpath copied from browser
''.join(list_of_text)
您将获得:
'How do you use the Python package lxml to retrieve visible text in a node, excluding any child nodes or hidden elements?All I can find in the docs is node.text_content(), but all that does is strip out html tags, returning all text at all depths regardless of visibility. I also tried node.text, but that seems to just return None for all nodes.'
请注意,//text()
与/text()
稍有不同,它将选择父节点与最后一个子节点之间的任何节点。