rendellstivens
@rendellstivens

Почему simple_html_dom.php один сайт парсит, а другой нет?

Добрый день, товарищи!

Пишу парсер на php, но уперся в то, что парсер работает только на одной ссылке из трёх.
Когда я предаю в функцию dlPage() ссылку $url_ms, то все хорошо, но если я передаю другие две, то ничего не происходит. Помогите разобраться!
<?php
require_once 'simple_html_dom.php';
$url_md = 'https://www.maxidom.ru/catalog/smesiteli/filter/item_firm-is-505a006bf69e69c71d23b5ca06faa83d/apply/?repIDchanged=4&amount=100';
$url_ms = 'https://kazan.megastroy.com/catalog/smesiteli?field79%5B%5D=AM.PM';
$url_lm = 'https://leroymerlin.ru/search/?q=%D1%81%D0%BC%D0%B5%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D0%B8+am.pm';


function dlPage($href) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_URL, $href);
    curl_setopt($curl, CURLOPT_REFERER, $href);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.125 Safari/533.4");
    $str = curl_exec($curl);
    curl_close($curl);

    $dom = new simple_html_dom();
    $dom->load($str);

    return $dom;
}

$html = dlPage($url_md);
$item = $html->find('a');

foreach($html->find('a') as $element)
    echo $element->href . '<br>';
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
d:\OpenServer>curl "https://www.maxidom.ru/catalog/smesiteli/filter/item_firm-is-505a006bf69e69c71d23b5ca06faa83d/apply/?repIDchanged=4&amount=100" -v

*   Trying 95.213.244.197:443...
* Connected to www.maxidom.ru (95.213.244.197) port 443 (#0)
* schannel: disabled automatic use of client certificate
* ALPN: offers http/1.1
* ALPN: server accepted http/1.1
> GET /catalog/smesiteli/filter/item_firm-is-505a006bf69e69c71d23b5ca06faa83d/apply/?repIDchanged=4&amount=100 HTTP/1.1
> Host: www.maxidom.ru
> User-Agent: curl/7.83.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< Server: nginx
< Date: Mon, 15 Aug 2022 12:19:49 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Powered-By: PHP/7.1.33-44+0~20211119.61+debian10~1.gbp448fbe
< P3P: policyref="/bitrix/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA"
< X-Powered-CMS: Bitrix Site Manager (daa31dd015896c419c3750efb37325d9)
< Set-Cookie: PHPSESSID=nWRt3aUxn56jtZd4ZrA1vkh81L5wtU3P; path=/; domain=maxidom.ru; HttpOnly
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache
< Set-Cookie: MAXI_LOC_ID=4; expires=Wed, 14-Sep-2022 12:19:49 GMT; Max-Age=2592000; path=/
< Set-Cookie: maxidom_SALE_UID=1945123973; expires=Thu, 10-Aug-2023 12:19:49 GMT; Max-Age=31104000; path=/; domain=maxidom.ru
< Location: https://www.maxidom.ru/catalog/smesiteli/filter/item_firm-is-505a006bf69e69c71d23b5ca06faa83d/apply/index.php?amount=100
<
* Connection #0 to host www.maxidom.ru left intact


У первого сайта - редирект стоит со старта.

И хотя вы вроде поставили FOLLOW_LOCATION / true, но что-то пошло не так...

Бывает, что надо заголовок юзерагента воткнуть, через него защиту делают максимально примитивную.
Бывает, что нужно смотреть какие данные в Google Developer Console страница отсылает, чтобы получить в ответ верстку, там иногда верстка выдается только если user_auth_id требуется.
Бывает, что там SSL и если не поставить SSL_VERIFY_PEER / false оно не загребает контент, т.е. пытается проверить подлинность и не может, т.к. на локале на винде сертификаты не настроены, а настраивать их ну немногие умеют, проще false поставить

Много ситуаций.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект