python+mitmdump爬取汽车之家汽车信息

一,准备工作
(一)安装mitmproxy
1,通过 pip install mitmproxy 安装
2,通过安装包安装
网址:https://github.com/mitmproxy/mitmproxy/releases
下载mitmproxy-4.0.1-windows-installer.exe 直接安装就行的
(二)证书安装
1,电脑安装证书
安装好mitmproxy后如果需要获取HTTPS请求,需要安装证书,首先cmd运行:mitmdump ,启动mitmdump,然后可以在用户目录下面的.mitmproxy下面找到证书 如:
python+mitmdump爬取汽车之家汽车信息_第1张图片
点击安装,直接下一步即可,需要注意的下面的这一步,把证书存储在受信任的目录下面就行,然后点击完成就行
python+mitmdump爬取汽车之家汽车信息_第2张图片

2,手机安装证书
把电脑里面的证书发送到手机上面:
python+mitmdump爬取汽车之家汽车信息_第3张图片
然后打开手机无线网设置>高级>证书安装,点击证书安装就行
python+mitmdump爬取汽车之家汽车信息_第4张图片
证书安装完成后,在手机中设置代理
手机和电脑连接同一无线网,然后长按无线网,出现高级选项或者是修改网络,里面设置代理,选择手动,主机名就是本机的ip地址,可以通过cmd命名 :ipconfig命令获取,端口默认8080就行。
python+mitmdump爬取汽车之家汽车信息_第5张图片

设置好后,mitmproxy可以截取到手机发送获取的http/https请求了
Windows不支持mitmproxy,但是可以通过mitmdump和mitmweb
cmd命令:mitmdump可以获取请求,如:

python+mitmdump爬取汽车之家汽车信息_第6张图片

二,查看汽车之家汽车信息的接口信息,编写python脚本
可以通过mitmweb查看,可以直观的看到请求的详情,cmd运行:mitmweb,
然后打开汽车之家app,点击汽车列表里面的奥迪选项,然后查看数据接口
如:
python+mitmdump爬取汽车之家汽车信息_第7张图片
https://cars.app.autohome.com.cn链接里面的就是数据的json数据的接口
编写代码:

mport json
def response(flow):
    url = 'cars.app.autohome.com.cn'
    if url in flow.request.url:
        text = flow.response.text
        data_json = json.loads(text)
        if data_json.get('result').get('fctlist'):
            datas = data_json.get('result').get('fctlist')
            for data in datas:
                infos = data.get('serieslist')
                for info in infos:
                    print(info)

保存为cars.py ,然后到cars.py目录所在目录,打开cmd命令,运行:mitmdump -s cars.py
页面如下,虽然获取到数据,但是并没有打印出结果,通过反复观看,发现图中标记的连接,修改代码尝试:
python+mitmdump爬取汽车之家汽车信息_第8张图片

修改代码如下:

  url = '111.48.88'

然后重新点击奥迪汽车选项,可以看到打印的结果:
python+mitmdump爬取汽车之家汽车信息_第9张图片

最终代码:

import json
def response(flow):
    url = ['111.47.222.143','111.48.88']
    if url[0] in flow.request.url or url[1] in flow.request.url:
        text = flow.response.text
        data_json = json.loads(text)
        if data_json.get('result').get('fctlist'):
            datas = data_json.get('result').get('fctlist')
            with open('D:\\MP4\\2.TXT','a+') as f:
                for data in datas:
                    infos = data.get('serieslist')
                    for info in infos:
                        car_data={
                            'name':info.get('name'),
                            'levelid': info.get('levelid'),
                            'levelname': info.get('levelname'),
                            'price': info.get('price'),
                            'name': info.get('name')
                        }
                        f.write(str(car_data)+'\n')
                        print(info)

然后打开汽车之家汽车列表,点击汽车品牌,可以获取到汽车的数据,保存到本地TXT文档中
结果如下:
python+mitmdump爬取汽车之家汽车信息_第10张图片

如果需要自动化实现,可以用appium实现自动化滑动操作。

你可能感兴趣的:(python+mitmdump爬取汽车之家汽车信息)