需求爬取微信读书的某一本书的整本书的内容
增强需求,大批量爬取一批书籍内容
众所周知微信读书是一个很好用的app,他上面书籍的格式很好,质量很高。
本人充值了会员但是看完做完笔记每次还得去翻很不方便,于是想把书籍内容弄下来,方便做笔记学习,本文只做学习交流,不做任何商用,不会披露关键细节代码。如有问题欢迎互相私聊交流:mastercy1
01.找到请求,解析响应
我们先打开网页版,随便打开一本书,打开F12,点一下书籍内容的dom元素,是canvas
我们点击下翻页看一下请求,发现一共这些请求,一个一个看一下,猜测是e0,1,2,3,返回了文本内容
点进去看一下堆栈,有一个bccxxxx.js 和一个 8.222xxxx.js 看起来是个异步请求
这里有一个技巧这种两个或者多个js文件,一般一个是提供基础的一些东西,一个是业务的流程
原理大概就类似于一个是定义抽象类和初始化的地方,一个是对实例化的对象做操作控制来实现业务的地方
而有一个规律,就是一般出现的少的那个是控制流,所以我们点开8.222xxx.js出现的地方
进来点一下看一下 一个异步请求 一共四个,大概能猜到就是e0,1,2,3,但是还是调试一下 打个断点然后继续往下看then,先从最开始断然后往下看,发现里面有两个parse 解析。
行那这样就先再翻一页看看进不进断点,不管是从第一个断点一直调还是直接下去,我们发现最后都是返回了一个字符串列表
然后再看逻辑 0x2是2,进了dS解析 0,1,3进了dH解析,我们再console.log里跑一下试试看
发现2是css,而0,1,3就是文本内容了
那我们追进去看一下解析方法,先是一个对象dH和dS都在里面,再进去,好这里猜测可能就是解析的方法了,方法结尾处打个断点跳一下看看。
我们发现 好并不是,而是嵌套的然后进到这里,打印了一下base64好后面的就不调了,解析请自己实现
那么返回值的解析就完成了,这里复盘一下,对于异步或者说普通的请求,进出现少的那个,看头看尾(找function的域,看参数和return,看变量的大致逻辑),要对一些敏感词有了解(如then,parse,base64等等)根据逻辑走,而不是无目的单步的走,对一些方法的结果不一定要直接进去,先赋值给window再console看看(我这直接console的)符合猜想的再进去,避免耗费太多精力。
主要是找对控制流,调对了文件就像是跟对了人。