我正在尝试使用 python 程序从各种 HTML 页面中提取一些数据。不幸的是,其中一些页面包含用户输入的数据,这些数据偶尔会出现“轻微”错误——即标签不匹配。
有没有一种好方法可以让 python 的 xml.dom 尝试纠正错误或类似的东西?或者,是否有更好的方法从可能包含错误的 HTML 页面中提取数据?
我正在尝试使用 python 程序从各种 HTML 页面中提取一些数据。不幸的是,其中一些页面包含用户输入的数据,这些数据偶尔会出现“轻微”错误——即标签不匹配。
有没有一种好方法可以让 python 的 xml.dom 尝试纠正错误或类似的东西?或者,是否有更好的方法从可能包含错误的 HTML 页面中提取数据?
您可以使用HTML Tidy进行清理,或使用Beautiful Soup进行解析。可能是您必须将结果保存到临时文件,但它应该可以工作。
干杯,
我曾经使用 BeautifulSoup 来完成这些任务,但现在我已经转向HTML5lib ( http://code.google.com/p/html5lib/ ),它在 BeautifulSoup 失败的许多情况下都能很好地工作
另一种选择是使用“元素汤”(http://effbot.org/zone/element-soup.htm),它是使用 ElementTree 的 Beautiful Soup 的包装器
lxml在解析无效 HTML 方面做得不错。
根据他们的文档Beautiful Soup和html5lib有时会根据输入表现更好。使用 lxml,您可以选择使用哪个解析器,并通过统一的 API 访问它们。
如果您可以接受 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); }