Ziehen Sie HTML-Inhalt aus remote-website-und-Anzeige auf Seite
Schon eine Weile und bin jetzt ratlos. Ich bin versucht, ziehen Sie die Inhalte aus, die innerhalb eines bestimmten div-Element auf eine remote-website-Seite und dann einfügen, die html in einem div auf meiner eigenen website. Ich weiß, dass Sie nicht allein die Verwendung von jQuery .ajax, .laden, oder .get-Methoden für diese Art von operation.
Hier ist der remote-Seite HTML:
<html>
<body>
<div class="entry-content">
<table class="table">
...table #1 content...
...More table content...
</table>
<table class="table">
...table #2 content...
</table>
<table class="table">
...table #3 content...
</table>
</div>
</body>
</html>
Ziel:
Ich bin versucht zu Holen, den html-Code aus der remote-Seite die erste Tabelle. Also, auf meiner website, ich würde gerne den folgenden html-Code abgerufen werden und platziert in einem div id="geholt-html":
<table class="table">
...table #1 content...
...More table content...
</table>
Hier bin ich mit meinem PHP-Funktion so weit:
<?php
function pullRaspi_SDImageTable() {
$url = "http://www.raspberrypi.org/downloads";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curl);
curl_close($curl);
//Create new PHP DOM document
$DOM = new DOMDocument;
//Load html from curl request into document model
$DOM->loadHTML($output);
//Get 1st table
$output = $DOM->firstChild->getElementsByTagName('table');
return $output;
}
?>
Das Endergebnis sollte so Aussehen wie diese auf meinem lokalen Webseite:
<div id="fetched-html">
<table class="table">
...table #1 content...
...More table content...
</table>
</div>
Hier ist ein weiteres PHP-Funktion die Möglichkeit?
<?php
function pullRaspPi_SDImageTable() {
//Url to fetch
$url = "http://www.raspberrypi.org/downloads";
$ch = curl_init($url);
$fp = fopen("raspberrypi_sdimagetable.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
//Write html source to variable
$rasp_sdimagetable = curl_exec($ch);
//Close curl request
curl_close($ch);
return $rasp_sdimagetable;
}
//Then in the head of the html, add this jQuery:
<script type="text/javascript">
$("#fetched-html").load("<?php pullRaspPi_SDImageTable(); ?> table.table:first");
</script>
Problem ist, dass weder funktioniert. 🙁 Irgendwelche Gedanken?
InformationsquelleAutor kaffolder | 2013-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Extrahieren eines fragments von HTML von einer website ist ein Kinderspiel mit simplehtmldom können Sie dann etwas wie:
Die Ihnen die
table.table
HTMLEs ist, natürlich, ein wenig mehr Aufwand als die Verwendung von DomDocument-da dies ist eine benutzerdefinierte Klasse, aber es ist gut geschrieben und wird von vielen Projekten. In diesem Fall, wäre es nicht viel langsamer. Die Zeit, die es braucht, um Holen Sie sich das Dokument von einem remote-server (über curl oder sonst was) ist die Reale Belastung. Also ich würde implementieren Sie eine einfache Datei-cache zu cache das Ergebnis der Ausgang für 10 Minuten. Diese geben Ihnen die beste Leistung, wenn Ihre Website wird mehrmals gezogen werden, da eine nachträgliche Anfragen sind gedumpten aus dem cache.
Könnten Sie mich in die richtige Richtung, wie implementieren Sie eine einfache Datei-cache und cache das Ergebnis unter Verwendung entweder simplehtmldom oder DomDocument Modell? Sorry, ich bin sehr viel ein PHP-Anfänger. Etwas wie das vielleicht? http://davidwalsh.name/php-cache-function
Sicher, ich aktualisierte meine Antwort auf ein einfaches Datei-cache.
Schön @itsmejodie!! Vielen Dank! Noch ein paar kurze Fragen... wie konnte ich nur Analyse/Auswahl der ersten Tabelle in der abgerufenen html? Derzeit, glaube ich, dass alle Tabellen in <div class="entry-content"> werden analysiert und angezeigt, richtig? Auch, simplehtmldom ist einmal erforderlich, bevor die Funktion. Hat diese stellen eine große Belastung auf dem server? Jedesmal, wenn jemand zuvor auf der Seite und die Funktion ausführen, denke ich, wird diese Datei neu geladen werden? Oder ist es in den Speicher geladen, das erste mal die Funktion ausgeführt wird. Weil das PHP-Skript lokal ist, ist der speed-Verlust/Belastung vernachlässigbar?
InformationsquelleAutor itsmejodie
Ja, Sie können ABER die remote-website muss Ihnen die Berechtigung für das.. nur das einfügen einer iframe und mit den üblichen DOM-Funktionen, könntest du, WENN ES IST NICHT cross-domain-Beschränkungen.
Können Sie eine ganze Seite nur mit php (mit den üblichen Funktionen, include, require, etc. und übergeben Sie die URL der website, aber der gleiche Fall, müssen Sie autorisiert sein..
InformationsquelleAutor Neo