Python_mitmdump实战demo

目标概述
  • 目标:爬取“得到”App电子版块的电子书信息,把图书的名称、简介、封面、价格爬取下来,测试demo
  • 准备工作:安装好mitmproxy和mitmdump,手机和PC处于同一个局域网下,同时配置好mitmproxy的CA证书
  • mitmdump一些方法介绍使用了解
  • 如需存储数据,则安装好MongoDB并运行其服务,安装PyMongo库
1、请求分析
  • 首先探寻当前页面的URL和返回内容,mitmdump -s script.py运行以下脚本;
    #文件名 script.py
    def response(flow):
        print(flow.request.url)
        print(flow.response.text)
    
  • 打开得到App电子书界面,便可以看到PC端输出内容;但是在不断加载过程中控制台会出现程序卡死(windows滴滴响);
  • 因此,我直接在控制台输出mitmweb,然后打开得到App电子书界面,在网页中分析当前页面的URL和返回内容
    在这里插入图片描述
  • 如图可以看到,url为 https://entree.igetget.com/ebook2/v1/ebook/list 的接口,分析后可以确定这是获取电子书列表的接口,查看响应内容,是一个JSON格式的字符串,可见其中包含一个c字段,一个list字段,list的每个元素都包含名称、简介、封面、价格等内容
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 这说明当前接口就是获取电子书信息的接口,我们需要从这个接口来获取内容,然解析返回结果,保存到数据库
2、数据抓取
  • 在控制台输出以下命令mitmdump -s script.py,其中script.py文件内容如下
    import json
    from mitmproxy import ctx
    def response(flow):
        url = 'https://entree.igetget.com/ebook2/v1/ebook/list'
        if flow.request.url.startswith(url):
            text = flow.response.text
            data = json.loads(text)
            books = data['c']['list']
            for book in books:
                data = {
                    'name': book['book_name'],
                    'intro': book['book_intro'],
                    'price': book['price'],
                    'cover': book['cover']
                }
                ctx.log.info(str(data))
    
  • 打开得到APP电子书界面,此时就会输出提取的结果,一本图书对应一条JSON格式的数据
    在这里插入图片描述
3、提取保存
  • 控制台输出以下命令mitmdump -s script.py,其中script.py文件内容如下,重新滑动得到App电子书界面,就可以将信息保存下来
    import json
    from mitmproxy import ctx
    import pymongo
    def response(flow):
        client = pymongo.MongoClient('localhost', port=27017)
        db = client.igetget
        collection = db.books
        url = 'https://entree.igetget.com/ebook2/v1/ebook/list'
        if flow.request.url.startswith(url):
            text = flow.response.text
            data = json.loads(text)
            books = data['c']['list']
            for book in books:
                data = {
                    'name': book['book_name'],
                    'intro': book['book_intro'],
                    'price': book['price'],
                    'cover': book['cover']
                }
                ctx.log.info(str(data))
                collection.insert_one(data)
    
    在这里插入图片描述
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值