Как получить html в кадре с помощью PHP / Curl? - PullRequest
1 голос
/ 06 апреля 2020

Я впервые использую PHP \ Curl. Моя цель состоит в том, чтобы создать бота, который извлекает и собирает данные с нескольких веб-сайтов, которые получают данные с компьютеров (я уверен, что я владею данными, для меня важно лишь собрать все из них только в одной точке). Мне удалось зайти на эти сайты и получить некоторые данные. Мне также удалось получить данные в iframe, благодаря функции file_get_contents.

Но если я попытаюсь получить html в простом кадре (а не в Iframe), это не сработает. Я использовал URL элемента frame ниже (да, с полным URL). Я не получаю никаких ошибок. Я получаю некоторые html элементы, но ни один из html, который я ищу. Я вижу тело html, но оно почти пусто. Я полностью уверен относительно URL, который я даю php / curl. Что я должен сделать, чтобы получить html внутри фрейма?

Вот элемент фрейма, видимый на странице, с которой я пытаюсь получить данные. (Это не то, что я получаю из ответа php / curl):

<frame name="WMain" src="/WSID0002340321/easy/GUI-1280">
     The html i'm looking for is here
</frame>

Так что ничего особенного.

Я видел этот пост: Как использовать PHP CURL с фреймами? Но проблема на самом деле не та, и ответ на этот вопрос о iframe и предположим, что он содержит html элементов.

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Я подозреваю, что, возможно, некоторые из HTML генерируются с использованием Javascript - в этом случае его нет при первой загрузке страницы, поэтому простой запрос с использованием не браузерного клиента, такого как cURL, будет никогда не видеть его или, возможно, загружать с помощью дополнительного AJAX запроса - в этом случае вы можете получить его, отправив запрос непосредственно на URL-адрес, используемый AJAX. Или даже какая-то комбинация двух. Более тщательное изучение страницы с помощью инструментов разработчика вашего браузера может помочь вам понять, как на самом деле создается контент.

В наши дни очень часто страницы содержат контент, который загружается позже и / или генерируется скриптами. Таким образом, базовая c загрузка исходного, оригинального HTML не может захватить этот дополнительный контент (потому что нет среды Javascript, которая могла бы затем запускать код и загружать / создавать дополнительные HTML). Чтобы полностью загрузить такую ​​страницу, вам понадобится браузер без головы или веб-клиент со сложным сканером Google.

0 голосов
/ 06 апреля 2020

Попробуйте использовать preg_match для обработки html

$html = "...<frame>...</frame>";
preg_match("~<frame[^>]*>(.*?)</frame>~",$html,$output);
echo $output;

Демо: https://3v4l.org/CNJWQ

...