Wie erhalte ich den HTML-Code einer Webseite in PHP?

90

Ich möchte den HTML-Code eines Links (einer Webseite) in PHP abrufen. Zum Beispiel, wenn der Link ist

/programming/ask

dann möchte ich den HTML-Code der Seite, die geliefert wird. Ich möchte diesen HTML-Code abrufen und in einer PHP-Variablen speichern.

Wie kann ich das machen?

Prashant
quelle
Können Sie es bitte näher erläutern? Sie möchten eine Webanforderung an eine bestimmte URL senden und die Antwort auf eine Variable lesen, denke ich?
Chathuranga Chandrasekara
Ja, das gleiche, was ich möchte, ich möchte den gesamten Quellcode in einer Variablen, die von dieser Webanforderung zurückgegeben wird.
Prashant
1
Sie können dieses Tool verwenden , um HTML einfach zu verschrotten.
Faraz Kelhini
Selbst wenn allow_url_fopen auf true gesetzt ist, gibt diese Funktion den HTML-Code der Seite nicht zurück. Was soll ich noch überprüfen?
CodeForGood

Antworten:

136

Wenn Ihr PHP-Server URL-Fopen-Wrapper zulässt, ist der einfachste Weg:

$html = file_get_contents('/programming/ask');

Wenn Sie mehr Kontrolle benötigen, sollten Sie sich die cURL- Funktionen ansehen :

$c = curl_init('/programming/ask');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
//curl_setopt(... other options you want...)

$html = curl_exec($c);

if (curl_error($c))
    die(curl_error($c));

// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);

curl_close($c);
Greg
quelle
Ich mache mir Sorgen um 404. Falls der Link nicht existiert, möchte ich seinen Inhalt nicht, sondern eine Fehlermeldung anzeigen? Wie werden wir feststellen, dass die URL einen 404-Fehler ausgibt oder nicht (einfach funktioniert die Menü-URL oder nicht)?
Prashant
1
@Prashant: Ich habe bearbeitet, um einen Aufruf von curl_getinfo hinzuzufügen, der Ihnen 200 oder 404 oder was auch immer gibt
Greg
Auch wie ist es möglich, dass PHP den aktuellen Seiten-HTML-Code erhält?
Renaro Santos
Ist das domänenübergreifend?
I.Am.A.Guy
Funktioniert nicht mit PHP7. Überprüft die php.ini und fopen ist On.
Kaspar L. Palgi
22

Auch wenn Sie die abgerufene Seite irgendwie manipulieren möchten, sollten Sie einen PHP-DOM-Parser ausprobieren. Ich finde PHP Simple HTML DOM Parser sehr einfach zu bedienen.

Dmitri Pisarev
quelle
11

Vielleicht möchten Sie die YQL-Bibliotheken von Yahoo auschecken : http://developer.yahoo.com/yql

Die Aufgabe ist so einfach wie

select * from html where url = 'http://stackoverflow.com/questions/ask'

Sie können dies in der Konsole unter folgender Adresse ausprobieren: http://developer.yahoo.com/yql/console (Anmeldung erforderlich)

Siehe auch Chris Heilmanns Screencast für einige nette Ideen, was Sie noch tun können: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html

Ickmund
quelle
10

Einfacher Weg: Verwenden Sie file_get_contents():

$page = file_get_contents('http://stackoverflow.com/questions/ask');

Bitte beachten Sie, dass allow_url_fopendies truein Ihnen php.inisein muss, um URL-fähige Fopen-Wrapper verwenden zu können.

Fortgeschrittenere Methode: Wenn Sie Ihre PHP-Konfiguration nicht ändern können, allow_url_fopenist dies falsestandardmäßig der Fall. Wenn ext / curl installiert ist, verwenden Sie die cURLBibliothek , um eine Verbindung zur gewünschten Seite herzustellen.

Stefan Gehrig
quelle
Selbst wenn allow_url_fopen auf true gesetzt ist, gibt diese Funktion den HTML-Code der Seite nicht zurück. Was soll ich noch überprüfen?
CodeForGood
4

Sie können file_get_contents verwenden, wenn Sie die Quelle als Variable speichern möchten, Curl jedoch besser geeignet ist.

$url = file_get_contents('http://example.com');
echo $url; 

Diese Lösung zeigt die Webseite auf Ihrer Website an. Curl ist jedoch eine bessere Option.

Schweinestall
quelle
2

Hier sind zwei verschiedene, einfache Möglichkeiten, um Inhalte von der URL abzurufen :

1) die erste Methode

Aktivieren Sie Allow_url_include von Ihrem Hosting (php.ini oder irgendwo)

<?php
$variableee = readfile("http://example.com/");
echo $variableee;
?> 

oder

2) die zweite Methode

Aktivieren Sie php_curl, php_imap und php_openssl

<?php
// you can add anoother curl options too
// see here - http://php.net/manual/en/function.curl-setopt.php
function get_dataa($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

$variableee = get_dataa('http://example.com');
echo $variableee;
?>
T.Todua
quelle
1

Mit der DomDocument-Methode können Sie auch eine einzelne Variable auf HTML-Tag-Ebene abrufen

$homepage = file_get_contents('https://www.example.com/');
$doc = new DOMDocument;
$doc->loadHTML($homepage);
$titles = $doc->getElementsByTagName('h3');
echo $titles->item(0)->nodeValue;
Krishnamoorthy Acharya
quelle
1

$output = file("http://www.example.com");hat nicht funktioniert , bis ich aktiviert: allow_url_fopen, allow_url_include,und file_uploadsin php.inifür PHP7

Ken
quelle