ich würde gerne eine webseite mit php auf text zwischen zwei bestimmten tags auslesen. habe bereits eine function die mir den gesamten quelltext in einen string einliest - readsite(url) - habe probiert dann mit explode die tags zu trennen, habe aber mit den arrays immer nur fehlermeldungen erhalten! kann mir jemand vielleicht verraten wie das gscheit funktioniert?
webseite auslesen
-
-
Nicht alle HTML-Tags müssen geschlossen werden, zB img oder option.
Ansonsten benutz doch das hier:diebstahl.php
PHP
Alles anzeigen<?php function diebstahl($url,$tag) { $content = file_get_contents($url); $reg = "/<$tag(.*)>(.+)<\/$tag>/i"; preg_match_all($reg,$content,$matches); return preg_replace($reg,"\\2",$matches[0]); } echo "<pre>"; print_r(diebstahl("https://informatik-forum.at/showthread.php?p=600426","a")); echo "</pre>"; ?>
-
hi,
du kannst die seite auch mit der DOM Extension von php (bei php5 standardmäßig dabei) einlesen und per XSLT daten herausfiltern und ein neues XML-Dokument erstellen - vorrausgesetzt die einzulesende seite ist ein valides XML Dokument. das ganze ist zwar etwas mehr aufwand, dafür hast du mit XSL ein sehr mächtiges werkzeug mit dem du die ganze seite in ihre einzelteile zerlegen kannst.
dazu musst du vortäuschen ein browser zu sein:
PHPini_set("user_agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
dann holst du dir das XML (also die HTML-seite):
jetzt erstellen wir einen filter mit XSL:
PHP
Alles anzeigen$xsl = '<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/html/body/erstesTag/zweitesTag"> <!-- zb erzeugen wir eine neue html-seite mit dem "gecrawlten" content: --> <html> <body> <xsl:value-of select="@bestimmtesTagWelchesImZweitenTagEnthaltenIst" /> </body> </html> </xsl:template> </xsl:stylesheet>'; $xslDom = new DOMDocument; $xslDom->loadXML($xsl);
danach müssen wir noch den filter anwenden:
PHP$proc = new XSLTProcessor; $proc->importStylesheet($xslDom); $result = $proc->transformToXML($xmlDom); echo $result;
eine simplere lösung wäre die seite per SimpleXML zu laden:
-
Nicht alle HTML-Tags müssen geschlossen werden, zB img oder option.
Ansonsten benutz doch das hier:diebstahl.php
PHP
Alles anzeigen<?php function diebstahl($url,$tag) { $content = file_get_contents($url); $reg = "/<$tag(.*)>(.+)<\/$tag>/i"; preg_match_all($reg,$content,$matches); return preg_replace($reg,"\\2",$matches[0]); } echo "<pre>"; print_r(diebstahl("https://informatik-forum.at/showthread.php?p=600426","a")); echo "</pre>"; ?>
danke funktioniert super. wo find ich info über diese zeichen /< (.*) etc.?Zitat von cherrybonbonvorrausgesetzt die einzulesende seite ist ein valides XML Dokument
Nein, es handelt sich um eine html seite mit links zu audio bzw video dateien
-
(deleted)
-
danke funktioniert super. wo find ich info über diese zeichen /< (.*) etc.?
Auf php.net findest du zu allen in PHP integrierten Funktionen recht gute Dokumentation.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!