2017-06-26 1 views
-2

Ich bin in der Lage die meisten Seiten mit dem folgenden Code zu kratzen, aber einige umleiten mich => distil_r_blocked.htmlWeb Scraping umleiten

Dies ist der Header-I

HTTP/1.1 200 OK Date: Mon, 26 Jun 2017 20:30:12 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Expires: Thu, 01 Jan 1970 00:00:01 GMT Cache-Control: no-cache Cache-Control: private, no-cache, no-store, must-revalidate Edge-Control: no-store, bypass-cache Surrogate-Control: no-store, bypass-cache 

bekommen und dies ist mein Code

function file_get_contents_curl($target_url,$json=false){ 
$ch = curl_init(); 
$headers = array(); 
if($json) { 
    $headers[] = 'Content-type: application/json'; 
    $headers[] = 'X-HTTP-Method-Override: GET'; 
} 
$options = array(
    CURLOPT_URL => $target_url, 
    CURLOPT_HTTPHEADER => array($headers), 
    CURLOPT_TIMEOUT => 300, 
    CURLOPT_FOLLOWLOCATION => 1, 
    CURLOPT_AUTOREFERER => 1, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_HEADER => 1, 
    CURLOPT_FOLLOWLOCATION => 1, 
    CURLOPT_MAXREDIRS => 3, 
    CURLOPT_TIMEOUT => 10, 
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9'); 
curl_setopt_array($ch,$options); 
$response = curl_exec($ch); 
if($response === false || curl_error($ch)) { 
    curl_close($ch); 
    return false; 
} else { 
    curl_close($ch); 
    return $response; 
} 
} 

// Create a curl handle to a non-existing location 
$ch = curl_init($target_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

if(curl_exec($ch) === false) 
{ 
echo 'Curl error: ' . curl_error($ch); 
} 
else 
{ 
echo 'Operation completed without any errors'; 
} 

$data = file_get_contents_curl($target_url); 
$html = str_get_html($data); 

Gibt es sowieso um die Weiterleitung?

Danke, Simon

+1

haben Sie vielleicht den Anstand, sie zu respektieren und nicht diejenigen zu kratzen, die Sie nicht wollen? – rtfm

Antwort

1

Ihre cURL Option CURLOPT_FOLLOWLOCATION wird auf TRUE gesetzt, was bedeutet, es Umleitungen folgen. Setze es auf 0 und es folgt nicht der Weiterleitung. Sie verwenden diese Option auch zweimal, wenn dies nicht erforderlich ist.

In Bezug auf das Abrufen des ursprünglichen Inhalts können Sie dies nicht steuern, da der Server die Antwort steuert. Im besten Fall kannst du versuchen, Header zu fälschen oder verschiedene IPs zu verwenden, aber das ist im Allgemeinen verpönt ... vor allem, weil es ein skizzenhaftes Verhalten ist (meiner Meinung nach).