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)

最新文章

  1. 关于Python对齐问题
  2. mvc 中关于资源文件的扩展
  3. ENode 1.0 - 框架的总体目标
  4. Elasticsearch聚合 之 Range区间聚合
  5. teamviewer现在无法捕捉屏幕,这可能是由于快速的用户切换或远程桌面会话已经断开
  6. 中科院Oracle 10G 数据库系统培训视频教程(828MB )
  7. PAT-乙级-1039. 到底买不买(20)
  8. 从零开始学android-一行两个按钮居中 布局
  9. Hibernate拦截器(Interceptor)与事件监听器(Listener)
  10. ASP.NET 5服务
  11. “如何稀释scroll事件”引出的问题
  12. 推荐大家使用的CSS书写规范、顺序(转载)
  13. Extjs Store 的用法详解
  14. 【Java入门提高篇】Day13 Java中的反射机制
  15. LeetCode - 601. Human Traffic of Stadium
  16. java获取泛型类型
  17. 【剑指offer】求树中满足和为给定数字的路径
  18. Idea 破解教程 (2018.11-29最新版)
  19. 颜色ARGB的混合
  20. mysql的介绍和安装

热门文章

  1. 51单片机GPIO口模拟串口通信
  2. 高效开发 Web 单页应用解决方案
  3. data.go
  4. Elasticsearch笔记五之java操作es
  5. [UOJ#207. 共价大爷游长沙]——LCT&随机化
  6. iOS 远程推送通知 详解
  7. I春秋——Misc(贝斯家族)
  8. ie兼容问题记录
  9. .NET Core IdentityServer4实战 第三章-使用EntityFramework Core进行持久化配置
  10. JavaWeb 乱码问题终极解决方案!