话不多说,我们的目的: 使用scrapy爬取安卓版QQ阅读所有的小说(只是小说的基本信息,小说内容是不要想的、千万不要想……)
环境准备
安卓收集模拟器:夜神模拟器
安卓手机抓包工具:fiddler
代码运行环境: python3.6
存储数据库: postgreSQL。
大体思路
本来想详细的写一写过程步骤,但是懒癌来了怎么都拦不住。下面可以给大家一个,每一步骤的具体操作网上都有,不难也不难理解,我会上传一份可用的自己写好的QQ阅读的scrapy代码,直通车——。
(1)准备好postgreSQL数据库,设置可远程连接。
(2)夜神模拟器安装QQ阅读。
(3)通过fiddler监听夜神模拟器发出的所有请求。
需要注意的是:fiddler默认不监听https的请求,我们需要在它的设置里面取设置,并且要在被监听的模拟器里面安装信任安全证书。
(4)分析QQ阅读的请求,找到我们需要的数据接口并分析其Json规则。
QQ阅读APP的规则并不难找,只能上面的监听成功了。我们就可以在QQ阅读的全部分类里面,先爬取到所有的分类,然后对每一个分类分别爬取其下所有的小说,具体规则如下:
1、大类别(男女、出版、漫画、听书)下的小类别:https://androidtgw.reader.qq.com/v7_0_5/queryOperation?categoryFlag=1 (categoryFlag 1—5代表五种大类别,返回数据种actionId为小类别Id) 2、小类别下小说列表(举例 男生—玄幻):http://rec.reader.qq.com/v7_0_5/listDispatch?actionTag=,-1,-1,-1,-1,101&actionId=20001&action=categoryV3&pagestamp=1 (pagestamp为分页标识) 3、某一小说(举例 男生-玄幻,男生-奇幻,女生-言情): 奇幻: https://androidtgw.reader.qq.com/v7_0_5/nativepage/book/detail?pagestamp=1&alg=67.1.11&dataType=cate_id&data_type=0&fromPage=&origin=20005&bid=25297287 言情:https://androidtgw.reader.qq.com/v7_0_5/nativepage/book/detail?bid=25054827&pagestamp=1&alg=67.1.11&dataType=cate_id&data_type=0&fromPage=&origin=30013 (bid为书籍标识,actionId为小类别id,pagestamp为分页标识) |
(5)搭建scrapy框架,根据上面得到的规则编写代码,进行数据的爬取。
这里需要注意的地方是 我们爬取一些(有反爬虫的)网站的时候要么使用个代理ip池、要么设置个爬取延时,不然这些网站可能会封掉我们的ip,不过QQ阅读还是没有的,至少没有封掉我……