请问大家有办法用 php 获取远程页面的 dom 内容吗?

2015-03-03 00:27:09 +08:00
 wslsq
我心血来潮想用php远程获取斗鱼房间在线人数,

在线人数都是用js的innerhtml赋值给 id="ol_num"的,php能弄出来吗,其他方法也可以~

比如房间http://www.douyutv.com/60651
源码:
<span class="js_tipsy glyphicon glyphicon_followers" data-title="当前在线" id="ol_num"><img src="http://staticlive.douyutv.com/common/douyu/images/loading.gif" /></span>

我现在只能获取到里面的loading图片,加载完成的数字拿不到。

加载完成一般是这样:
(源码不会显示出来,只在浏览器显示)
<span class="js_tipsy glyphicon glyphicon_followers" data-title="当前在线" id="ol_num">12345</span>

怎么获取那个12345呢,
弄了几天都没办法,
特此来请教下众大神,希望有大神解答,谢谢~
3104 次点击
所在节点    问与答
7 条回复
Tonyhu
2015-03-03 00:34:08 +08:00
看起来有些复杂啊
dalaomj
2015-03-03 00:43:34 +08:00
看起来用到flash了,模拟浏览器不行。只能分析http请求了。
http://www.douyutv.com/swf_api/room/60651?cdn=&nofan=yes&_t=23755239&sign=f6d076de5dd448a7531b9a8ec43cda3e
里面的 online 就是。
sumhat
2015-03-03 01:12:15 +08:00
你需要 WebDriver
txlty
2015-03-03 06:24:01 +08:00
请求是flash发出的,phantomjs不支持flash,所以不行。slimerjs可以。

var page = require("webpage").create();
page.viewportSize = { width:1024, height:768 };
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36';
page.settings.loadImages = true;
page.settings.javascriptEnabled = true;
page.open("http://www.douyutv.com/60651", function(status){
if (status !== 'success') {
console.log('FAIL to load the address');
slimer.exit();
}else {
window.setTimeout(function () {
var ol_num = page.evaluate(function () {
return document.querySelector("#ol_num").innerHTML;
});
console.log(ol_num); //在线人数
phantom.exit();
}, 5000);
}
})
typcn
2015-03-03 07:17:54 +08:00
把那个 swf 反编译了,找出签名算法,然后读取。服务端渲染 flash 简直作死。

Flash 早就卸了,要是其他的可以帮你找一下算法
wslsq
2015-03-04 22:02:32 +08:00
@dalaomj 这个我也能弄到,但是那个sign不知道怎么获取
wslsq
2015-03-04 22:03:54 +08:00
@txlty 谢谢大神,我研究一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/174057

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX