2009-05-04 14 views
63

Chcę pobrać kod HTML linku (strony WWW) w PHP. Na przykład, jeśli link jestJak uzyskać kod HTML strony internetowej w PHP?

https://stackoverflow.com/questions/ask

potem chcę kod HTML strony, który jest lepszy. Chcę pobrać ten kod HTML i zapisać go w zmiennej PHP.

Jak mogę to zrobić?

+0

Czy możesz wyjaśnić to jeszcze bardziej. Chcesz wysłać żądanie sieciowe pod wskazany URL i odczytać odpowiedź na zmienną? –

+0

Tak, tego samego chcę, chcę całego kodu źródłowego w zmiennej zwracanej przez to żądanie WWW. – Prashant

+1

Możesz użyć [tego narzędzia] (http://codecanyon.net/item/javascript-web-scraper/8598806), aby łatwo pozbyć się html. –

Odpowiedz

94

Jeśli serwer PHP pozwala owijarki url fopen wówczas najprostszym sposobem jest:

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

Jeśli potrzebujesz większej kontroli następnie należy spojrzeć na funkcje cURL:

$c = curl_init('http://stackoverflow.com/questions/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); 
+0

Martwię się o 404. Jeśli link nie istnieje, to nie chcę jego zawartości, zamiast tego chcę wyświetlić komunikat o błędzie? Jak przekonamy się, że adres URL podaje błąd 404 lub nie (po prostu adres URL działa, czy nie)? – Prashant

+1

@Prashant: Edytowałem, aby dodać wywołanie curl_getinfo, które da ci 200 lub 404 lub cokolwiek innego – Greg

+0

Jak to jest możliwe, że PHP pobiera bieżący HTML strony? –

8

Prosty sposób: Zastosowanie file_get_contents():

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

Należy pamiętać, że musi być trueallow_url_fopen w was php.ini, aby móc korzystać z URL-aware fopen owijarki.

Bardziej zaawansowany sposób: Jeśli nie można zmienić konfigurację PHP, allow_url_fopen jest false domyślnie i jeśli jest zainstalowany ext/curl, użyj cURL library aby połączyć się z żądaną stroną.

10

Możesz sprawdzić bibliotek YQL z Yahoo: http://developer.yahoo.com/yql

Zadanie pod ręką jest tak proste jak

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

Można spróbować tego w konsoli pod adresem: http://developer.yahoo.com/yql/console (wymaga zalogowania)

zobaczyć także Chris Heilmanns screencast na kilka ciekawych pomysłów, co jeszcze można zrobić: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html

1

możesz użyć file_get_contents, jeśli chcesz przechowywać źródło jako zmienną, ale curl jest lepszym ćwiczeniem.

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

to rozwiązanie wyświetli stronę w witrynie. Jednak curl jest lepszą opcją.

0

Oto dwa różne, prostych sposobów, aby uzyskać zawartość z URL:

1) Pierwsza metoda

Włącz allow_url_include z hostingu (PHP.ini albo gdzieś)

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

lub

2) Druga metoda

Włącz php_curl, php_imap i 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; 
?> 
Powiązane problemy