# Auf fremde Webseiten zugreifen und Inhalte für eigene Webseite verwende



## mariatroeger (12. November 2015)

Hallo community, 

ich hätte mal eine Frage: wir würden gerne eine Seite aufbauen die aus Inhalten zwei anderer Webseiten besteht (Die Erlaubnis der Betreiber haben wir schriftlich und demnach wäre das kein Problem)

Meine Frage:  wie kann ich auf bestimmte DIV´s zugreifen bzw. wie kann ich diese Elemente auf der eigenen Seite darstellen ?   PHP ist wohl das richtige Werkzeug dafür , oder ? 

Für jede Hilfe bedanke ich mich jetzt schon ;-)

LG 
mari


----------



## merzi86 (12. November 2015)

Für die Auswertung würde ich dir die DOMDocument-Klasse empfehlen.
Mit dieser Klasse kann man das HTML gut auswerten und das Element beziehen, welches man möchte.

Zum Auslesen der Seite fallen mir auf anhieb 2 Varianten ein
Die erste Variante ist die betreffende Seite per file_get_contents auslesen und den gewonnene 
HTML Code der Mehtode DOMDocument::loadhtml übergeben.

Die andere Variante wäre die Seite gleich mittels DOMDocument::loadHTMLFile zu laden dadurch wäre die Dom Struktur bereits geladen.

Bei der 2. Variante bin ich mir aber nicht zu 100% sicher, dass sie funktioniert.

Ich hoffe, dass ich dir helfen konnte oder zumindest ein paar Ideen verschaffen konnte.


----------



## mariatroeger (13. November 2015)

Vielen Dank @merzi86 für deine Antwort.  

Gibt es zu diesem Thema ein hilfreiches Tutorial für Dummys ?    Das was ich bisher im Netz gefunden habe ist nicht ... ähm, leicht verständlich !  

LG
mari


----------



## merzi86 (16. November 2015)

Ein direkte Anleitung hab ich leider nicht.
So kompliziert ist es auch nicht 

Ich habe es einmal ausprobiert und es funktioniert auch direkt mit der Methode loadHTMLFile.
Dadurch reicht dieser Code, um den Inhalt von des Divs mit der ID meinDIV abzufangen und auszugeben.


```
$file = 'https://www.meine-domain.de';
$DOM = new DOMDocument( );
    $DOM ->loadHTMLFile($file);
   
    $NODE = $DOM ->getElementById('meinDIV');
   
    echo $NODE ->nodeValue;
```

Es kommt dann nur darauf an, was du genau vorhast.


----------



## mariatroeger (1. Dezember 2015)

Hi merzi86, 

vielen Dank für deine Antwort, leider kriege ich bei meinem Versuch einige Fehlermeldungen. 

Habe es mal mit folgenden Beispiel getestet: 


```
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>dom-test</title>
</head>

<body>

<?php

$file = 'https://www.tutorials.de';
$DOM = new DOMDocument( );
    $DOM ->loadHTMLFile($file);
  
    $NODE = $DOM ->getElementById('logo');
  
    echo $NODE ->nodeValue;
   
?>

</body>
</html>
```


und folgende Fehlermeldungen erhalten 




> *Warning*: DOMDocument::loadHTMLFile(): Tag nav invalid in https://www.tutorials.de, line: 132 in *C:\xampp\htdocs\dom.php* on line *14*
> 
> *Notice*: DOMDocument::loadHTMLFile(): Namespace prefix xen is not defined in https://www.tutorials.de, line: 162 in *C:\xampp\htdocs\dom.php* on line *14*
> 
> ...




was habe ich falsch gemacht ?


----------



## saftmeister (5. Dezember 2015)

Prinzipiell hast du nichts falsch gemacht. DOMDocument kann (noch) nicht mit HTML5 umgehen, tutorials.de verwendet jedoch HTML5, wie man am DOCTYPE-Header erkennen kann (siehe HTML-Source-Code).

Es gibt PHP-Libs, die das können, evtl. möchtest du dir mal https://github.com/html5lib/html5lib-php ansehen. Sieht allerdings so aus, als würde das nicht mehr weiter entwickelt.


----------



## Robby12 (6. Dezember 2015)

Inhalte aus HTML Webseiten in eine andere übertragen ist eigentlich kein Problem, es sei denn diese Seite nutzt php, denn php ist eine Serverseitiges Scriptsprache, bedeutet der Betrachter der Seite sieht das, was er aufgerufen hat, bei html sieht er das was html zu Verfügung stellt.
Bei html sind die Texte und Bilder fest in der Seite eingebaut und der Browser läd die gesamte Seite. Bei php dagegen werden die Inhalte meistens erst über eine Datenbank abgerufen, dabei bleibt das Template (Theme) also das Aussehen der Homepage nicht nur gleich, sondern es bleibt die Selbe es wird lediglich der Inhalt verändert, also Texte und Bilder.

Möchtest du eine komplette Homepage samt Inhalte kopieren oder nur die Inhalte wie Bilder und Texte? Wenn nur die Inhalte, dann würde ich eine verbindung zur Datenbank aufbauen und diese abrufen.
Wenn du wie du schreibst eh die Erlaubniss hast, dann frag doch mal welches CMS-System diese nutzt, denn dann könntest du das selbe CMS installieren und nutzt die selbe Datenbank anbindung.


----------



## Robby12 (6. Dezember 2015)

Hi merzi86, was du falsch gemacht hast? Du musst das Script mit deinen Daten anpassen. https://www.tutorials.de müsstest du laut der Fehlermeldung ändern.


----------



## sheel (6. Dezember 2015)

Paar Gegenpunkte:

PHP ist nicht unbedingt ein Problem. Im Gegensatz zu reinen HTML-Seiten muss man aber
beachten, was das Programm macht, statt einfach stupide alles Erhaltene herunterzuladen.
Beispiele wären
a) die Forenthreads hier. Wenn man nicht weiß, dass es eine Beitrags-ID
gibt usw. wird man schwer alle Beiträge laden können
b) bei sowas wie Zufallszahlengeneratoren oder Sachen, die direkt von beliebigen
Formulareingaben abhängen kann man natürlich schwer "alles" herunterladen
c) Logins etc. erforderlich, da muss man seinen Doanload eben entsprechend anpassen.
d) Auf sowas wie Templates verlassen hängt auch immer von der eigentlichen Seite ab.
...kurz, der Download muss für jede Webseite separat programmiert werden,
Aber es geht.

Ein externer Datenzugriff ist bei den vielen Hostern etc. aus Sicherheitsgründen
nicht möglich, auch wenn der Seitenbetreiber es einem erlauben würde.
Und auch wenn, ist es alles andere als ratsam.

Warum sollte man das selbe CMS brauchen?


----------



## Robby12 (6. Dezember 2015)

sheel, im grunde hast Du Recht, aber das selbe CMS macht die Übertragung von einer in die andere DB einfacher, da es die selben Tabellen und Tabellennamen sind.
Es ist dann auch einfacher ein php-Script zu schreiben, das die Daten abruft.
Wenn die andere Seite ein cms-System nutzt, so könnte man die Inhalte in RSS Feeds bereit stellen und diese auf jeder Homepage einbinden.


----------

