我必须在我的阶段解析一个网站,问题是该网站在几秒钟后加载了动态内容,因此解析仅获取了第一个信息,而找不到我需要的信息。
当我加载网站时,它加载所有课程,并在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>';
?>
答案 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或其他。