HTMLParser:获取在

2024-09-28 17:01:37 发布

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

我正在使用Python的HTMLParser(本身不是必需的,但出于公司环境的考虑,它比外部库要好)从一个巨大的表中提取一个日期,该表来自一个开发糟糕的软件,如下所示:

(...)
<tr>
    <td class='resultLabel'>
        Scan Syntax
    </td>
    <td></td>
</tr>
<tr>
    <td class='resultLabel'>Show Text</td>
    <td></td>
</tr>
<tr>
    <td class='resultLabel'>
        Snapshot
    </td>
    <td>
        05/05/15 11:25:16
        &nbsp;&nbsp;
        <span class='clickCursorRegular' title='View Transcript' onClick="viewStatusTranscript('714294386-2303', '0FB88F01-CDA1-ECFA-597C-93CA57C71910')">
        Succeeded
        </span>
    </td>
</tr>
<tr>
    <td class='resultLabel'>Snapshot OS Image</td>
    <td><span style='color:#636363;'>Not Supported</span></td>
</tr>
<tr>
    <td class='resultLabel'>Telnet/SSH Session</td>
    <td>
        04/28/15 16:11:40
        &nbsp;&nbsp;
        <span class='clickCursorRegular' title='View Transcript' onClick="viewStatusTranscript('714294386-2303', '814FE794-7982-2334-E69F-4D8EF9615011')">Failed</span>
    </td>
</tr>

我的目标是获取与快照字段相对应的日期(在本例中为“05/05/15 11:25:16”),但是只有在快照成功的情况下才。(编辑:我的意思是无论哪种方式都可以得到日期,但也可以通过阅读“成功”部分来知道日期是否有效)

这可以从下面日期内的文本中提取。包含表没有id或类,但它是整个页面中唯一的表,行数可能会波动。FWIW,HTML是通过请求获得的。在

我一直在研究HTMLParser,但我不确定如何完成这个任务。。。尽管由于公司的规定,如果可能的话,我真的希望继续使用Python的内置库,但是可以随意推荐其他库。在


Tags: viewtitlesnapshot公司trclasstdspan
1条回答
网友
1楼 · 发布于 2024-09-28 17:01:37

有不同的方法。我还没有找到一个真正让我满意的HTMLParser,但我还在找!以下是一些想法:

  • 只需计算找到starttag<td>的次数,然后接受来自数据处理程序的数据

  • 稍微改进的版本:Count starttag <td>,它有一个属性class='resultLabel'

  • 更好的方法是:搜索嵌套的<td>s

  • 如果要检测页面中的多个字段,可以实现state machine,以检测特定的标记序列。

您还可以获取所有标记并构造一个树结构,这将允许您直接寻址<td>所在的分支。 这就是lxml所做的:只需一个步骤,它就可以解析HTML文档并将其转换为树结构,然后可以将其导航到包含所需的<td>的分支。在

主要问题是什么?很多很多网站都有不正确的页面。因此,它取决于解析器是否具有容错能力并接受某种陌生性。大多数浏览器都会悄悄地接受这种奇怪的现象,但是您可以通过浏览器的调试器进行检查,或者将url发送到w3c的验证服务。在

相关问题 更多 >