PHP解析器ASP页
可能重复:PHP解析器ASP页,php,parsing,Php,Parsing,可能重复: 我已将此标签放入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/pro
我已将此标签放入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];
}
?>
您的正则表达式(在preg\u match\u all
中)是错误的。它应该是##is
,因为class属性位于第一位,而不是最后一位,并且用单引号而不是双引号括起来
您应该高度考虑使用和解析文档而不是正则表达式。
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;
您必须根据从中获取内容的页面的HTML代码稍微修改正则表达式:
'#<a class=\'Lp\' href="(.*?)">(.*?)</a>#is'
“##是”
请注意,类是第一个类,它由单引号而不是双引号包围。我进行了测试,它对我有效。此代码不适用于asp页面。第4行有相同的错误:警告:DOMDocument::loadHTML()[DOMDocument.loadHTML]:实体中的DOCTYPE声明放错了位置,第22行在/home/content/n/9/5/n95161273/html/Vamper_diaries/parser.php第4行警告:DOMDocument::loadHTML()[DOMDocument.loadHTML]:htmlparserstarttag:Entity中的标签放错了位置,第4行的/home/content/n/9/5/n95161273/html/vampile\u diaries/parser.php中的第102行。这些只是警告,DOM仍然加载该文件。在加载调用之前将libxml_use_internal_errors()设置为true,之后设置为false,这样就可以抑制它们。