• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Link text per DOM

Markus92

Mitglied
Hallo,

wie bekomme ich bei folgendem link den Text, also 0,80
HTML:
<a href="abc.de" id="a0404">0,80</a>

mein Code:
Code:
<?php>
$html="website";
$dom= new DOMDocument;
$dom->loadHTML($html);
$a = $dom->getElementById("a0404");
$data=???;
?>

Was kann ich da bei $data hinschreiben um 0,80 zu erhalten?
 
Werbung:
Wenn der Link schon vorhanden ist:
http://us1.php.net/manual/de/function.strip-tags.php
oder

mit deinem Quelltext:
PHP:
$dom = new DomDocument;
$dom->load($html);
$data = $dom->textContent;

echo $data;

Hast du meherer Zeilen dann so:

PHP:
$dom = new DomDocument;
$dom->Load($html);
$dom->getElementByid('a');
$data = $dom->textContent;
$d = explode("\n",$data);

for($i = 0; $i < count($d); $i++)
{
    echo $i.':'.$d[$i]."<br>";
}
 
Zuletzt bearbeitet:
Werbung:
Wenn der Link schon vorhanden ist:
http://us1.php.net/manual/de/function.strip-tags.php
oder

mit deinem Quelltext:
PHP:
$dom = new DomDocument;
$dom->load($html);
$data = $dom->textContent;

echo $data;

Hast du meherer Zeilen dann so:

PHP:
$dom = new DomDocument;
$dom->Load($html);
$dom->getElementByid('a');
$data = $dom->textContent;
$d = explode("\n",$data);

for($i = 0; $i < count($d); $i++)
{
    echo $i.':'.$d[$i]."<br>";
}


Ok, kanns sein, dass dein Code zum auslesen des gesamten Seiteninhalts ist?
ich wollte eigentlich nur einen wert auf einer großen Seite auslesen
 
Um den Wert zu finden, muss die gesamte Seite geparsed werden, ob Dom da überhaupt der richtigeWeg ist, darüber könnte man diskutieren. Dom wird eigentlich für XML-Dokumente verwendet. Bei Webseite gehe ich aber automatisch von HTML-Seiten aus.

Eine andere simplere Lösung ist:
PHP:
$html="DEINE_WEBSEITE";
$id_to_search = 'a0404';

$data = file($html);
$gesuchter_Wert = '';
for($i = 0; $i < count($data); $i++)
{
  if(stristr($data[$i],'id="'.$id_to_search.'"'))
  {
      $gesuchter_Wert = strip_tags($data[$i]);
      break;
  }
}

echo $gesuchter_Wert;
Das hat den Vorteil, dass nicht die ganze Webseite geparsed werden muss, es wird abgebrochen, wenn die ID gefunden wird.
 
Werbung:
Um den Wert zu finden, muss die gesamte Seite geparsed werden, ob Dom da überhaupt der richtigeWeg ist, darüber könnte man diskutieren. Dom wird eigentlich für XML-Dokumente verwendet. Bei Webseite gehe ich aber automatisch von HTML-Seiten aus.

Eine andere simplere Lösung ist:
PHP:
$html="DEINE_WEBSEITE";
$id_to_search = 'a0404';

$data = file($html);
$gesuchter_Wert = '';
for($i = 0; $i < count($data); $i++)
{
  if(stristr($data[$i],'id="'.$id_to_search.'"'))
  {
      $gesuchter_Wert = strip_tags($data[$i]);
      break;
  }
}

echo $gesuchter_Wert;
Das hat den Vorteil, dass nicht die ganze Webseite geparsed werden muss, es wird abgebrochen, wenn die ID gefunden wird.

Das funktioniert nicht richtig, es werden viel mehr Daten angezeigt als nötig.

Meine Lösung lautet im Moment:
function getWert($seite, $id){
if ($seite<>""){
$page = file_get_contents($seite);
$doc = new DOMDocument();
$doc->loadHTML($page);
$divs = $doc->getElementById($id);
return $divs->nodeValue;
}
}

Funktioniert, Performance ist aber nicht wirklich gegeben.
 
Der Aufbau hat sich etwas geändert...
<div class="cat_catbox">
<div id="a1030" class="cat_titel">
<a href="" title="">Land Münze Jahr</a>
</div>
<div class="cat_preis">
<a href="" title="">0,70</a>
</div>
</div>

Bin für neue Ideen offen bitte erneut um Hilfe
 
Werbung:
Hallo,

PHP:
function getValue( $seite, $id ) {

    $sHtmlContent = file_get_contents( $seite );

    $oDom = new DOMDocument;
    $oDom->loadHTML( $sHtmlContent );

    $oXPath = new DOMXPath( $oDom );
    $oNodeList = $oXPath->query( '//div[@class="cat_preis"]/a' );

    return $oNodeList->item(0)->nodeValue;

}

Wenn Du mehr über DOMDocument/DOMXPath lernen willst, schau einfach vorbei:
Einführung in DOMDocument und DOMXPath

Gruß Arne
 
Vielen Dank schonmal für deine Antwort, mein Problem ist aber dass dies nicht der einzige solche Bereich auf der Seite ist, sondern es gibt 1000 davon auf einer Seite bei denen sich nur die div-id, die hrefs und die titles unterscheiden, dazu unterscheiden sich jahr und münze, also hilft dein Code nur bedingt
 
Hallo,

Naja, dann passt Du halt die Query an:
PHP:
$oNodeList = $oXPath->query( '//div[@id="' . $id . '"]../div[@class="cat_preis"]/a' );

Gruß Arne
 
Werbung:
function getWert($seite, $id){
if ($seite<>""){
$sHtmlContent = file_get_contents( $seite );

$oDom = new DOMDocument;
$oDom->loadHTML( $sHtmlContent );

$oXPath = new DOMXPath( $oDom );
$oNodeList = $oXPath->query( '//div[@id="' . $id . '"]../div[@class="cat_preis"]/a' );

return $oNodeList->item(0)->nodeValue;
}
}
 
Hallo,

Ja... Eine geschweifte schliessende Klammer zu viel!

EDIT: Ach quatsch, Du hast ein IF eingebaut, dann passt das mit der Klammer.
Einen String vergleicht man aber in PHP mit != auf ungleich.

Gruß Arne
 
Werbung:
Fehlermeldung ist weg - funktioniert aber trotzdem nicht :/ es wird nichts angezeigt wenn ich die funktion mit einem echo ausgebe
 
Werbung:
Hallo,

Dann machst Du etwas falsch, hab's eben selbst getestet, kommt 0,70 als Ausgabe.
Zumindest, wenn Dein HTML wirklich Ausschnitte, wie in #8 hat und die Funktion nun richtig ist.

Gruß Arne
 
Also jeder Punkt auf der Seite sieht so aus:
Code:
<div class="cat_itembox">
   <div class="cat_preuser"><a href="Belgien-1-Cent-Muenze-1999-1030.php" title="Zum Artikel: Belgien 1 Cent Münze 1999 hier klicken"><img src="//img03.euro-muenzen.tv/mini/Belgien-1-Cent-Muenze-1999-1030-145473964065191.jpg" style="max-width:40px;max-height:40px;" alt="Zum Artikel: Belgien 1 Cent Münze 1999 hier klicken"></a></div>
<div class="cat_catbox">
<div id="a1030" class="cat_titel"><a href="Belgien-1-Cent-Muenze-1999-1030.php" title="Zum Artikel: Belgien 1 Cent Münze 1999 hier klicken">Belgien 1 Cent Münze 1999</a></div>
<div class="cat_preis"><a href="Belgien-1-Cent-Muenze-1999-1030.php" title="Zum Artikel: Belgien 1 Cent Münze 1999 hier klicken">0,70</a></div>
<div class="cat_info">Auflage: 235.240.000 </div>
</div>
</div>
 
Zurück
Oben