Почему я не могу удалить название с этого сайта?


Я использую simple-html-dom, чтобы удалить заголовок с указанного сайта.

<?php

include('simple_html_dom.php');

$html = file_get_html('http://www.pottermore.com/');

foreach($html->find('title') as $element) 
       echo $element->innertext . '<br>';

?>

Любой другой сайт, который я пробовал, работает, apple.com например.

Но если я введу pottermore.com , он ничего не выводит. В Pottermore есть элементы flash, но на главном экране, с которого я пытаюсь соскрести заголовок, нет flash, только html.

Author: DavidO, 2012-07-13

3 answers

Это работает для меня:)

$url = 'http://www.pottermore.com/';
$html = get_html($url);
file_put_contents('page.htm',$html);//just to test what you have downloaded
echo 'The title from: '.$url.' is: '.get_snip($html, '<title>','</title>');

function get_html($url)
{
    $ch = curl_init();
    $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
    $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    $header[] = "Cache-Control: max-age=0";
    $header[] = "Connection: keep-alive";
    $header[] = "Keep-Alive: 300";
    $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $header[] = "Accept-Language: en-us,en;q=0.5";
    $header[] = "Pragma: "; //browsers keep this blank.  
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows;U;Windows NT 5.0;en-US;rv:1.4) Gecko/20030624 Netscape/7.1 (ax)');
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE);
    curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE); 
    $result = curl_exec ($ch);
    curl_close ($ch);
    return($result);
}

function get_snip($string,$start,$end,$trim_start='1',$trim_end='1')
{
    $startpos = strpos($string,$start);
    $endpos = strpos($string,$end,$startpos);

    if($trim_start!='')
    {
        $startpos += strlen($start);
    }
    if($trim_end=='')
    {
        $endpos += strlen($end);
    }
    return(substr($string,$startpos,($endpos-$startpos)));
}
 1
Author: Andy Gee, 2012-07-12 21:46:58

Просто чтобы подтвердить то, что говорят другие, если вы не отправляете строку агента пользователя, этот сайт отправляет 403 запрещенных.

Добавление этого сработало для меня:

Агент пользователя: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Гекко/20030624 Netscape/7.1 (ax)

 1
Author: adotout, 2012-07-12 21:44:28

Функция file_get_html использует file_get_contents под одеялом. Эта функция может извлекать данные из URL-адреса, но для этого она отправляет строку агента пользователя.

По умолчанию эта строка пуста. Некоторые веб-серверы используют этот факт, чтобы обнаружить, что не-браузер получает доступ к своим данным, и предпочитают запрещать это.

Вы можете установить user_agent в php.ini для управления строкой агента пользователя, которая отправляется. Или вы можете попробовать:

ini_set('user_agent','UA-String');

С 'UA-String', установленным на все, что вам нравится.

 0
Author: Dancrumb, 2012-07-12 21:42:53