0

我使用 SimpleHTMLDOM 从其他网页抓取东西,但我有一个问题,如何只在图像锚标签内获取网址,因为该网页包含链接锚标签以及图像锚标签!但我只想在图像锚标记中获取 href 值!

<a href="I DO NOT NEED THIS VALUE"><a/>


<a href="I NEED THIS VALUE"><img src="xxxx"><a/>

但是当调用 DOM 时,它会返回所有的 href URL,包括链接锚 URL!我只需要图像锚标记内的 URL!

我用这个代码打电话..

$hrefl = $html->find('a');

$count = 1;

for( $i = 0; $i < 50; $i++){

              echo $hrefl[$count]->href;
              $count++;

 }
4

3 回答 3

4

您需要每个包含图像标签的链接的 href 属性。使用 xpath 非常简单:

//a/img/../@href

你写的是你使用 DOM,你的代码看起来像是用简单的 html dom 编写的。该库是有限的,现在不再需要,因为 PHP 有DOMDocumentandDOMXPath对象。我认为简单的 html DOM 没有 xpath,

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$hrefs = $xpath->query('//a/img/../@href');
$count = $hrefs->length;
foreach($hrefs as $href)
{
    echo $href->nodeValue, "\n";
}

演示

于 2012-05-05T17:59:15.127 回答
4

可能您正在使用simplehtmldom 库进行解析,我不太了解它,我使用DOMDocument进行所有解析。

我可以建议的非常快速的解决方案是检查锚标记是否在其中包含图像,如果是则获取值,否则跳过它。

像这样的东西:

<?php
    $doc = new DOMDocument();
    @$doc->loadHTMLFile($urlofhtmlpage);

    foreach($doc->getElementsByTagName('a') as $a){
        foreach($a->getElementsByTagName('img') as $img){
            echo $a->getAttribute('href');
        }
    }
?>
于 2012-05-05T18:04:34.503 回答
3

试试这个:

$hrefl = $html->find('a');

$count = 1;

for( $i = 0; $i < 50; $i++){
  $img = $hrefl[$count]->find('img');
  // check if var exists and is valid               
  if ($img ... ) { 
    echo $hrefl[$count]->href;
  }
  $count++;
 }
于 2012-05-05T18:08:30.540 回答