python - 使用 requests-html 解析元素的尾部

标签 python python-requests lxml python-requests-html

我想用 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/

相关文章:

python - 如何在Python的请求库中模拟 session 中的副作用?

python - 使用请求解析亚马逊上的产品标题

python - 使用 python 和 lxml 删除元素

python - 使用 etree 从所有元素中删除所有数据属性

python - 将 Pandas 数据框单元格中的设置值拆分为多行

python - 在 Python 2.7.2 中设置端口以与 Arduino Uno 一起使用

javascript - 未捕获的语法错误 : Unexpected token & while rendering a Django template

Python 请求模块 - 未找到模块

xsd - 使用 lxml 验证 xml 文件时是否可以显示超过 65535 的行号?

Python:替换日历模块中的方法