记一次爬取xxx网站的经历

原文地址

http://118.25.172.253/2018/11/24/记一次爬取xxx网站的经历

背景

某天正在用手机上网的时候,不小心点到了一个广告,进到了一个漫画网站(咳咳咳...) 然后我不小心的浏览了几篇漫画,发现还是可以看一下的(手动滑稽^-^)。。

但是,重点来了,这个网站的漫画是收费的,如果想继续看漫画得充值。。

吝啬的我肯定不愿意啦,身为一个程序员,怎么能充钱呢?肯定得用一些技术手段破解啊,拿到我们想要的资源,于是乎,我成功了,为了庆祝一下,谨以此文记录。

网站分析

提示:由于这篇文章的特殊性,我不会将网站的截图放上来的。。

知己知彼,方而百战百胜

想要拿到网站的收费资源,我们得先仔细的了解这个网站。观察它的数据来源,认证方式,从而寻找它的漏洞。

网站地址:aHR0cCUzQS8vZnFhY2MuY29tLw==

上面的地址我加密了一下,这个格式。。怎么解密我就不说了哈。

我们进入上面的网站,进入分类,选漫画,这个页面里面是查询这个网站的所有漫画。打开浏览器控制台,我们可以看到如下接口

/api/cate/1-0-2-2-2 #根据点击量排序查询所有的漫画,最后一个数字是页码

我们将页码当做变量提取出来,对这个链接用java代码封装一下:

    /**
     * 漫画列表爬取---根据点击量
     */
    public static final String COMIC_SPILDER_URL_CLICK="/api/cate/1-0-2-2-%s";
复制代码

随便选一篇漫画进去,在控制台我们可以看到漫画章节的查询接口,接口如下:

/api/chapter_list/110008-1-1-6

同理,我们也对章节查询接口进行封装一下:

   /**
     * 章节爬取链接  第一个参数是漫画ID  第二个参数是页码 第三个参数是每页展示数量
     */
    public static final String CHAPTER_SPILDER_URL="/api/chapter_list/%s-1-%s-%S";
复制代码

上面的两个接口是没有做任何权限的判断的,所以我们可以肆无忌惮的调用

当然,上面的两个接口能拿到漫画和章节,但是章节的详情才是最重要的,我们怎么样才能拿到章节的详情呢?

我们先分析下网站的章节详情数据是怎么样加载的。。

随机点开一个免费章节,打开控制台,看ajax请求。然后吓了一跳,竟然没有ajax请求,章节详情数据不是通过接口形式返回。那么,我们看静态资源请求。然后,会发现这个请求

/read/11000008

分析这个请求,我们不难得知后面的那串数字为章节ID。

这个请求是返回了一个网页,我们点击这个请求,查看返回值如下:

看到这个,我们可以放心一下了。这个请求能将章节的详情页面全部数据返回。我们拿到网页,解析一下就可以拿到关键数据了。。

但是不要高兴的太早,我们打开收费的章节,返回值如下:

划重点:没有钱的用户看章节详情 是看不到什么的,只有钱足够,那么章节详情才会向你吐出数据

先确定好立场,我们充钱是不可能的。那么,我们的账户怎么才能拿到钱呢?我们点击收费的章节,往底部滑动,有一个完成任务获取大量阅币的按钮,我们点击进入

看到那个签到赚50阅币的按钮了吗?我们点击,在控制台看到如下接口:

/api/sign

仔细分析一波,这个接口是让用户每天签到然后送50阅币,每次签到之间必须相隔12小时以上。

看到了这,其实章节详情的解决方案已经出现了:

  • 模拟新用户访问,然后签到获取积分
  • 用这个用户调章节详情接口,获取页面数据

这样的话,我们的问题就变成了,怎么模拟新用户访问,然后签到获取积分了。

收费资源爬取

首先,我们仔细研究一下这个网站怎么存储用户信息的。

打开控制台,可以发现用户信息是存在cookie里面的。

知道用户信息是存储在cookie里,我们还得知道用户是不是自动创建的。

我们将这个网站的cookie全部删除,然后刷新当前页,我们可以发现 用户变了,浏览器里有多了一份cookie

我们在控制台里 查看页面请求,在返回值 头部里可以看到如下:

这个Set-Cookie是服务器向客户端声明存储cookie,以后再向服务器发起请求时,客户端就会自动将cookie放到请求头中。

知道了上面的流程,我们就可以模拟新用户访问,然后签到获取积分了。

步骤:

  1. 请求user/task接口,获取response的'Set-Cookie'的头部信息,解析获取JSESSIONID

这里我做了一些测试,发现这个网站前后端交互是通过session来的,所以这里我们只需获取JSESSIONID 即可。

2.上面获取的jessonId对应了一个新用户的访问,我们再通过请求/api/sign接口进行签到,获取50阅币。

3.进行签到完之后,这个JESSSIONID就有了一次访问收费资源的权限了。我们再访问收费的漫画章节,调用如下接口:/read/10007517

发现返回值吐出了所有的数据

这就是一个完整的破解收费章节的流程。

那我们怎么爬取网站的所有收费章节呢??

  1. 先爬取所有的漫画
  2. 根据漫画爬取到所有的章节

这两步用上面说到的接口直接调用就ok了

  1. 爬取所有的章节。如果章节需要收费,则先模拟新用户访问,然后签到,再拿资源。重复这个流程,就可以获取所有的收费漫画了。

最后

整个网站的爬取源码在这里:

github.com/kingrocy/co…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值