Почему я не могу удалить название с этого сайта?
Я использую 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.
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)));
}
Просто чтобы подтвердить то, что говорят другие, если вы не отправляете строку агента пользователя, этот сайт отправляет 403 запрещенных.
Добавление этого сработало для меня:
Агент пользователя: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Гекко/20030624 Netscape/7.1 (ax)
Функция file_get_html
использует file_get_contents
под одеялом. Эта функция может извлекать данные из URL-адреса, но для этого она отправляет строку агента пользователя.
По умолчанию эта строка пуста. Некоторые веб-серверы используют этот факт, чтобы обнаружить, что не-браузер получает доступ к своим данным, и предпочитают запрещать это.
Вы можете установить user_agent
в php.ini для управления строкой агента пользователя, которая отправляется. Или вы можете попробовать:
ini_set('user_agent','UA-String');
С 'UA-String'
, установленным на все, что вам нравится.