Как разобрать динамическую страницу - PullRequest
0 голосов
/ 19 июня 2019

Мне нужно проанализировать веб-сайт на моем этапе, проблема в том, что веб-сайт загружает динамический контент через несколько секунд, поэтому при синтаксическом анализе получается только первая информация, а нужная мне информация не найдена.

Это сайт: https://www.coursera.org/courses?query=&indices%5Bprod_all_products_custom_ranking_revenuelast28d%5D%5BrefinementList%5D%5Blanguage%5D%5B0%5D=French&indices%5Bprod_all_products_custom_ranking_revenuelast28d%5D%5Bpage%5D=1&indices%5Bprod_all_products_custom_ranking_revenuelast28d%5D%5Bconfigure%5D%5BclickAnalytics%5D=true&indices%5Bprod_all_products_custom_ranking_revenuelast28d%5D%5Bconfigure%5D%5BhitsPerPage%5D=10&configure%5BclickAnalytics%5D=true&page=1

Когда я загружаю веб-сайт, он загружает все курсы, а через 2-3 секунды он применяет фильтр (language = french) и перезагружает страницу, чтобы отобразить французские курсы. Парсер, который я использую (простой html dom), анализирует все курсы, а не страницу, загруженную Как я могу сделать, чтобы проанализировать "окончательную" страницу с загруженным фильтром?

Я пытался в основном поставить sleep (5) на мой код, но ничего не изменилось Этот код работает, но он анализирует все курсы, а не курсы с применением фильтра.

<?php
require_once('simple_html_dom.php');



$html = file_get_html('https://www.coursera.org/courses?query=indices%5Bprod_all_products_custom_ranking_revenuelast28d%5D%5BrefinementList%5D%5Blanguage%5D%5B0%5D=French&indices%5Bprod_all_products_custom_ranking_revenuelast28d%5D%5Bpage%5D=1&indices%5Bprod_all_products_custom_ranking_revenuelast28d%5D%5Bconfigure%5D%5BclickAnalytics%5D=true&indices%5Bprod_all_products_custom_ranking_revenuelast28d%5D%5Bconfigure%5D%5BhitsPerPage%5D=10&configure%5BclickAnalytics%5D=true&page=1');
sleep(10);

foreach($html->find('div.card-info') as $e)
echo $e->outertext . '<br>';


?>

1 Ответ

0 голосов
/ 19 июня 2019

Вам необходимо установить NodeJS и использовать phantomjs через PHP shell_exec ():

<?php

$result = shell_exec('phantomjs script.js')
//...

script.js:

var page = require("webpage").create();

page.open("https://www.coursera.org", function(status) {
    // Parse contents and return result
});

Возможно, вам нужен готовыйсервис для отслеживания изменений, такой как linkupdater или др.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...