【问题标题】:How to parse a dynamic page如何解析动态页面
【发布时间】:2019-11-02 03:50:54
【问题描述】:

我要为我的舞台解析一个网站,问题是网站在几秒钟后加载动态内容,所以解析只得到第一个信息,找不到我需要的信息。

这是网站: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>';


?>

【问题讨论】:

标签: javascript php html parsing


【解决方案1】:

你需要安装 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 或其他。

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 2023-04-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    相关资源
    最近更新 更多