用python中的lxml解析html

2024-04-24 14:43:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下html代码:

...
<p class="footer">[[footer]] - <a href="/rss">feed</a> if you want.</p>
...

我正在尝试从包含空格的代码中提取“[[footer]]-feed.”(查找包含文本“[[footer]]”的页面上的所有字符串的常规任务)。你知道吗

import lxml.etree as ET
html = """
<p class="footer">[[footer]] - <a href="/rss">feed</a> if you want.</p>
"""

elem = ET.fromstring(html)

infos = elem.xpath('/p')
for info in infos:
    print 1, info.text
print 2, ET.tostring(elem) #

结果:

1, [[footer]] -
2, <p class="footer">[[footer]] - <a href="/rss">feed</a> if you want.</p>

期望结果

[[footer]] - <a href="/rss">feed</a> if you want.

问题

我不得不问这个问题,这是很谦卑的,因为它似乎不应该是困难的。你知道吗

如何使用lxml提取包含文本“[[footer]]的页面上的所有字符串?你知道吗


Tags: 字符串代码文本youifhtmlfeed页面
1条回答
网友
1楼 · 发布于 2024-04-24 14:43:57

您无法获得确切的字符串,因为lxml将HTML转换为它自己的内部数据结构,然后您需要使用tostring()方法将其转换回字符串(这意味着属性、嵌套等可能会以稍微不同的顺序/格式出现,并且不会保留空白)。例如:

for info in infos:
    #Check for some string in the displayed text
    if "search string" in info.text:
        print ET.tostring(info)

因为听起来你提到了这可能在页面上的任何地方,所以你可能想把这个check info作为一个函数,并在遍历所有元素时递归调用它。你知道吗

根据您的评论进行编辑:

你可以这样做:

for info in infos:
    #Check for some string in the displayed text
    if "search string" in info.text:
        output_str = info.text
        for children in info:
            output_str += ET.tostring(children)
        print output_str

相关问题 更多 >