2015-08-10 3 views
0

Я пытаюсь захватить HTML из приведенной ниже страницы, используя некоторые простые php.Почему file_get_contents возвращает искаженные данные?

URL: https://kat.cr/usearch/architecture%20category%3Abooks/

Мой код:

$html = file_get_contents('https://kat.cr/usearch/architecture%20category%3Abooks/'); 
echo $html; 

где file_get_contents работает, но возвращает вскарабкался данные:

scrambled data via PHP file_get_contents()

Я попытался с помощью cUrl, а также различные функции : htmlentities(),mb_convert_encoding, utf8_encode и т. Д., Но просто получайте разные варианты скремблированного текста.

Источник страницы говорит, что это charset=utf-8, но я не уверен, в чем проблема.

Вызов file_get_contents() на основании URL-адреса kat.cr возвращает тот же беспорядок.

Что мне здесь не хватает?

+1

HTTP: // StackOverflow .com/questions/11363022/get-url-content-php Проверьте это. –

+3

Смотрите: [Как я могу прочитать ответ GZIP-ed] (http://stackoverflow.com/q/8581924/55075) – kenorb

+0

scrapeing torrent site, thats kind low –

ответ

2

Ваш ответ сайт сжимается, поэтому вы, чтобы распаковывать, чтобы преобразовать его в первоначальном виде.

Самый быстрый способ заключается в использовании gzinflate(), как показано ниже:

$html = gzinflate(substr(file_get_contents("https://kat.cr/usearch/architecture%20category%3Abooks/"), 10, -8)); 

Или для более продвинутое решение, пожалуйста, рассмотрим следующую функцию (находится в этом blog):

function get_url($url) 
{ 
    //user agent is very necessary, otherwise some websites like google.com wont give zipped content 
    $opts = array(
     'http'=>array(
      'method'=>"GET", 
      'header'=>"Accept-Language: en-US,en;q=0.8rn" . 
         "Accept-Encoding: gzip,deflate,sdchrn" . 
         "Accept-Charset:UTF-8,*;q=0.5rn" . 
         "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.4rn" 
     ) 
    ); 

    $context = stream_context_create($opts); 
    $content = file_get_contents($url ,false,$context); 

    //If http response header mentions that content is gzipped, then uncompress it 
    foreach($http_response_header as $c => $h) 
    { 
     if(stristr($h, 'content-encoding') and stristr($h, 'gzip')) 
     { 
      //Now lets uncompress the compressed data 
      $content = gzinflate(substr($content,10,-8)); 
     } 
    } 

    return $content; 
} 

echo get_url('http://www.google.com/'); 
2

Это сжатый GZ, и при выборе браузером браузер распаковывает его, поэтому вам необходимо выполнить распаковку. Для того, чтобы вывести его, а также вы можете использовать readgzfile():

readgzfile('https://kat.cr/usearch/architecture%20category%3Abooks/'); 
+0

Спасибо! Простой и эффективный. – ian

Смежные вопросы