【问题标题】:Beautiful Soup Object Omitting Information美丽的汤对象省略信息
【发布时间】:2013-06-11 12:33:49
【问题描述】:

问题:漂亮的汤对象似乎从 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之间的信息?是不是因为“小于/

第二:如何提取这个

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 标记的字段/属性中提取 符号。请帮我? :)

【问题讨论】:

    标签: python regex beautifulsoup


    【解决方案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,则应该很容易用任何语言对您的实体进行编码:phppythonruby

    编辑:根据this other answer:https://stackoverflow.com/a/14171433/1253312你可以这样做:

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

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

    【讨论】:

    • 哦!我怎么做?当我打印原始 page_Html 时,它显示为上面的链接。在获得原始 page_HTML 后,我是否只需要将
    • 不幸的是,修复格式错误的 html 是一个非常困难的问题。大多数浏览器只做“最佳猜测”。 kindall 的解决方案很基础,只处理这一种情况,仍然可以破坏你的页面。
    • 参考另一种可能的解决方案更新了答案。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-19
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多