爬虫篇(9)Fiddler抓包请求一键转换成python代码

前言:前段时间由于需求,用Fiddler各种抓包,各种分析,主要是测试请求时添加cookie、添加请求头、添加url, 虽然前面有一键转换cookie/headers的工具(可以看我前面博客),但还是有些烦琐。 想着能不能将Fiddler抓到的请求一键转换成Python代码,但是在网上找了一下,无果(有知道的同学可以评论留言,十分感谢), 于是决定自己写一个能将Fiddler一键转换成Python代码的Python代码。

话不多说,上代码(如果觉得有更好的优化方案请联系我修改):

#!/usr/bin/python
# -*- coding: UTF-8 -*-

str_filename = "2.txt"
# save_name = "re_test.py"
save_name = str_filename.replace("txt", "py")


class FidToPy():
    def __init__(self, str_name, sa_name):
        self.str_filename = str_name
        self.save_name = sa_name
        self.text = ""
        self.url_list = []
        self.headers = {}
        self.cookies = {}
        self.data = {}

    def get_url(self):
        infos = self.text.split("\n")[0]
        self.url_list = [infos.split(" ")[0], infos.split(" ")[1]]

    def get_headers(self):
        infos = self.text.split("\n")[1:]
        info = ""
        for i in infos:
            if "Cookie: " in i:
                break
            info += i + "\n"
        headers = info.split("\n")
        while "" in headers:
            headers.remove("")
        for i in headers:
            if ": " not in i:
                break
            self.headers[i.split(": ")[0]] = i.split(": ")[1]

    def get_cookies(self):
        infos = self.text.split("\n")[1:]
        cookies_flag = 0
        for i in infos:
            if "Cookie: " in i:
                self.cookies = i.replace("Cookie: ", "")
                print(self.cookies )
                cookies_flag = 1
                break
        if cookies_flag==1:
            self.cookies = {i.split("=")[0]: i.split("=")[1] for i in self.cookies.split("; ")}

    def get_data(self):
        try:
            infos = self.text.split("\n")
            for i in range(2, len(infos)):
                if infos[i - 1] == "" and "HTTP" in infos[i + 1]:
                    self.data = infos[i]
                    break
            self.data = {i.split("=")[0]: i.split("=")[1] for i in self.data.split("&")}
        except:
            pass

    def get_req(self):
        info_beg = "#!/usr/bin/python\n# -*- coding: UTF-8 -*-\nimport requests\n\n"
        info_url = "url = \'{}\'\n".format(self.url_list[1])
        info_headers = "headers = {}\n".format(self.headers)
        info_cookies = "cookies = {}\n".format(self.cookies)
        info_data = "data = {}\n\n".format(self.data)
        if "GET" in self.url_list[0]:
            info_req = "html = requests.get(url, headers=headers, verify=False, cookies=cookies)\n"
        else:
            info_req = "html = requests.post(url, headers=headers, verify=False, cookies=cookies, data=data)\n"
        info_end = "print(len(html.text))\nprint(html.text)\n"
        text = info_beg + info_url + info_headers + info_cookies + info_data + info_req + info_end
        with open(save_name, "w+", encoding="utf8") as p:
            p.write(text)
        print("转化成功!!")
        print(save_name, "文件保存!")

    def read_infos(self):
        with open(self.str_filename, "r+", encoding="utf-8") as p:
            old_line = ""
            for line in p:
                if old_line == b"\n" and line.encode() == b"\n":
                    break
                old_line = line.encode()
                self.text += old_line.decode()
        # print("self.text:", self.text)

    def start(self):
        self.read_infos()
        self.get_url()
        self.get_headers()
        self.get_cookies()
        self.get_data()
        print("self.url_list:", self.url_list)
        print("self.headers:", self.headers)
        print("self.cookies:", self.cookies)
        print("self.data:", self.data)
        self.get_req()


if __name__ == '__main__':
    f = FidToPy(str_filename, save_name)
    f.start()

使用教程:

首先从Fiddler选中你要转换的请求 -> Save -> Selected Session -> as Text(也可以选择as Text(Header only)...),如图所示:

这样,我们就得到了包含了这个请求的txt文本:

把这个文件移动到和前面Python代码同一个文件夹,然后修改Python中第四行的,改成你请求信息txt文件的名字,如:

str_filename = "15_Full.txt"

右键运行,就可以得到一个同名的.py文件,这个就是我们要的Python请求代码了,so simply!!

效果图:

注:如果是App抓包,post请求中data可能需要加一个解码步骤

 

原创不易,转载请标明出处。

 

 

  • 20
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
根据Fiddler抓包请求构造爬虫可以分为以下几个步骤: 1. 安装Fiddler并开启代理功能。在电脑上安装Fiddler,并在设置中开启代理功能,确保所有HTTP和HTTPS流量都通过Fiddler进行代理。 2. 使用浏览器访问目标网站。在浏览器中访问你要爬取的目标网站,并浏览到你要获取数据的页面。同时,Fiddler会捕捉到所有的请求和响应数据。 3. 分析抓包数据。打开Fiddler的会话列表,找到对应目标网站的请求记录。通过查看请求头和响应内容,了解请求的URL、请求方法、参数、Cookie信息等。还可以在Raw选项卡中查看请求和响应的原始数据。 4. 构造爬虫请求。根据分析的抓包数据,确定需要模拟的请求信息。例如,确定请求的URL、请求方法、请求参数等。使用编程语言(如Python)发送HTTP请求,将抓包数据中的请求头和请求体(如果有)添加到爬虫请求中。 5. 解析响应数据。发送请求后,获取到响应数据。根据抓包数据分析响应的格式(如JSON、HTML等),使用相应的解析方法将响应内容解析为可用的数据格式,如字典、列表等。 6. 处理Cookie和登录状态。如果目标网站需要登录才能获取数据,可以通过查看抓包数据中的Cookie信息,将其添加到爬虫请求请求头中。同时,需要处理登录操作,确保爬虫在每次请求时都以登录状态进行访问。 需要注意的是,爬虫的使用必须遵守法律和网站的使用规则。在编写爬虫时,应尊重网站的robots.txt文件,避免对网站造成过大的负担,并避免未经授权地使用和传播爬取到的数据。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值