0

私はSimpleHTMLDOMを使用して他のWebページからコンテンツを取得しますが、そのWebページはリンクアンカータグと画像アンカータグで構成されているため、画像アンカータグ内のURLを取得する方法に問題があります! しかし、画像アンカータグの横にあるhref値を取得したいだけです!

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


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

しかし、DOM を呼び出すと、リンク アンカー URL を含むすべての href URL が返されます。イメージ アンカー タグ内の URL だけが必要です。

このコードを使用して呼び出します..

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

$count = 1;

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

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

 }
4

3 に答える 3

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 に答える
4

イメージ タグを含むすべてのリンクの href 属性が必要です。xpath を使用すると、非常に簡単です。

//a/img/../@href

あなたは DOM を使用すると書きましたが、あなたのコードは単純な html dom で書かれたように見えます。DOMDocumentそのライブラリは制限されており、PHP にはおよびDOMXPathオブジェクトがあるため、現在では不要になっています。単純な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 に答える
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 に答える