0

问题:漂亮的汤对象似乎从 HTML 中删除了有价值的信息。为什么要这样做,我该如何提取这个字段?

示例:我感兴趣的原始 HTML 表达了这一点:

<div id="KittyChow">
            <h4 class="noteText">foodAmount</h4>
            <span>< 1 tsp</span>
        </div>

然而,当我创建我的汤对象时,相应的 HTML 行变为:

<div id="KittyChow"><h4 class="noteText">foodAmount</h4><span></span></div>

我的问题和疑问:为什么它删除了span和/span之间的信息?是不是因为“小于/ <”符号表示一些 HTML,所以它去掉了它?我想知道为什么会这样。我似乎无法在文档中找到解释......有没有办法在 BeautifulSoup 中解析这个?

第二:如何提取这个 < 1 tsp 参数?我尝试创建一个带有左右端点的正则表达式,并且几乎可以正常工作。如果我指定“左子字符串匹配”和“右子字符串匹配”,我知道如何使用正则表达式返回文本。例如,下面的代码将返回“cat”。

import re

string= "The cat is obese."
left= "The"
right= "is obese."

pattern= re.compile(left + "(.*?)" + right)
answer= pattern.findall(string)[0]

print answer

问题是,当我用 HTML 替换左右匹配字符串时,我得到“索引超出范围”错误,因为空格和缩进与将 HTML 转换为字符串有关。

所以你可以说...我已经做了很多研究,但我仍然坚持使用 BeautifulSoup 和 Python 的正则表达式模块在 HTML 标签的字段/属性中提取 < 和 > 符号。请帮我?:)

4

2 回答 2

1

你可以控制你的html吗?它格式不正确。代替

<div id="KittyChow">
    <h4 class="noteText">foodAmount</h4>
    <span>< 1 tsp</span>
</div>

它应该看起来像

<div id="KittyChow">
    <h4 class="noteText">foodAmount</h4>
    <span>&lt; 1 tsp</span>
</div>

http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

如果您在服务器端生成 html,任何语言都应该很容易对您的实体进行编码:php python ruby

编辑:根据这个其他答案:https://stackoverflow.com/a/14171433/1253312你可以这样做:

BeautifulSoup("<div> < 20 </div>", "html5lib")

这告诉 BS 使用不同的解析器,它可以处理<字符。

于 2013-06-14T19:09:40.627 回答
0

HTML 已损坏。HTML中不能有未转义的<字符;解析器会变得非常困惑。作为一种解决方法,在此特定示例中,您可以将<后跟空格替换为&lt;后跟空格:

raw_html = raw_html.replace("< ", "&lt; ")

虽然这不是一个通用的解决方案。

于 2013-06-14T19:10:25.660 回答