【问题标题】:Easiest way to parse specific pieces of information from HTML从 HTML 解析特定信息的最简单方法
【发布时间】:2012-03-16 04:08:43
【问题描述】:

我知道问题的标题并不好,但我想不出更好的措辞。我有一些 HTMl 需要搜索:

<tr bgcolor="#e2d8d4">
<td>1</td>
<td>12:00AM</td>
<td>Show Name<a name="ID#"></a></td>
<td>Winter 12</td>
<td>Channel</td>
<td>Production Company</td>
<td nowrap>1d 11h 9m (air time)</td>
<td align="center">11</td>
<td>
<a href="link">AniDB</a></td>
<td><a href="link">Home</a></td>
</tr>

页面是几十个这样的 html 块。我需要能够仅使用节目名称来挑选给定节目的播出时间以及 bgcolor。 (此处为整页:http://www.mahou.org/Showtime/Planner/)。我假设最好的选择是正则表达式,但我对这个假设没有信心。我宁愿不使用第 3 方模块(BeautifulSoup)。如果问题含糊不清,我提前道歉。

【问题讨论】:

标签: python html regex


【解决方案1】:

感谢您进行研究 - 很高兴您知道 BeautifulSoup。这将真的是解决您的问题的最佳方式。

除此之外...这里是一个通用策略,您可以选择使用正则表达式(如果您的理智有问题)或使用 BeautifulSoup(如果您理智的话)来实施。

  • 看起来你想要的数据总是在一个开始的表中:

    &lt;table summary="Showtime series for Sunday in a Planner format." border="0" bgcolor="#bfa89b" cellpadding="0" cellspacing="0" width="100%"&gt;

    您可以通过查找表的summary="Showtime series for (Monday|Tuesday|....|Sunday)" 属性来隔离这一点,该属性在页面中是唯一的。

  • 您已隔离该表,表中行的格式已明确定义。我会一次获得&lt;tr&gt;,并假设第二个&lt;td&gt; 将始终包含播出时间,而第三个&lt;td&gt; 将始终包含节目名称。

正则表达式可以很好地从 HTML 中提取非常简单的内容,例如“所有 img 标签的 src 路径”,但是一旦您开始谈论嵌套标签,例如“找到每个标签的第二个 &lt;td&gt;带有summary="..." 属性的表的&lt;tr&gt; 标记,这变得更加困难。这是因为正则表达式不是为嵌套结构而设计的。

请参阅canonical answer to 'regexps and HTML' questions,以及 Tom Christiansen 对what it takes to use regexps on arbitrary HTML 的解释。 tchrist 证明您可以使用正则表达式来解析您想要的任何 HTML - 如果您有足够的决心 - 但是像 BeautifulSoup 这样的正确解析库更快、更容易,并且会提供更好的结果。

【讨论】:

  • 非常感谢您的洞察力。我通常更喜欢尽可能使用默认库,但是使用内置模块与第三方模块相比,这样做的成本似乎太高了,无法获得任何可能的收益。也就是说,能不能举个例子,用美汤来解决这样的困境? (我以前从来没有用过漂亮的汤,似乎无法弄清楚如何遍历摘要中的元素)
【解决方案2】:

这应该是评论,但结果太长了。

BeautifulSoup 的文档非常好,因为它包含相当多的 examples,请注意,有两个版本,并不是每个版本都可以很好地与 Python 的每个版本配合使用,尽管您可能在那里不会遇到问题(见:"Beautiful Soup 4 works on both Python 2 (2.7+) and Python 3.")。

此外,BeautifulSoup 或 lxml 等 HTML 解析器在处理 HTML 之前会对其进行清理(使其有效,以便您可以正确地遍历其树),因此它们可能会移动某些被视为无效的元素。通常,您可以禁用该功能,但不确定您是否会获得想要的结果。

还有其他方法可以解决您提出的任务。但是,它们的实施要复杂得多,因此在您描述的条件下,这可能是不可取的。但只是让您知道,信息提取(IE)的整个领域都在处理这类问题。 Here (PDF) 或多或少是一项关于它的最新调查,主要关注用于提取 HTML(他们称之为半结构化)网页的 IE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-21
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多