1. 爬取前的分析

mitmdump是mitmproxy的命令行接口,比Fiddler、Charles等工具方便的地方是它可以对接Python脚本。

有了它我们可以不用手动截获和分析HTTP请求和响应,只需写好请求和响应的处理逻辑即可。

它还可以实现数据的解析、存储等工作,这些过程都可以通过Python实现。

1.1 启动mitmdump 保存到文件

使用命令

mitmdump -w crawl.txt

其中 crawl.txt 可以为任意文件名,就可以保存相应的结果了

1.2 调用脚本文件

mitmdump -s script.py

script.py 文件中编写如下代码

# 修改UA
def request(flow):
flow.request.headers['User-Agent'] = 'MitmProxy'
print(flow.request.headers)

在夜神模拟器中打开http://httpbin.org/get

出现如下内容



出现上述内容比较你已经可以对网页request进行修改了,下面打开手机惠农APP,看一下如何去捕获相应的请求

2. 捕获手机惠农APP请求

这个地方千万不要单独依赖mitmdump,要不你会直接卡死的,你可以采用mitmweb,打开APP之后,等待一会,点击一个菜单进入。比如点击下面的供应大厅。



之后在mitmweb中捕获到列表页的数据连接,保存地址 https://truffle.cnhnb.com/banana/supply/query/list 方便进行后续的操作。

3. 完善script脚本

脚本主要有两部分构成,数据获取与数据存储,数据获取要注意,当访问的url匹配到刚才的地址的时候,就表示可以进行处理了

from mitmproxy import ctx
import json
import pymongo
# def request(flow):
# #flow.request.headers['User-Agent'] = 'MitmProxy'
# print(flow.request.headers) def response(flow):
start_url = "https://truffle.cnhnb.com/banana/supply/query/list"
response = flow.response
info = ctx.log.info
if flow.request.url.startswith(start_url):
text = response.text data = json.loads(text)
save(data) def save(data):
DATABASE_IP = '127.0.0.1'
DATABASE_PORT = 27017
DATABASE_NAME = 'sun'
client = pymongo.MongoClient(DATABASE_IP, DATABASE_PORT)
db = client.sun
db.authenticate("dba", "dba")
collection = db.huinong # 准备插入数据
print(data["data"]["datas"])
collection.insert_many(data["data"]["datas"])

实现的效果

注意,现在还没有设置手机自动操作,所以操作是我手动滑动的。左侧数据已经成功的捕获到了。

4. 入库效果

数据存储到mongodb中,在处理就比较简单了

5. 其他说明

mitmdump提供了专门的日志输出功能,可以设定不同级别以不同颜色输出结果。

ctx模块有log功能,调用不同的输出方法就可以输出不同颜色的结果,以方便我们做调试。

ctx.log.warn(str(flow.request.query))
ctx.log.error(str(flow.request.headers))

更多的脚本例子,可以去参考。

https://github.com/mitmproxy/mitmproxy/tree/master/examples/simple

后续,我们将尝试将刚才的手动滑动修改成自动操作......

![python爬虫入门教程](https://img-blog.csdnimg.cn/20190123152321413.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hpaGVsbA==,size_16,color_FFFFFF,t_70#pic_center =200x)

Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分的更多相关文章

  1. Python爬虫入门教程 16-100 500px摄影师社区抓取摄影师数据

    写在前面 今天要抓取的网站为 https://500px.me/ ,这是一个摄影社区,在一个摄影社区里面本来应该爬取的是图片信息,可是我发现好像也没啥有意思的,忽然觉得爬取一下这个网站的摄影师更好玩一 ...

  2. Python爬虫入门教程 28-100 虎嗅网文章数据抓取 pyspider

    1. 虎嗅网文章数据----写在前面 今天继续使用pyspider爬取数据,很不幸,虎嗅资讯网被我选中了,网址为 https://www.huxiu.com/ 爬的就是它的资讯频道,本文章仅供学习交流 ...

  3. Python爬虫入门教程 17-100 CSD*博客抓取数据

    写在前面 写了一段时间的博客了,忽然间忘记了,其实CSD*博客频道的博客也是可以抓取的,所以我干了..... 其实这事情挺简单的,打开CSDN博客首页,他不是有个最新文章么,这个里面都是最新发布的文章 ...

  4. Python爬虫入门教程 33-100 电影评论数据抓取 scrapy

    1. 海王评论数据爬取前分析 海王上映了,然后口碑炸了,对咱来说,多了一个可爬可分析的电影,美哉~ 摘录一个评论 零点场刚看完,温导的电影一直很不错,无论是速7,电锯惊魂还是招魂都很棒.打斗和音效方面 ...

  5. Python爬虫入门教程 2-100 妹子图网站爬取

    妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...

  6. Python爬虫入门教程:豆瓣Top电影爬取

        基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests parsel csv 安装Python并添加到环境变量,pip安装需要的相关模块即可. 爬虫基本思路 一. ...

  7. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分

    1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...

  8. Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy

    爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ...

  9. Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy

    爬前叨叨 2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我 ...

随机推荐

  1. Linux下快速比较两个目录的不同

    曾多次想要在Linux下比较目录a和目录b中文件列表的差别,然后对目录a比目录b中多出的文件.少掉的文件分别做处理.但是,在网上搜索了多次也都没找到能直接处理好的工具. 所以想了很多不少方法,自我感觉 ...

  2. Quartz简单案例

    需求需要开发一个每天定时推送消息给微信用户,第一次接触quartz,简单案例 1. 先编辑要执行的任务 测试类代码 package com.wqq.test.quartz; import org.sp ...

  3. MySQL 大数据量快速插入方法和语句优化

    MySQL大数据量快速插入方法和语句优化是本文我们主要要介绍的内容,接下来我们就来一一介绍,希望能够让您有所收获! INSERT语句的速度 插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例 ...

  4. 【bzoj 4173】数学

    Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N,M<=10^15 ...

  5. BZOJ_1345_[Baltic2007]序列问题Sequence_单调栈

    BZOJ_1345_[Baltic2007]序列问题Sequence_单调栈 Description 对于一个给定的序列a1,…,an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai ...

  6. BZOJ_2527_[Poi2011]Meteors_整体二分

    BZOJ_2527_[Poi2011]Meteors_整体二分 Description Byteotian Interstellar Union (BIU) has recently discover ...

  7. php之array_column 的使用

    听说只有大牛级的高工才知道的函数array_column () 讲真,我才知道. (PHP 5 >= 5.5.0, PHP 7) array_column - 返回数组中指定的一列 说明 arr ...

  8. Java IO--字符流--InputStreamReader 和 OutputStreamWriter

    今天继续学习字符流的子类!!!! 先来熟悉一下适配器设计模式:(手写的,,嘿嘿) 因为据说InputStreamReader 和OutputStreamWriter采用了适配器模式(现在我还没能理解, ...

  9. SQL Server 锁详解

    锁是一种防止在某对象执行动作的一个进程与已在该对象上执行的其他进行相冲突的机制.也就是说,如果有其他人在操作某个对象,那么你旧不能在该对象上进行操作.你能否执行操作取决于其他用户正在进行的操作. 通过 ...

  10. 基于 Webpack 4 和 React hooks 搭建项目

    面对日新月异的前端,我表示快学不动了