使file_get_contents()等待网站完全加载

时间:2015-01-24 20:51:40

标签: php file-get-contents

我正试图将这个网站变成我的php变量:

  

https://www.warcraftlogs.com/rankings/server/393/latest/#class=Druid&spec=Feral

一旦页面首次加载,您就可以看到网站开始加载网站的真实内容。

file_get_contents("https://www.warcraftlogs.com/rankings/server/393/latest/#class=Druid&spec=Feral");

仅返回库存空网站,而不返回第二步中加载的表中的实际内容。

有没有办法让file_get_contents等待网站加载?

4 个答案:

答案 0 :(得分:2)

要了解网站上发生的情况,请尝试打开浏览器的网络检查程序。您将看到页面本身加载,然后您将看到各种其他资源加载,如CSS文件,JS文件,图像和更多页面。

其他页面之一是:https://www.warcraftlogs.com/rankings/table/dps/6/0/5/20/1/Druid/Feral/0/393/?search=&page=1

看起来主站点发出AJAX请求以从该URL获取其他数据。请注意,file_get_contents()无法一次性获取所有内容,因为file_get_contents()不会解析网站或评估任何JS(而JS是触发AJAX请求的内容)。解决方案很简单 - 不是使用file_get_contents()来获取主站点,而是使用它来获取包含数据的辅助页面。

如果您尝试抓取此网址,则必须深入挖掘。如果您打开主页面,您会在页面上找到一块嵌入的JS,如下所示:

function loadTable()
{
    var loadString = '/rankings/table/' + filterMetric + '/' + zoneID + '/' + filterBoss + '/' + filterDifficulty + '/' + filterSize + '/' + filterRegion + '/' + filterClass + '/' + filterSpec + '/' + filterBracket + '/' + filterServer + '/' + '?' + "search=" + filterSearch + "&page=" + filterPage
    $("#table-container").load(loadString, tableLoaded)
}

注意它是如何使用所需参数动态创建字符串的。然后它调用$ .fn.load(),它会触发对URL的AJAX请求。

答案 1 :(得分:1)

答案 2 :(得分:0)

该网站使用ajax,你可以找到ajax加载并获取它。 真正的股票网址是:

file_get_contents("https://www.warcraftlogs.com/rankings/table/dps/6/0/5/20/1/Druid/Feral/0/393/?search=&page=1");

答案 3 :(得分:0)