前言:这几天依旧在捣鼓抓手机app上的数据,发现有些好抓,有些加密的不好搞。。。
环境:win10,py3.7,手机模拟器,mitmproxy
关于mitmproxy可以看这篇博客:https://blog.youkuaiyun.com/qq_40733911/article/details/87617171
目标:抓取手机app的小说
第一步先配置好手机和电脑
可以参考上面那篇博客
第二步分析请求
把其它请求过滤掉,点换一换可以发现有一个请求包含书的信息
看一下response
发现正是所需的信息
那就继续在浏览器中请求一下
果然没错
继续分析,发现同一个url,每一次刷新返回的json数据是不同的!!!
就算说这个就算是一个接口,只要不停的请求这个就可以得到不同的数据
就直接用requests库请求然后json库分析就好了
但后面我还是用mitmdump来对接一下python
第三步写脚本
import json
from mitmproxy import ctx
def save_to_file(text):
with open('books.txt', 'a') as f:
f.write(json.dumps(text, ensure_ascii=False) + '\n')
f.close()
def response(flow):
url = 'http://read.xiaoshuo1-sm.com/novel/i.php?do=is_payreco&id=1247212108&qtf=shuqiApp&qtn=cpSearchReplace_u2i&nums=8&userId=1247212108&sn=1550982792332650&imei=864895024087254&_='
# 如果发送的请求是类似上面分析出的url就进行处理
if url in flow.request.url:
# 这两句话是一样的,都是返回返回的结果
# print(flow.response.text) # print(flow.response.get_text()
text = flow.response.text
# 把str转换为字典处理
data = json.loads(text)
books = data.get('data')
for book in books:
# 在cmd中用颜色输出一下书的信息
ctx.log.warn(str(book))
data = {
'title': book.get('title'),
'author': book.get('author'),
'cover': book.get('cover'),
'tags': book.get('tags')
}
# 存入txt中
save_to_file(data)
mitmdump -s 脚本路径/文件名
用上面的命令运行脚本,结果如图
注意:每一次都要点“换一换”才能发送请求,如果命令行没有动讲就按回车
第四步获得每本书的内容
结果是失败了。。。
当我接受到一本书一章的内容时,得到json数据,里面的content是加密处理的,说明这个app这方面还是可以的
但是当我爬另外一个app时,却发现它的数据没有加密,这样的话其实就很好爬取了
这次失败了,下次再尝试一下