Получить исходный код страницы в php

Прежде всего, спасибо за ваш следующий ответ.

Я не могу получить исходный код страницы (чтобы извлечь содержимое) из

http://steamcommunity.com/market/search?q=booster#p2 (-->$путь)

вот мой первый исходный код:

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $path);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
$file_contents = curl_exec($ch);
curl_close($ch);
$file_contents =  htmlentities($file_contents);
print_r($file_contents);

вот второе испытание:

$fp=null;
$fp=@fopen($path,"r");
$contenu = "";
if($fp){
 while(!feof($fp)){
 $contenu .=  stream_get_line($fp,65535);
 }
 print_r($contenu);
}
else{
 echo "Impossible d'ouvrir la page $path";
}

с помощью этого кода я получаю исходный код этой страницы: http://steamcommunity.com/market/search?q=booster или эта страница ..../market/search?q=booster#p1

Я сказал, что исходный код, отображаемый firefox, не очень хорош, и только инспектор dom позволяет мне увидеть «настоящий» исходный код. У тебя есть решение?


person Gachette01    schedule 31.10.2013    source источник


Ответы (3)


Вы нажимаете неправильный URL. Вместо этого нажмите один запрос AJAX внутри него и проанализируйте его как JSON:

$f = file_get_contents(
    "http://steamcommunity.com/market/search/render/?" .
    "query=booster&start=10&count=10"
);
$t = json_decode( $f );
print_r( $t );

И вы получаете аккуратно организованную структуру, такую ​​как:

stdClass Object (
    [success] => 1
    [start] => 0
    [pagesize] => 10
    [total_count] => 330
    [results_html] => <div class="market_listing_table_header">
    ...

По сути, файл JSON, который используется для рендеринга страницы, может быть прочитан как аккуратная структура в PHP. Или достаточно близко. Вам все равно нужно пройти через $t->results_html с помощью DOM Document / XPath для дальнейшего синтаксического анализа.

person pp19dd    schedule 31.10.2013
comment
Просто вау! Большое спасибо. небольшие ошибки со ссылкой http://x2. но откуда вы знаете запрос AJAX ????? - person Gachette01; 31.10.2013

Вы не сможете сделать это с помощью PHP. Вам нужно выполнить javascript страницы, чтобы получить визуализированный DOM. (Визуализированный DOM — это то, что вы видите, когда используете инспектор DOM.)

Возможно, используйте PhantomJS, чтобы открыть страницу и получить визуализированный DOM. См. раздел Использование Phantom.js для оценки , как я могу получить HTML-код страницы?.

person Trevor Dixon    schedule 31.10.2013
comment
ПОЖАЛУЙСТА, почему бы не сделать это с php? - person Emilio Gort; 31.10.2013
comment
Потому что, чтобы получить визуализированный DOM, вам нужно выполнить javascript на странице. PHP не может этого сделать; только настоящий веб-браузер может. - person Trevor Dixon; 31.10.2013

Я сказал, что исходный код, отображаемый firefox, не очень хорош, и только инспектор dom позволяет мне увидеть «настоящий» исходный код. У тебя есть решение?

Это совсем наоборот. Инспектор DOM показывает текущее состояние страницы, измененное Javascript и/или пользователем (например, изменения состояния формы). Исходный код, отображаемый в Firefox «Просмотр исходного кода», является «настоящим» исходным кодом, доставленным веб-сервером.

person Community    schedule 31.10.2013