2011-01-25 80 views
0

我使用perl的命令行實用程序的xpath如下來提取一些HTML代碼數據:忽略與Perl的XML格式不正確的XML

#!/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的人,這是相當空: http://www.linuxcertif.com/man/1/xpath.1p/

我想知道是否會有辦法告訴XPath來忽略HTML格式不正確。爲了給你的是這裏怎麼畸形的想法是從源代碼中的幾行:

<div id="header-background" style="top: 42px; >&nbsp;</div> <---- missing closing " 
<div id-"page-inner"> <---- - instead of = 

感謝

回答

5

試用HTML::TreeBuilder::XPath它使用一個HTML解析器來創建,然後可以使用的XPath查詢文檔。一個HTML解析器應該適用於格式不正確的XML。

另請參閱HTML Scraping with XPath上的這篇文章。

+0

如果可能的話,我寧願喜歡用一個指令I可以通過管道HTML到(像的xpath),爲我從繼承了整個事情是其中內容被檢索bash腳本/發送使用捲曲。 – Max 2011-01-25 09:12:41

+0

你可以讓你的Perl腳本以這種方式行事..例如http://stackoverflow.com/questions/3138649/programmatically-read-from-stdin-or-input-file-in-perl – 2011-01-25 14:25:54

3

xml_grep,一個附帶XML :: Twig的命令行工具,可用於使用XPath從HTML中提取數據。通常它在XML上工作,但您可以使用選項來處理HTML(它使用HTML :: TreeBuilder將XML轉換爲HTML)。

例如:

> xml_grep -html -t 'a[@class="genu"]' http://stackoverflow.com 
> Stack Exchange