alle LINKS und titel der Links aus einer Datei extrahieren
TaiSon
- php
Ich möchte gerne alle Links, URLs aus einer Datei, Seite auslesen, inkl. des Titels
Das mit der URL bekomme ich einigermassen hin, aber nicht das mit dem Titel, Ich habe zwar einen Rest der in $links[0] steht, aber ich denke das ist auch alles andere drin.
Wie gehe ich am besten vor, wenn ich die Atribute titel und name auch noch rausfiltern will
$ausgangsdatei = 'http://www.google.de';
$html = file_get_contents($url);
$links = array();
if (preg_match_all('/<a\s+.*?href=[\"\']?([^\"\' >]*)[\"\']?[^>]*>(.*?)<\/a>/si', $html, $links)) {
$links = $links[1];
}
echo'<pre>';
print_r ($links);
echo'</pre>';
Hallo,
Ich möchte gerne alle Links, URLs aus einer Datei, Seite auslesen, inkl. des Titels
Wie gehe ich am besten vor, wenn ich die Atribute titel und name auch noch rausfiltern will
Benutze die DOMDocument-Klassen
Grüße
TS
Hallo TS,
Wau das ist richtig super...
$att_ahref = $dom->getElementsByTagName('a');
und schon habe ich alle <a> LINKS
mit...
foreach ( $att_ahref as $key => $value )
{
}
... lesen ich es aus.
Aber wa sich nicht kapiere...
mit
print_r ($att_ahref);
oder
var_dump ($att_ahref);
bekomme ich keine Übersicht.
Hallo TaiSon,
Wau das ist richtig super...
$a_nodeList = $dom->getElementsByTagName('a');
und schon habe ich alle <a> LINKS
Du bekommst eine Nodelist. Das ist eine Life-Collection (aktive Verweisliste) auf den originalen DOT (Documnet Object Tree).
Die Liste kannst Du mit foreach() iterieren, so wie Du das schon machst. Das Foreach() ist da aber nur "reingebastelt". Die übrigen Eigenschaften, die Foreach sonst auszeichnet (in der prozeduralen Programmierung) funktionieren hier (noch) nicht. Alternatic kannst Du mit
$a_node = $a_nodeList->item($index);
direkt auf eine Zeile in der Liste zugreifen. Die Zählung beginnt bei 0. Du solltest aber den Index ($index) nicht außerhalb des erlaubten Ranges wählen. Das gibt auf die Finger.
Die Anzahl der Nodes erfährst Du mit
$anzahl = $a_nodeList->length;
Das musst Du aber nicht umkopieren, habe ich hier nur zum Merken gemacht. Du kannst immer direkt mit den Properties arbeiten.
Du solltest auch besser gewählte Variablennamen nutzen. Du kannst die Nodes dann auch weiter auslesen.
foreach ( $a_nodelist as $itemno => $node )
{
if ($node->hasAttributes())
{
print_r($node->attributes);
}
echo $node->textContent;
}
... lesen ich es aus.
Aber wa sich nicht kapiere...
mit
print_r ($att_ahref);
Ja, das ist ein Objekt (hier eine "Life-Collection" oder "Dynaset" of Objects) und print_r() und var_dunp() können die Objekte (noch) nicht vollständig darstellen (da die flüchtig sind). Das will man meistens auch nicht. Hängt auch von der PHP-Version ab, was die inzwischen können.
Hangel dich einfach mal durch alle Methoden und Properties von DOMDocument und DOMNode, das sind die wichtigsten.
Grüße
TS
Hallo TaiSon,
> foreach ( $a_nodelist as $itemno => $node )
> {
> if ($node->hasAttributes())
> {
>## print_r($node->attributes);
> }
>
> echo $node->textContent;
> }
Das machen wir noch etwas anders:
foreach ( $a_nodelist as $index => $node )
{
if ($node->hasAttributes())
{
$liste = array();
foreach ($node->attributes as $attr)
{
$liste[$attr->nodeName] = $attr->nodeValue;
}
print_r($liste);
}
echo $node->textContent;
}
Grüße
TS