2011-09-24 53 views
0

可能重複:
PHP : Parser asp pagePHP解析器ASP頁

我有這個標記爲ASP頁面

<a class='Lp' href="javascript:prodotto('Prodotto.asp?C=3')">AMARETTI VICENZI GR. 200</a> 

我怎麼能解析器有這個ASP頁面文字AMARETTI VICENZI GR。 200

這是我使用,但不工作的代碼:

<?php 
$page = file_get_contents('http://www.prontospesa.it/Home/prodotti.asp?c=12'); 
preg_match_all('#<a href="(.*?)" class="Lp">(.*?)</a>#is', $page, $matches); 

$count = count($matches[1]); 
for($i = 0; $i < $count; $i++){ 
    echo $matches[2][$i]; 
} 
?> 

回答

1

你的正則表達式(在preg_match_all)是錯誤的。它應該是#<a class='Lp' href="(.*?)">(.*?)</a>#is,因爲class屬性首先出現,而不是最後一個,用單引號括起來,而不是雙引號。

您應該高度考慮使用DOMDocumentDOMXPath解析文檔而不是正則表達式。

DOM文檔/ DOMXPath例子:

<?php 

// ... 

$doc = new DOMDocument; 
$doc->loadHTML($html); // $html is the content of the website you're trying to parse. 

$xpath = new DOMXPath($doc); 
$nodes = $xpath->query('//a[@class="Lp"]'); 

foreach ($nodes as $node) 
    echo $node->textContent . PHP_EOL; 
+0

這個代碼不使用ASP頁的工作也有同樣的錯誤回報: 警告:DOM文檔:: loadHTML()[domdocument.loadhtml]:在實體,線放錯了位置DOCTYPE聲明:在/ home /含量22/N/9 /5/n95161273/html/vampire_diaries/parser.php on line 4 Warning:DOMDocument :: loadHTML()[domdocument.loadhtml]:htmlParseStartTag:錯位實體中的標記,第102行:/ home/content/n/9/5/n95161273/html/vampire_diaries/parser.php第4行 – Mimmo

+0

這些只是警告,DOM仍然加載文件。在加載調用之前將libxml_use_internal_errors()設置爲true,之後再設置false,以便禁止它們。 – Maerlyn

0

你有一點點基於你正在從內容網頁的HTML代碼來修改正則表達式:

'#<a class=\'Lp\' href="(.*?)">(.*?)</a>#is' 

注該類是第一個,並且它被單引號括起來不是雙重的。我測試過,它適用於我。