Как в simple-html-dom получить реальный URL?

310
27 мая 2017, 19:27

Например, эта ссылка в браузере открывается "как есть". https://eda.ru/recepty/vypechka-deserty/brauni-brownie-20955

Но если поменять число в ссылке, то при открытии страницы ссылка меняется на нужную сама собой. Например, если поставить 20954:

https://eda.ru/recepty/vypechka-deserty/brauni-brownie-20954

То открывается другое блюдо, хотя изначально в ссылке написано "Брауни" из группы "Выпечка и десерты". Я этим воспользовался, когда писал скрейпер на Jsoup в Java - там я просто в цикле проходил и подсовывал в ссылку числа, все происходило само. Но сейчас пришлось переписывать его на PHP и в Simple Html Dom нет этой функции... Я так понял, перед передачей ссылки в функцию load_file нужно достать "настоящий" URL. Как это сделать?

Например, вот этот код

$html -> load_file("https://eda.ru/recepty/vypechka-deserty/brauni-brownie-20955");
$link = $html -> find("link", 0);
$exploded = explode("/", $link->href);
$category = $exploded[4];
echo $category;

Работает. Но если поменять на 20954, то вылетает еррор пицот. А если поменять на полный URL, то работает

Answer 1

Есть подозрения что Simple HTML DOM не умеет ходить по редиректам, по этому я рекомендовал бы вам обходной путь, простым curl вы забираете данные и потом кормите их парсеру через str_get_html, у меня всё работает, вот пример:

$url = "https://eda.ru/recepty/vypechka-deserty/brauni-brownie-2093"; 
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch); 
$html = str_get_html($result);
$link = $html->find("link", 0);
$exploded = explode("/", $link->href);
$category = $exploded[4];
echo $category;

Это всего лишь пример, лучше потом это всё разбить на функции для удобства использования.

READ ALSO
Установка ssh2 php на Freebsd

Установка ssh2 php на Freebsd

Доброе время сутокУстанавливаю библиотеку ssh2 для php на ОС Freebsd

239
свой пункт меню в админки opnecart 2.0

свой пункт меню в админки opnecart 2.0

Помогите кто знает, кок можно выводить свой пункт меню в админке opencart 20 через модуль куда покопаться возможно есть какой нибудь метод для...

427
Формирование списков mysql php;

Формирование списков mysql php;

Есть лента новостейНовости выкладываются разными пользователями

291