Python xml.dom和糟糕的XML

时间:2009-07-18 09:24:49

标签: python xml dom expat-parser

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

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

4 个答案:

答案 0 :(得分:3)

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

干杯,

答案 1 :(得分:0)

我曾经使用BeautifulSoup执行此类任务,但现在我已转移到 HTML5lib http://code.google.com/p/html5lib/),这在很多情况下很好用,其中BeautifulSoup失败

其他替代方法是使用“元素汤”(http://effbot.org/zone/element-soup.htm),它是使用ElementTree的美丽汤的包装

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

这是一个演示模型的片段,用于处理来自tfl旅程规划器的屏幕抓取:

 private Document getRoutePage(HashMap params) throws Exception {
        String uri = "http://journeyplanner.tfl.gov.uk/bcl/XSLT_TRIP_REQUEST2";
        HttpWrapper hw = new HttpWrapper();
        String page = hw.urlEncPost(uri, params);
        SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser");
        Reader pageReader = new StringReader(page);
        return builder.build(pageReader);
    }