Bir DIV içindeki tüm bağlantıları bulma ve yazdırma

2 Cevap php

Ben bir div tüm bağlantıları bulmak için çalışıyor ve ardından bu bağlantıları basmak.

Ben HTML dosyasını ayrıştırmak için basit HTML Dom kullanıyorum. İşte ben bugüne kadar ne var, satır içi açıklamaları okuyun ve ben yanlış gidiyorum bana bildirin.

include('simple_html_dom.php');  

$html = file_get_html('tester.html');

$articles = array();

//find the div the div with the id abcde
foreach($html->find('#abcde') as $article) {

    //find all a tags that have a href in the div abcde
    foreach($article->find('a[href]') as $link){

        //if the href contains singer then echo this link
        if(strstr($link, 'singer')){

            echo $link;

        }

    }

}

Ne şu olur yukarıdaki (o bitiremedik) yüklemek için uzun zaman almasıdır. Ben beklemek için çok uzun olduğu için her döngü içinde ne yaptığını basılmış ve ben onun bunu gerek yok şeyler geçiyor ki bulmak! Bu benim kod yanlış olduğunu göstermektedir.

HTML temelde böyle bir şey olur:

<div id="abcde">
<!-- lots of html elements -->
<!-- lots of a tags -->
<a href="singer/tom" />
<img src="image..jpg" />
</a>
</div>

Herhangi bir yardım için teşekkür ederiz

2 Cevap

Bu API kullanarak kimliği ile bir div (ya da herneyse) seçmek için doğru yolu:

$html->find('div[id=abcde]');

Kimlikleri benzersiz olması gerekiyordu beri Ayrıca, şu yeterli olacaktır:

//find all a tags that have a href in the div abcde
$article = $html->find('div[id=abcde]', 0);

foreach($article->find('a[href]') as $link){

    //if the href contains singer then echo this link
    if(strstr($link, 'singer')){
        echo $link;
    }
}

Neden yerine yerleşik DOM uzantısı kullanmak değil mi?

<?php

$cont = file_get_contents("http://stackoverflow.com/") or die("1");

$doc = new DOMDocument();
@$doc->loadHTML($cont) or die("2");

$nodes = $doc->getElementsByTagName("a");

for ($i = 0; $i < $nodes->length; $i++) {
    $el = $nodes->item($i);
    if ($el->hasAttribute("href"))
        echo "- {$el->getAttribute("href")}\n";
}

verir

... (lots of links before) ...
- http://careers.stackoverflow.com
- http://serverfault.com
- http://superuser.com
- http://meta.stackoverflow.com
- http://www.howtogeek.com
- http://doctype.com
- http://creativecommons.org/licenses/by-sa/2.5/
- http://www.peakinternet.com/business/hosting/colocation-dedicated#
- http://creativecommons.org/licenses/by-sa/2.5/
- http://blog.stackoverflow.com/2009/06/attribution-required/