2017-11-17 1 views
0

Ich schreibe einen Crawler und mache es wie folgt ausgeben.(PHP) Wie mache ich die Ausgabe als eine Zeile nur nach dem Crawlen einer Tabelle

Nation/Area
(Namensschild) Details
Adresse
Telefon

Ich möchte diese Ausgabe als al in einer Zeile machen mit einem seperator-Tab präsentieren jeweils für Abschied td. Die erwartete Ausgabe ist wie folgt:

Nation/Area (Namensschild)         Details Adresse Telefon

Ich weiß nicht, wie man diesen Fall zu behandeln. Also poste ich den Ziel-HTML-Code und meinen Crawler-Code für die Antwort-Referenz.

Dies ist der Seitencode.

<table border='1' id='hi_hosts_table_id' cellspacing='0' cellpadding='4'> 
    <tr> 
     <td class='hi_table_header'><b>Nation/Area</b><br>(Name tag</td> 
     <td class='hi_table_header'><b>Detail</b><br>Address<br>Telephone</td> 
    </tr> 
</table> 

Dies ist der Crawling-Code.

$absolute_path = '/home/hi/mycrawler/benchmark'; 
include($absolute_path.'/simple_html_dom/simple_html_dom.php'); 
$dom = file_get_html($absolute_path.'/'.$datetime.'benchmark.html'); 
#download the list 
if ($dom->find('table[id=hi_hosts_table_id]')) 
{ 
    foreach($dom->find('table[id=hi_hosts_table_id]')->find('tr') as $row) 
    { 
     $location = $row->find('td',0)->plaintext; 
     $detail= $row->find('td',1)->plaintext; 
     echo "$location $detail\n"; 
    } 
} else { 
    #Pending match or not match 
    echo "No match. There are some problems.\n"; 
    exit(0); 
} 
curl_close($ch); 
exit(0); 
?> 
+0

möchten Sie nur eine Registerkarte in zwischen $ Lage und $ Detail verwenden ?? – divinemaniac

+0

Wenn Sie die Ausgabe auf 1 Zeile haben möchten, verwenden Sie nicht
innerhalb Ihrer. Dadurch wird der Ausgang gezwungen, zur nächsten Zeile zu wechseln. – Nic3500

Antwort

0

Wenn Sie $row->find('td',0) ausführen, ist das Ergebnis ein Knoten, der die <td class='hi_table_header'><b>Nation/Area</b><br>(Name tag</td> Teil des HTML beschrieben. Wenn Sie dann ->plaintext tun, wird der Code, der ausgeführt wird, simple_html_dom_node::text(). Während diese Methode eine Menge Dinge zu tun scheint, wandelt sie den HTML-Code nicht in den Klartext um ; Es gibt nur alle "Text" zurück.

Also, wenn Sie Zeilenumbruch entfernen möchten, müssen Sie das selbst zu tun haben:

$location = str_replace('<br>', ' ', $row->find('td',0)->plaintext); 
$detail= str_replace('<br>', ' ', $row->find('td',1)->plaintext); 
+0

Eine Ableitung von Materie ist hier. Wenn der 'td' einen Code als' Hinweis
Rate: 12 pt

58 min
Periode:
2 Wochen ', wie die' erhalten Hinweis
Rate: 12 pt

58 min
' nur. Der Rest von 'Zeitraum:
2 Wochen' Abschnitt möchte ich es loswerden. Danke noch einmal. – jefferyear

+0

Mann, Sie haben chaotisch HTML mit zu arbeiten. Ich * denke * Ich würde das auf dem '
' Tag mit' explode() 'teilen, entferne die letzten zwei Items von der Liste mit' array_slice() 'und kombiniere es dann erneut mit' implode() '. –

+0

Hallo, danke.Die Funktionen, die du nominiert hast, sind gut für mich, um zu erschaffen, was ich will. Danke noch einmal. – jefferyear

Verwandte Themen