我正在使用perl命令行实用程序xpath从某些HTML代码中提取数据,如下所示:
#!/bin/bash
echo $HTML | xpath -q -e "//h2[1]"
HTML格式错误导致xpath抛出以下错误:
not well-formed (invalid token) at line X, column Y, byte Z:
我无法真正修复HTML,因为它是由外部源提供的,这意味着每次更改HTML时我都必须再次手动修复它。
我找了一个很空的xpath man: http://www.linuxcertif.com/man/1/xpath.1p/
我想知道是否有办法告诉xpath忽略格式错误的HTML。为了让您了解它的畸形程度,请参阅源代码中的几行:
<div id="header-background" style="top: 42px; > </div> <---- missing closing "
<div id-"page-inner"> <---- - instead of =
由于
答案 0 :(得分:5)
尝试HTML::TreeBuilder::XPath,它使用HTML解析器构建一个文档,然后可以使用xpath查询该文档。对于格式错误的XML,HTML Parser应该没问题。
另请参阅HTML Scraping with XPath上的这篇文章。
答案 1 :(得分:4)
xml_grep
是XML :: Twig附带的命令行工具,可用于使用XPath从HTML中提取数据。通常它适用于XML,但您可以使用-html
选项来处理HTML(它使用HTML :: TreeBuilder将XML转换为HTML)。
例如:
> xml_grep -html -t 'a[@class="genu"]' http://stackoverflow.com
> Stack Exchange