【问题标题】:Handle malformed HTML (no closing tags)处理格式错误的 HTML(无结束标签)
【发布时间】:2017-11-23 06:58:32
【问题描述】:

我使用 BeautifulSoup 通过 lxml 解析器解析 HTML。但是我遇到了一个在<table> 中没有任何结束标签的文件:

<table id='reportTable' class='report-table' style='width:auto' cellspacing='0'><tr>
<th>Номер<br>поезда<th>Дата<br>отправления<th>Маршрут<th>Причина<th>Комментарий<th>Станция ...

虽然&lt;table&gt; 标签已正确关闭。

【问题讨论】:

  • 您是否已经尝试解析它但没有成功? html 解析器的一半意义在于它可以像浏览器一样容忍格式错误的 html。缺少结束标签不应出现问题
  • @C.Feenstra 它可以识别一些tds,但通常无法拆分。稍后我会尝试制作一个示例文件

标签: python html beautifulsoup lxml


【解决方案1】:

就我个人而言,我自己也遇到过这个问题,我使用 tidylib 通过 HTMLTidy 5 运行整个文档。说我同意 C. Feenstra lxml 解析器可以容忍格式错误的 html。如果你有 html,你真的无法用 lxml 解析器解析,那么试试这个:

from tidylib import tidy_document

badHtml = "<table id='reportTable' class='report-table' style='width:auto' cellspacing='0'><tr><th>Номер<br>поезда<th>Дата<br>отправления<th>Маршрут<th>Причина<th>Комментарий<th>Станция ..."
options = {"output-bom": 0, "quiet": False, "word-2000": True,
           "output-encoding": 'utf8', "output-xhtml": 1, "add-xml-decl": 0,
           "tidy-mark": 0, "drop-proprietary-attributes": True,
           "show-warnings": False, }
tidiedHtml, errors = tidy_document(badHtml, options)

然后对 BeautifulSoup 使用“tiidiedHtml”

【讨论】:

  • 这行得通,谢谢!我已经从binaries.html-tidy.org 安装了pytidylibtidy.dll 我的输入编码是cp1251 所以我必须将原始数据预编码为utf-8
猜你喜欢
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
相关资源
最近更新 更多