V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wslsq
V2EX  ›  问与答

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

  •  
  •   wslsq · 2015-03-03 00:27:09 +08:00 · 3087 次点击
    这是一个创建于 3345 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我心血来潮想用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呢,
    弄了几天都没办法,
    特此来请教下众大神,希望有大神解答,谢谢~
    7 条回复    2015-03-04 22:03:54 +08:00
    Tonyhu
        1
    Tonyhu  
       2015-03-03 00:34:08 +08:00
    看起来有些复杂啊
    dalaomj
        2
    dalaomj  
       2015-03-03 00:43:34 +08:00   ❤️ 1
    看起来用到flash了,模拟浏览器不行。只能分析http请求了。
    http://www.douyutv.com/swf_api/room/60651?cdn=&nofan=yes&_t=23755239&sign=f6d076de5dd448a7531b9a8ec43cda3e
    里面的 online 就是。
    sumhat
        3
    sumhat  
       2015-03-03 01:12:15 +08:00 via Android   ❤️ 1
    你需要 WebDriver
    txlty
        4
    txlty  
       2015-03-03 06:24:01 +08:00   ❤️ 1
    请求是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
        5
    typcn  
       2015-03-03 07:17:54 +08:00   ❤️ 1
    把那个 swf 反编译了,找出签名算法,然后读取。服务端渲染 flash 简直作死。

    Flash 早就卸了,要是其他的可以帮你找一下算法
    wslsq
        6
    wslsq  
    OP
       2015-03-04 22:02:32 +08:00
    @dalaomj 这个我也能弄到,但是那个sign不知道怎么获取
    wslsq
        7
    wslsq  
    OP
       2015-03-04 22:03:54 +08:00
    @txlty 谢谢大神,我研究一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3078 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:14 · PVG 21:14 · LAX 06:14 · JFK 09:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.