2017-01-03 6 views
2

Hallo Ich habe ein Skript, das HTML-Daten von einer Webseite bekommt ...HTML DOM Parser - immer Klartext

//website is built like this: 

<table class="table table-hover"> 
<tr> 
    <td><b>Cover</b></td> 
    <td><b>Platz</b></td> 
    <td><b>Titel</b></td> 
    <td><b>Videolink</b></td> 
</tr> 
<tr> 
    <td><a href="http://www.youtube.com" target="_blank"><img src="youtube.jpg" /></a></td> 
    <td>1</td> 
    <td><a href="http://www.youtube.com" target="_blank">name</a></td> 
    <td><input type="text" onclick="this.select()" id="1" size="45" name="1" value="http://www.youtube.com" /></td> 
</tr><tr> 
<td><a href="http://www.youtube.com2" target="_blank"><img src="youtube.jpg2" /></a></td> 
    <td>1</td> 
    <td><a href="http://www.youtube.com2" target="_blank">name2</a></td> 
    <td><input type="text" onclick="this.select()" id="2" size="45" name="2" value="http://www.youtube.com2" /></td> 
</tr></table> 

PHP

<?php 

include 'core/functions/dom.php'; 
include 'core/init.php'; 

$url = "http://MYWEBSITE"; 
$html = file_get_html($url); 

$theData = array(); 

foreach($html->find('table tr') as $row) { 

$rowData = array(); 
foreach($row->find('td') as $cell) { 

    $rowData[] = $cell->innertext; 
} 

$theData[] = $rowData; 
} 
$list=($theData[2]); 
$name=($list[3]); 
echo $name; 

?> 

Die Daten werden nun in einer Variablen gespeichert ist! aber wenn ich es echo es ist ein Link ...

<a href="http://www.youtube.com2" target="_blank">name2</a> 

(Sie können das sehen, wenn Sie den Quellcode)

Ich brauche nur die „name2“ als Text, das kann ich stecke es in meine Datenbank!

Ein anderes Problem ist, dass es ein Textfeld ausschaltet. Es kann auch ich brauche nur den Text ...

<input type="text" onclick="this.select()" id="2" size="45" name="2" value="http://www.youtube.com2" /> 

Es brauche ich den Wert der Eingabe als Text für meine Datenbank!

+1

http://php.net/manual/en/function.strip-tags.php ist der einfachste Weg für dieses spezielle Problem, aber das wird auch die Bilder entfernen, wenn Sie nicht angeben, welche Tags zu behalten. – jeroen

+0

Sie müssen Ihre Frage deutlicher stellen. Ich kann nicht sagen, was du fragst. – Aaron

+0

mit Strip-Tags hat es funktioniert. Aber nur mit dem Link, weil ich dort den Text wantete. In meinem Texteingabefeld möchte ich den Wert ... ... So sollte der Text sein ... http://www.youtube.com – Marius

Antwort

1

Sie können dies erreichen, indem Sie eine eingebaute Klasse namens DOMDocument verwenden. Nachdem Sie Ihr Objekt instanziiert haben, können Sie die Methode getElementsByTagName('td') aufrufen, die aus dem Tag <td> Wertdaten (Nicht-Tag-Daten) extrahiert. Ich habe eine If-Bedingung hinzugefügt, um Whitespace zu ignorieren, da einige der <td> Tags keine Werte haben.

Code:

<?php 

$dom = new DOMDocument; 
$dom->loadHTML($html); 

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

foreach ($result as $v) { 

    echo $v->getAttribute('href') . ' ' . $v->nodeValue; 
    echo '<br>'; 

} 

Ausgang:

http://www.youtube.com 
http://www.youtube.com name 
http://www.youtube.com2 
http://www.youtube.com2 name2 

See: http://php.net/manual/en/domdocument.getelementsbytagname.php

Edit:

Ich habe Code aktualisiert, so dass URLs/Anchors & Werte (falls vorhanden) des A-Tags ausgegeben werden.

+0

$ dom-> loadHTML ($ html); Wo gebe ich die Website ein, von der ich den HTML-Code übernehmen möchte? Was ist der $ html hier? Wenn ich den Wert = "http://www.youtube.com" möchte, was muss ich dann tun? – Marius

+0

'$ html' ist Ihre Quelle' HTML', so dass Sie Ihren bestehenden Code verwenden können, wenn Sie möchten, stellen Sie einfach sicher, dass die 'HTML' Quelle in' $ html' gespeichert ist. Siehe aktualisierte Antwort für 'href' und' a' Werte. – Kitson88