批量爬取手机某app动态壁纸

批量爬取手机某app动态壁纸

发现一个很好看的手机动态壁纸app,但app广告很是烦人,于是...

一、准备工具

  1. IDEA社区版:撸java代码专用神器
  2. Fiddler Everywhere:网络抓包的不二之选
  3. 手机一部:用于分析页面数据
  4. PostMan:用于测试请求接口参数

Fiddler如何对手机抓包网上教程很多,这里就不再赘述了。有兴趣的请自行百度,这里附上一条教程链接。

Fiddler如何对手机抓包

二、通过抓包分析响应数据获取请求链接

1、手机页面分析:壁纸是加载的方式为流式加载。做过后端的应该很容易联想到数据是通过js异步加载出来的。当请求的数据超过页面展示的数据时,页面就会发起一次Ajax请求。接下来就通过fiddler抓取需要的响应数据包,找到相应的请求链接。
在这里插入图片描述

2、数据抓包分析:由上面分析可知,页面数据都是以流的方式加载,那么手机页面不断地往下拉,达到数据展示阀值页面就会向后台发送请求,经过3轮数据请求,嘿!果然发现了一个响应数据格式为json的数据包,相应的也找到了该响应的请求链接。得到了请求连接接下来就需要分析请求参数了。
在这里插入图片描述
3、请求参数分析:由上面分析获得的链接请求参数很多,但部分参数可有可无,为了减少链接的长度和后来代码的可读性,这里有必要删除一些没必要的参数,经过postman的测试。筛选出了以下必要参数。
在这里插入图片描述

三、对获取的链接进行发起请求并保存数据

获取了请求链接和参数,那么接下来任务就需要撸代码和保存数据了,上代码。

public class Application {
    public static void main(String[] args) {
        //由于响应的数据格式为json,这里使用了jackson作为json解析器
        ObjectMapper mapper = new ObjectMapper();
        //这里是获取的上面请求链接(手动打码)
        String sead = "http://***********?tag=l_all&limit=36&";
        String url = "";
        String after = "76534017";//初始下一页的id
        int count = 0;//统计数据量
        int start = 1;//开始页码
        int end = 2;//结束页码
        int chapter=1;//为后来保存数据文件命名
        //循环取前十页的壁纸数据
        while (start <= end) {
            url = sead + "page=" + start + "&after=" + after;//拼接请求地址
            try {
                Connection.Response response = Jsoup.connect(url)
                        .ignoreContentType(true)
                        .method(Connection.Method.GET)//请求方式为GET
                        .timeout(5000)//设置超时时间
                        .execute();
                //将json数据进行解析
                RootBean rootBean = mapper.readValue(response.body(), RootBean.class);
                //获取下一页的id
                after = String.valueOf(rootBean.getAfter());
                //对每一页的数据进行下载
                for (Data data : rootBean.getData()) {
                    FileUtils.copyURLToFile(new URL(data.getUrl()), new File("E:\\video\\" + (chapter++) + ".mov"));//数据下载
                }
                System.out.println("****************第" + start + "页提取完成+***************************");
                count += rootBean.getData().size();
                Thread.sleep(1000);
            } catch (IOException e) {
                System.out.println("第" + start + "页数据获取失败!");
            } catch (InterruptedException e) {
                System.out.println("等待超时!");
            }
            start++;
        }
        System.out.println("共检索数据 " + count + "条!");
    }
}

四、效果展示

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值