我想用 requests-html 0.9.0 解析这样的 HTML 文档:
from requests_html import HTML
html = HTML(html='<span><span class="data">important data</span> and some rubbish</span>')
data = html.find('.data', first=True)
print(data.html)
# <span class="data">important data</span> and some rubbish
print(data.text)
# important data and some rubbish
我需要区分标签内的文本(被它包围)和标签的尾部(元素之后的文本直到下一个标签)。这是我最初预期的行为:
data.text == 'important data'
data.tail == ' and some rubbish'
但是 tail
没有为 Element
定义秒。由于 requests-html 提供了对内部 lxml
对象的访问,我们可以尝试从 lxml.etree.Element.tail
中获取它。 :
from lxml.etree import tostring
print(tostring(data.lxml))
# b'<html><span class="data">important data</span></html>'
print(data.lxml.tail is None)
# True
lxml 表示中没有尾部!带有内部文本的标签没问题,但尾部似乎被剥离了。如何提取“和一些垃圾”
?
编辑:我发现full_text
只提供内部文本(“完整”就这么多)。这启用了从 text
中减去 full_text
的肮脏 hack,尽管我不肯定如果有任何链接它会起作用。
print(data.full_text)
# important data
最佳答案
我不确定我是否理解您的问题,但如果您只想获得 'and some rubbish'
你可以使用下面的代码:
from requests_html import HTML
from lxml.html import fromstring
html = HTML(html='<span><span class="data">important data</span> and some rubbish</span>')
data = fromstring(html.html)
# or without using requests_html.HTML: data = fromstring('<span><span class="data">important data</span> and some rubbish</span>')
print(data.xpath('//span[span[@class="data"]]/text()')[-1]) # " and some rubbish"
注意 data = html.find('.data', first=True)
返回你<span class="data">important data</span>
不包含 " and some rubbish"
的节点- 它是父节点的文本子节点 span
!
关于python - 使用 requests-html 解析元素的尾部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49944443/