如何解析动态页面

时间:2019-06-19 11:56:01

标签: javascript php html parsing

我必须在我的阶段解析一个网站,问题是该网站在几秒钟后加载了动态内容,因此解析仅获取了第一个信息,而找不到我需要的信息。

这是网站: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秒后应用过滤器(语言=法语)并重新加载页面以显示法语课程。 我使用的解析器(简单的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 :(得分:0)

您需要安装NodeJS并通过PHP shell_exec()使用phantomjs

<?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或其他。