ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python爬虫学习笔记-第三十一+三十二课(fiddler工具的使用)

2021-03-29 22:57:08  阅读:143  来源: 互联网

标签:fiddler Python menu 爬虫 url Fiddler data response


Fiddler工具的使用

1. Fiddler抓包工具简介

什么是fiddler
它是一个http协议调试代理工具 ,记录并检查你的电脑和互联网之间的通讯。
官网链接:https://www.telerik.com/fiddler
在这里插入图片描述
fiddler的优点

  • 使用简单;
  • 支持众多的http调试任务;
  • 支持大多数的浏览器;
  • 支持phone、pad等移动设备。

2. Fiddler的安装与配置

2.1 fiddler的安装

安装包可在官网下载,安装过程也非常简单。
在这里插入图片描述
为方便使用,可将可执行文件发送到桌面快捷方式:
在这里插入图片描述
想要使用fiddler工具爬取网页端数据时,还需在浏览器安装SwitchyOmega插件。
SwitchyOmega插件的安装方法与之前安装的xpath插件一样。
首先进入浏览器扩展程序界面,确认打开开发者模式,点击加载已解压的扩展程序,选择插件解压后的文件夹即可。
在这里插入图片描述

笔者把fiddler和SwitchyOmega插件的安装包上传到百度网盘,有需要的可以下载。
fiddler抓包工具链接:https://pan.baidu.com/s/1OTn_NPa79mGi-hnsPYa9HA
提取码:ff1g

2.1 fiddler的配置

打开fidder,进入如下图所示的界面:
在这里插入图片描述
点击HTTPS,首次勾选后出现警告弹窗,选择信任并安装相应的证书,总之就是选yes即可:

在这里插入图片描述
点击Connections,设置端口(不要和别的端口重名):

在这里插入图片描述
遇到安全警告,还是选信任、yes之类的选项。fiddler的配置大致就是这样。

现在,对SwitchyOmega插件进行配置,创建一个新情景模式:
在这里插入图片描述
按照下图进行相应的配置。配置结束后点击左侧的应用选项:
在这里插入图片描述
至此,网页端fiddler抓包工具的配置就完成了。

3. Fiddler配置移动端

查看本机的IP,笔者这里介绍两种方法。
第一种,在终端中输入如下命令:ipconfig
在这里插入图片描述
第二种,打开网络和Internet设置,有线连接点击以太网,WiFi就点击WLAN,点击管理已知网络,总之很简单的步骤:
在这里插入图片描述
启动模拟器后,点击上方菜单的模拟器配置(不是手机应用设置),预设型号默认就行,这里需要注意的是打开网络桥接模式,提示要安装驱动,点击安装即可,会自动下载并安装驱动:
在这里插入图片描述
手机WiFi连接的设置,这里的代理服务器主机名用刚刚查询的网络IP,端口号需与fiddler一致:
在这里插入图片描述
在配置移动端时,需在fiddler的Options–>HTTPS里做如下修改,以确保移动端能正常使用fiddler:
在这里插入图片描述
配置好WiFi后,打开手机浏览器APP,输入网址:本机IP:端口,如下:

在这里插入图片描述
此过程,网络可能不稳定,需要多试几次,成功时弹出如下界面,证书名称就写fiddler就行:
在这里插入图片描述
安装成功后会弹出如下的提示吐司:
在这里插入图片描述
至此,移动端fiddler的配置就算完成了。

4. 利用Fiddler工具爬取移动端数据

4.1 利用fiddler寻找数据接口

案例需求:获取菜谱分类 --> 热门分类中 --> 家常菜下9个菜谱的名字和对应ID,点击每个菜进入相应的详情页,将排列的前20个数据对应的作者、名字爬取下来。
在这里插入图片描述
菜谱分类界面的数据接口,在fiddler中寻找,先看地址中没有特殊的关键字,有疑似选项后可进一步查看软件右下方的response中有没有想要的数据。这一步要看经验,笔者暂时也没有好方法能迅速定位到所需数据:
在这里插入图片描述

将菜谱分类页面的响应复制粘贴到json.cn,得到如下结果:
在这里插入图片描述

继续寻找有关每个菜谱详情页数据的接口:
在这里插入图片描述
向当前页面发起请求所携带的数据中包含的中文是十六进制的,这里可以使用fiddler内部的工具进行转换,点击右上角菜单栏的Textwizard:

在这里插入图片描述

将相关的响应放到json在线转换网站中进行解析:
在这里插入图片描述

4.2 代码编写

import requests
import json

def handel_request(url, data):
    headers = {
        # "Cookie": " duid=67891190", cookie不要保留,容易过期
        "client": "4",
        "version": "6979.2",
        "device": "MI 6",
        "sdk": "22,5.1.1",
        "channel": "huawei",
        "resolution": "1920*1080",
        "display-resolution": "1920*1080",
        "dpi": "2.0",
        # "pseudo-id": " 70f71aa256180ea0",
        "brand": "Xiaomi",
        "scale": "2.0",
        "timezone": "28800",
        "language": "zh",
        "cns": "3",
        "carrier": "CHINA+MOBILE",
        # "imsi": " 460078023407157",
        "User-Agent": "Mozilla/5.0 (Linux; Android 5.1.1; MI 6  Build/NMF26X) AppleWebKit/537.36 ("
                      "KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36",
        "act-code": "1616685886",
        "act-timestamp": "1616685854",
        "uuid": "4574e06e-82d6-4018-b654-c68212c07ec6",
        "battery-level": "0.52",
        "battery-state": "2",
        "terms-accepted": "1",
        "newbie": "1",
        "reach": "1",
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
        "Accept-Encoding": "gzip, deflate",
        "Connection": "Keep-Alive",
        "session-info": "kQlIQjIM8MjiP8IAUttdbmvGYzhs6fZhEUtBDKheeKishGYKMRciiPNrdgnynrwVwS87yMNPpFAWR/2huvF76V/8G5M0qRQFbinEKPf8AjgWeqkcrPPA8QlIljAiluwF",
        "Host": "api.douguo.net",
        # "Content-Length": " 132"
    }
    response = requests.post(url=url, headers=headers, data=data)
    return response

def handle_douguo():
    url = 'https://api.douguo.net/recipe/flatcatalogs'
    data = {
        'client': '4',
        # '_session': '1616939405407863254010802345',
        # 'v': '1616685048',
        '_vs': '2305'
    }
    response = handel_request(url=url, data=data)
    # 将json格式字符串的响应转化为python字典
    index_response_dict = json.loads(response.text)
    # print(response.text)
    # 找到家常菜分类,结果是一个列表,存放菜的名字和ID
    home_cooking_list = index_response_dict['result']['cs'][0]['cs'][0]['cs']
    for cooking_menu in home_cooking_list:
        menu_name = cooking_menu['name']
        menu_id = cooking_menu['id']
        print('Current Menu:{}, ID:{}'.format(menu_name, menu_id))
        # 对于每一个菜谱,进入详情页后,继续爬取想要的数据
        detal_post_data = {
            "client": "4",
            # "_session": "1537295931652863254010448503",
            "keyword": menu_name,
            "order": "3",
            "_vs": "400",
        }
        handle_menu_detal(detal_post_data)

def handle_menu_detal(data):
    # 即便是不同菜单的详情页,发起请求的url也是一样的,只是需携带的数据不同
    url = 'http://api.douguo.net/recipe/v2/search/0/20'
    # 获取响应
    response = handel_request(url=url, data=data)
    index_response_dict = json.loads(response.text)
    # 提取关键数据
    detal_data_list = index_response_dict['result']['list']
    for detal_data in detal_data_list:
        author = detal_data['r']['an']
        tips = detal_data['r']['tips']
        print('Author: ', author)
        print('tips: ', tips)

handle_douguo()

运行结果:
在这里插入图片描述

标签:fiddler,Python,menu,爬虫,url,Fiddler,data,response
来源: https://blog.csdn.net/tzr0725/article/details/115168337

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有