我正在尝试使用python程序从各种HTML页面中提取一些数据。不幸的是,其中一些页面包含用户输入的数据,偶尔会出现“轻微”错误 - 即标签不匹配。
有没有一种方法让python的xml.dom尝试纠正错误或类似的东西?或者,是否有更好的方法从HTML页面中提取可能包含错误的数据?
答案 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 Soup和html5lib,根据输入的不同,有时表现更好。使用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); }