【问题标题】:Should I implement the mixed use of BeautifulSoup and REGEXs or rely solely on BS我应该实现 BeautifulSoup 和 REGEX 的混合使用还是完全依赖 BS
【发布时间】:2009-05-19 02:06:57
【问题描述】:

我有一些需要从 html 文件集合中提取的数据。我不确定数据是否驻留在 div 元素、table 元素或组合元素中(其中 div 标签是 table 的元素。我见过所有三种情况。我的文件大到 2 mb 和我有好几万个,到目前为止,我已经查看了表格中的 td 元素,并查看了孤独的 div 元素。在我看来,最长的时间是把文件 souped , 超过 30 秒。我尝试创建一个正则表达式来查找我正在寻找的数据,然后寻找下一个关闭标记表、tr、td 或 div 以确定我的文本包含在什么类型的结构中. 找到匹配的打开标签,剪掉该部分,然后将其全部包装在打开和关闭 HTML 标记中

 stuff

 <div>
 stuff
 mytext
 stuff
 </div>

所以我创建了一个如下所示的字符串:

s='<div>stuffmyTextstuff</div>'

然后我把字符串换行

 def stringWrapper(s):
     newString='<HTML>'+s+'</HTML>'
     return newString

然后使用 BeautifulSoup

littleSoup=BeautifulSoup(newString)

然后我可以使用 BeautifulSoup 的强大功能来使用 newString 做我想做的事情。

这比先测试所有表格的所有单元格内容,直到找到我的文本,如果找不到,测试所有 div 内容的替代方法运行得更快。

我在这里遗漏了什么吗?

【问题讨论】:

    标签: python regex beautifulsoup


    【解决方案1】:

    你试过lxml吗? BeautifulSoup 不错,但速度不是很快,我相信 lxml 可以提供相同的质量,但通常性能更好。

    【讨论】:

      【解决方案2】:

      BeautifulSoup 在内部使用正则表达式(这是它与其他 XML 解析器的区别),因此您可能会发现自己只是在重复它所做的事情。如果您想要更快的选项,请先使用 try/catch 尝试 lxml 或 etree 解析,然后在解析器失败时尝试 BeautifulSoup 和/或 tidylib 解析损坏的 HTML。

      对于您正在做的事情,您似乎真的想使用 XPath 或 XSLT 来查找和检索您的数据,lxml 两者都可以。

      最后,考虑到文件的大小,您可能应该使用路径或文件句柄进行解析,以便可以增量读取源代码,而不是将其保存在内存中进行解析。

      【讨论】:

        【解决方案3】:

        我不太明白您要做什么。但我知道你不需要用 标签括起来你的 div 字符串。 BS 会很好地解析它。

        【讨论】:

          【解决方案4】:

          我发现即使 lxml 比 BeautifulSoup 快,对于大小的文档,通常最好尝试通过正则表达式(或直接剥离)将大小减小到几 kB 并将其加载到 BS 中,就像你正在做的那样现在。

          【讨论】:

            猜你喜欢
            • 2017-03-12
            • 2014-01-22
            • 2018-09-26
            • 1970-01-01
            • 2019-08-27
            • 1970-01-01
            • 2019-11-04
            • 1970-01-01
            • 2022-11-19
            相关资源
            最近更新 更多