2016-06-14 2 views
0

Ich möchte alle Link in angegebenen URL anzuzeigen. Ich habe es gefunden, indem ich gesucht habe. aber es zeigt auch das Attribut "title" von "a" Tag. Ich möchte nur Attribut von "href"erhalten Sie alle eine href Attributliste der angegebenen URL in PHP

<?php 
$link = file_get_contents('http://example.com'); 
$dom = new DOMDocument; 

@$dom->loadHTML($link); 

$links = $dom->getElementsByTagName('a'); 


foreach ($links as $link){ 

    echo $link->nodeValue; 
echo $link->getAttribute('href'), '<br>'; 
} 
?> 

Kann mir jemand helfen, das zu tun? Vielen Dank im Voraus

+0

Können Sie ein wenig vom HTML-Code der Seite einschließen, die Sie durchlaufen – Chaim

Antwort

1

Der Wert von <a>value</a> wird mit echo $link->nodeValue; echoed entfernt diesen Code und Sie haben das Problem gelöst.

Interne Links der Website werden hier jedoch nicht wirklich behandelt. Vielleicht so etwas wie hinzufügen:

$url = 'http://example.com'; 

... # other code. 

foreach($links as $link){ 
    if($link[0] == '/'){ #link is a string, [0] refers to the first character. 
     echo $url, $link->getAttribute('href'); 
    } else { 
     echo $link->getAttribute('href'), "\n"; 
    } 
} 

Eine andere Sache, Unterdrückung von Fehlern (@) ist nicht der Weg zu gehen. Suchen Sie nach einer anderen Lösung, die fehlerfrei funktioniert.

0

Ich würde eine Kombination aus dem Symfony2 Framework und Goutte empfehlen.

Symfony2: https://symfony.com/

Goutte: https://github.com/FriendsOfPHP/Goutte

Sie würden eine neue Instanz machen:

use Goutte\Client; 
$client = new Client(); 

Dann fordern Sie die Seite:

// Go to the symfony.com website 
$crawler = $client->request('GET', 'http://www.symfony.com/blog/'); 

Dann versuchen Sie, was zu bekommen Sie benötigen:

$links = $crawler->filter('a[href]'); 
foreach ($links as $link) { 
    echo '<a href="$link">$link</a><br>'; 
}