获取ajax动态加载的页面

最近在因为工作需要,开始学习爬虫,对于静态加载的页面,爬取并不难,但是遇到ajax动态加载的页面,就爬去不到动态加载的信息了!
对于ajax动态加载的数据爬去,一般有两种方式:
1.因为js渲染页面的数据也是从后端拿到,而且基本上都是AJAX获取,所以分析AJAX请求,找到对应数据的
请求,也是比较可行的做法。而且相对于页面样式,这种接口变化可能性更小。缺点就是找到这个请求,并
进行模拟,是一个相对困难的过程,也需要相对多的分析经验
2.在抓取阶段,在爬虫中内置一个浏览器内核,执行js渲染页面后,再抓取。这方面对应的工具有Selenium、
HtmlUnit或者PhantomJs。但是这些工具都存在一定的效率问题,同时也不是那么稳定。好处是编写规则
对于第二种方法,本人测试,只有Selenium可以成功爬去ajax动态加载的页面,但是每次请求页面的时候都会弹出浏览器窗口,对于后期项目部署到浏览器上是很不利的!所以建议采用第一种方式,代码也是采用的第一种方法。

爬取苏宁酷开电视价格代码如下:
(导入jsoup包就不在多说了,自行百度!)

//链接url,并获取Document对象
Document document=Jsoup.connect("http://list.suning.com/
0-243505-0-0-0-0-0-0-0-0-18062.html").get();
//根据HTML页面可以知道,商品价格信息存在class为"res-info"的div中,获取这个div
//根据对ajax请求进行分析可以知道,ajax传入的决定返回价格的数据存在于"price"这个div中的"datasku"这个属性中(分析就省略了,无非就是找规律啦!)
Elements elements=document.getElementsByClass("res-info");
        for(int i=0;i<elements.size();i++){ 
        //然后获得datasku的属性值就行了,这里就只打印出来        System.out.println(elements.get(i).getElementsByClass("price").get(0).attr("datasku"));
        }
//然后就是模拟ajax请求,当然了,根据规律,需要将"datasku"的属性值替换下面链接中的"133537397""0000000000"值
Document        
        document1=Jsoup.connect("http://ds.suning.cn/ds/generalForTile/000000000133537397-9173-2-0000000000-1--ds000000000.jsonp")
                .ignoreContentType(true)
                .data("query", "Java")
                .userAgent("Mozilla")
                .cookie("auth", "token")
                .timeout(3000)
                .get();
        //打印出模拟ajax请求返回的数据,一个json格式的数据,对它进行解析就可以了
        System.out.println(document1.text());
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值