我试图把这个网站放到我的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等待站点加载吗?
发布于 2015-01-24 20:58:01
为了了解站点上正在发生的事情,请尝试打开浏览器的网络检查器。您将看到页面本身的加载,然后将看到各种其他资源的加载,如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()抓取主站点,而是使用它获取数据的辅助页面。
如果您想要获取这个URL,就必须深入挖掘。如果打开主页,您会发现嵌入在页面上的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请求。
发布于 2015-01-24 20:55:07
发布于 2015-01-24 20:56:09
该站点使用ajax,您可以找到ajax加载并获得它。真正的股票网址是:
file_get_contents("https://www.warcraftlogs.com/rankings/table/dps/6/0/5/20/1/Druid/Feral/0/393/?search=&page=1");https://stackoverflow.com/questions/28130130
复制相似问题