PHP解析器ASP页面

时间:2011-09-24 21:19:28

标签: php parsing

  

可能重复:
  PHP : Parser asp page

我在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];  
} 
?> 

2 个答案:

答案 0 :(得分:1)

你是正则表达式(在preg_match_all中)是错误的。它应该是#<a class='Lp' href="(.*?)">(.*?)</a>#is,因为class属性是第一个,而不是最后一个,并且用单引号括起来,而不是双引号。

您应该高度考虑使用DOMDocumentDOMXPath来解析文档而不是正则表达式。

DOMDocument / 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;

答案 1 :(得分:0)

您必须根据获取内容的页面的HTML代码稍微修改正则表达式:

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

请注意,该类是第一个,它被单引号括起来而不是双引号。我测试过它对我有用。