2009-11-26 43 views
0

我使用pQuery(jQuery的Perl端口)來選擇元素並從HTML文檔中檢索文本。使用pQuery非平凡的屏幕抓取選擇

考慮下面的標記:

<x> 
    <y>code1</y> 
    <z>stuff</z> 
    <y>code2</y> 
    <z>foobar</z> 
</x> 

而下面的代碼pQuery:

my $target_value = pQuery($markup)->find($pquery_selector)->text; 

我試圖制定$pquery_selector,以便它在上面使用下面的規則的標記匹配<z>foobar</z>:找到一個y元素後面的z - 元素,該元素的主體包含"code2"。雖然這可以使用jQuery,但我不確定pQuery語法是否足夠強大來處理這樣的表達式。

這種類型的選擇可能使用pQuery語法嗎?

回答

1

在jQuery中,可能可以編寫像'y:contains(code2)+ z'這樣的選擇器。然而,pQuery還沒有完成(從版本0.07開始),像x + z這樣的選擇器只是給出了一個錯誤,表明模塊開發人員還沒有開始翻譯那部分jQuery代碼。由於pQuery自2008年以來一直沒有被觸及,我建議您自己修復它(代碼位於cpan和github上),或者使用更成熟的模塊,如HTML :: TreeBuilder :: XPath(它要求學習XPath語法,但實際上適用於非平凡的東西)。

上述jQuery選擇器的XPath相當於'// y [contains(text(),'code2')]/following-sibling :: z'