(爬虫)请问 如何抓取JS生成的网页?——返回结果是对象诶。。。。

Metro2033 发布于 2016/03/24 18:31
阅读 1K+
收藏 0

js 获取到数据 然后write或者innerHTML的方式 生成的页面,源码中是看不到这些内容的

一般来说,我们会直接 找到js请求的地址,然后 获取该网站的 接口数据

比如:

国有资产、信息牌项目信息 -  http://xinjinqiao.tprtc.com/admin/main/flrpro.do


但是 我发现了一个问题,返回的结果 不是JSON、xml 或者 其他 可以看到的字符串的形式,

返回的是对象诶,这时候 js 可以 使用 类似 model.name,model.phone 等 形式 获取 属性,然后 写到

页面中,但是 :

首先你页面 源码里看不到,其次,返回的接口数据 也无法得到 想要的。

比如 请求的 servelt 是类似这样:

ProxyModel proxyModel = new ProxyModel();
proxyModel.setName("这是测试的地址");

response.getWriter().print(proxyModel);


然后 js里类似这样:


success: function(msg){
alert(msg.length);
$.each(msg, function(i,item){      
    alert(item.name); 

    div.innerHTML=item.name;
   })
}


反正js就是直接获取属性 ,能把 name在页面中显示出来


这时候你看接口返回的 只是一个对象,具体说是一个内存地址,没有 页面上显示 的 比如说 name



这中情况怎么搞呢?

加载中
1
xtuhcy
xtuhcy

你说的这种情况可能是ajax请求返回的是一段javascript代码,你需要解析这段javascript代码,可以考虑用rhino解析。当然你可以用htmlunit这种测试框架,可以自动执行js和css。

xtuhcy
xtuhcy
也可以看看我写的爬虫框架gecco,支持页面中定义的js变量的解析
Metro2033
Metro2033
好吧,没用过,回头试试
0
Eric_林
Eric_林

你可以看下HttpUnit

http://www.httpunit.org/

Metro2033
Metro2033
以前试过,可是一直没有成功过。。。
0
J
JCod3r
你最后那个图片返回一个对象地址,这东西对js来说就是个字符串,你确定可以用js点出属性内容来?
Metro2033
Metro2033
没用过吗?经常用的map什么的 都是可一直直接获取属性的
0
goodaiyun
Metro2033
Metro2033
post,get 你能够看到返回的结果,你在浏览器的网络面板能看到,那么程序 同样也可以获取到,我说的是 js可以获取,但是 监控 看不到。
返回顶部
顶部