0

我正在尝试使用 python 程序从各种 HTML 页面中提取一些数据。不幸的是,其中一些页面包含用户输入的数据,这些数据偶尔会出现“轻微”错误——即标签不匹配。

有没有一种好方法可以让 python 的 xml.dom 尝试纠正错误或类似的东西?或者,是否有更好的方法从可能包含错误的 HTML 页面中提取数据?

4

4 回答 4

3

您可以使用HTML Tidy进行清理,或使用Beautiful Soup进行解析。可能是您必须将结果保存到临时文件,但它应该可以工作。

干杯,

于 2009-07-18T09:33:48.143 回答
0

我曾经使用 BeautifulSoup 来完成这些任务,但现在我已经转向HTML5lib ( http://code.google.com/p/html5lib/ ),它在 BeautifulSoup 失败的许多情况下都能很好地工作

另一种选择是使用“元素汤”(http://effbot.org/zone/element-soup.htm),它是使用 ElementTree 的 Beautiful Soup 的包装器

于 2009-07-18T10:05:53.913 回答
0

lxml在解析无效 HTML 方面做得不错。

根据他们的文档Beautiful Souphtml5lib有时会根据输入表现更好。使用 lxml,您可以选择使用哪个解析器,并通过统一的 API 访问它们。

于 2009-07-18T10:31:53.567 回答
0

如果您可以接受 jython,tagsoup 非常擅长解析垃圾 - 如果是,我发现 jdom 库比其他 xml 替代品更容易使用。

这是一个演示模型的片段,与 tfl 的旅程规划器的屏幕抓取有关:

私有文档 getRoutePage(HashMap params) 抛出异常 {
        字符串 uri = "http://journeyplanner.tfl.gov.uk/bcl/XSLT_TRIP_REQUEST2";
        HttpWrapper hw = 新的 HttpWrapper();
        String page = hw.urlEncPost(uri, params);
        SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser");
        阅读器 pageReader = new StringReader(page);
        返回 builder.build(pageReader);
    }
于 2009-07-19T03:54:23.673 回答