Модераторы: [email protected], skyboy, SamDark, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парс удаленной страницы 
:(
    Опции темы
MrDmitry
Дата 15.10.2020, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Здравствуйте, пытаюсь пропарсить ссылку https://shop.autoeuro.ru/main/search?maker=...0&crosses=1 при помощи simplehtmldom

Код

$html = file_get_html(" https://shop.autoeuro.ru/main/search?maker=MANN-FILTER&code=W811/80&crosses=1");
$e = $html->find("#stat_best_s_0_0", 0);
echo $e->plaintext;

получаю 

Цитата
Fatal error: Call to a member function find() on a non-object in


Это сообщение отредактировал(а) MrDmitry - 15.10.2020, 18:34
PM MAIL   Вверх
bars80080
Дата 15.10.2020, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор воюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12014
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



нет такой функции file_get_html:

https://www.php.net/manual-lookup.php?patte...;scope=quickref

Добавлено через 51 секунду
намёк на то, что она фиг знает, что делает, потому ответа ждать можно вечно
PM MAIL   Вверх
The_Aleksey
Дата 15.10.2020, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


<?php
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.10.2007
Где: Москва

Репутация: нет
Всего: 6



file_get_html - это часть библиотеки PHP Simple HTML DOM (simplehtmldom.sourceforge.io/manual.htm)

рискну предположить, что там пробел лишний перед https в адресе, поэтому невозможно получить ресурс и объект пустой

PM MAIL   Вверх
MrDmitry
Дата 16.10.2020, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



К сожалению пробела нет. Я допустил ошибку когда писал на форуме, строка формируется. сама. 

Вот точный код если быть точным.

Код

require_once("simplehtmldom/simple_html_dom.php");

 $autoeuro = "https://shop.autoeuro.ru/";

function gethtmlonautoeuro($url, $list)
{
    $data = split(":", $list, 2); 
    $data[0] = str_replace(' ', '', $data[0]);
    $data[1] = str_replace(' ', '', $data[1]);
    $html = file_get_html($url."main/search?maker=".$data[0]."&code=".$data[1]."&crosses=1");
    $e = $html->find('#stat_best_s_0_0', 0);
    return $e->plaintext;
}

$price = gethtmlonautoeuro($autoeuro, $list);


Откуда берётся $list тут не важно, главное что получается в итоге 

https://shop.autoeuro.ru/main/search?maker=...0&crosses=1
PM MAIL   Вверх
ksnk
Дата 16.10.2020, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6846
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 385



Не открывается, потому что ответная сторона не хочет отдавать свой контент. 
Если внимательно посмотреть на то, что выдает страница в броузере, то она сначала устанавливает какие-то куки, потом переадресуется на немного другой адрес, и там уже выдает  результат поиска.
Вероятнее всего, они проверяют предварительно, что посылаемые заголовки похожи на броузер, вероятнее всего, они проверяют устанавленные куки, вероятнее всего они еще что-нибудь проверяют... 

Можно попытаться лазить на сайт с помощью curl, нужно изобразить более менее адекватные заголовки запроса,и ,если их контроль не доходит до контроля запуска javascript на клиенте, есть вероятность что-то получить.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
The_Aleksey
Дата 20.10.2020, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


<?php
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.10.2007
Где: Москва

Репутация: нет
Всего: 6



Да, на этой странице действительно 302-й редирект на страницу с другими GET-параметрами, в качестве предложения, можно вот так

Код

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://shop.autoeuro.ru/main/search?maker=MANN-FILTER&code=W811/80&crosses=1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31");
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
var_dump($httpcode, $data);
?>


Здесь, вначале мы получим 302, потом, используя CURLOPT_FOLLOWLOCATION перейдём по новому адресу, и в итоге в $data у нас будет строка с содержимым сайта, и вот эту строку потом можно будет засунуть в DOM парсер и искать в ней
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1476 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.