Python中requests库与json库的使用详解

一.请求网络,访问网址的所有内容模板:

import requests

#1.访问网络,请求网址的所有内容都在这个response对象中<Response [200]>

response=requests.get('https://www.baidu.com')

#response.text返回的内容是文本的形式,文本和网页可以使用response.text来获取

#print(response.text)

#response.content返回的内容是二进制的形式(所有计算机上的东西,本质都是二进制)

#以后只要遇到图像,和视频这样的内容全部使用response.content来获取

print(response.content)

print(response.status_code)#显示请求的结果,状态码为200则表明成功

11111111111111111111111111111111111111111111111111111111111111111111111111111111

注意:.text返回的内容是文本的形式,文本和网页可以使用response.text来获取,而

.content返回的内容是二进制的形式(所有计算机上的东西,本质都是二进制)

#以后只要遇到图像,和视频这样的内容全部使用response.content来获取

二读取内容的两种格式:

格式一:

#读取文件内容'demo.txt':是相对路径,也可以写绝对路径

#1.读取文件内容'r':read的缩写,表示我要读取文件

#'rb’:表示读取文件内容,并把文件内容以二进制的形式读取出来

#读取文档,直接'r'即可;读取音视频,则用'rb'

 file=open('爬虫代码尝试\demo.txt','r',encoding='utf-8')

 content=file.read()

#print(content)

#释放掉刚才打开文件的操作,相当于保存并关闭了文件,不屑相当于文件一直处于打开状态

 file.close()

11111111111111111111111111111111111111111111111111111111111111111111111111111111111111

'demo.txt'是在同一文件夹的文件:我爱中国

格式二:

# 读取文本内容方法2:with open() as file:

#临时创建一个文件,并读取内容,节省代码,在with外面,file是无效的

# with open('爬虫代码尝试\demo.txt','r',encoding='utf-8') as file:

    # content=file.read()

    # print(content)

11111111111111111111111111111111111111111111111111111111111111111111111111111111111111

#读取图片

with open('爬虫代码尝试\demo.jpg','rb') as file:

    content=file.read()

    print(content)

解释:

这里的'r'和'rb'表示读取的文件类型

  • 文本文件:

  • r: 读取文本文件。
  • w: 写入文本文件,清空原有内容。
  • a: 追加内容到文本文件末尾。
  • r+: 读取和写入文本文件。
  • w+: 写入和读取文本文件,清空原有内容。
  • a+: 追加内容到文本文件末尾,并可以读取文件内容。
  • 二进制文件:

  • rb: 读取二进制文件。
  • wb: 写入二进制文件,清空原有内容。
  • ab: 追加内容到二进制文件末尾。
  • rb+: 读取和写入二进制文件。
  • wb+: 写入和读取二进制文件,清空原有内容。
  • ab+: 追加内容到二进制文件末尾,并可以读取文件内容。
  •  三写入文件的两种格式:

    格式一:

    import requests

    file=open('test17.txt','w',encoding='utf-8')

    file.write('古希腊掌管文件的神!!!')

    file.close()

    效果图:

    #创建了一个新文件,并在新文件里有所写的内容

    注意:encoding='utf-8'是改变编码的方式,使中文可以显示

    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

    格式二:

    # r或者w是最基础的使用方式,其实还有其他的比如a可以文件中追加内容

    # with open('test.txt','a',encoding='utf-8') as file:

        # file.write('古希腊掌管文件的神!!!')

    效果图:

    三.结合一和二的内容,实现在图片网址中爬取一张图片并保存在自己创建的一个文件:

    # 2.获取文件并下载

    # response=requests.get(url="https://img1.baidu.com/it/u=2172818577,3783888802&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1422")

    # with open('1234.jpg','wb') as file:

        # file.write(response.content)

    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

    效果:

  • 文本文件:

  • r: 读取文本文件。
  • w: 写入文本文件,清空原有内容。
  • a: 追加内容到文本文件末尾。
  • r+: 读取和写入文本文件。
  • w+: 写入和读取文本文件,清空原有内容。
  • a+: 追加内容到文本文件末尾,并可以读取文件内容。
  • 二进制文件:

  • rb: 读取二进制文件。
  • wb: 写入二进制文件,清空原有内容。
  • ab: 追加内容到二进制文件末尾。
  • rb+: 读取和写入二进制文件。
  • wb+: 写入和读取二进制文件,清空原有内容。
  • ab+: 追加内容到二进制文件末尾,并可以读取文件内容。
  • 四。get()和post()       模拟浏览器 

    import requests

    # post请求

    #get请求不安全,因为get请求是把所有内容全放在连接中发送

    #如果是get请求,那么在浏览器中输入http://127.0.0.1:5000/get_user?username=admin&password=123456

    #post请求会把用户名和密码等单独到一个包发送

    # user={'username':'zhangsan','password':'123456'}

    # response=requests.post('https://httpbin.org/post',data=user)

    # print(response.text)

    #2模拟浏览器,访问网站

    headers={'User-Agent':'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}

    user={'username':'zhangsan','password':'123456'}

    #模拟谷歌浏览器来访问网站

    response=requests.post('https://httpbin.org/post',data=user,headers=headers)

    print(response.text)

    效果:

    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "password": "123456", 
        "username": "zhangsan"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate",
        "Content-Length": "33",
        "Content-Type": "application/x-www-form-urlencoded",
        "Host": "httpbin.org",
        "User-Agent": "Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
        "X-Amzn-Trace-Id": "Root=1-67d42baf-5dc1408b21208bbd5c0dec32"
      },
      "json": null,
      "origin": "117.32.216.92",
      "url": "https://httpbin.org/post"
    }

     

    总结:

    GET 请求 vs POST 请求

    GET 请求
  • 用途

  • get请求不安全,因为get请求是把所有内容全放在连接中发送

    用于从服务器获取数据。

  • 请求参数通过 URL 的查询字符串传递。
  • 适用于获取数据的操作,不会对服务器数据进行修改。
  • 特点

  • 请求参数在 URL 中可见,因此不适合传递敏感信息(如密码)。
  • 有长度限制(取决于浏览器和服务器)。
  • 可以被缓存。
  • 可以被书签收藏。
  • POST 请求
  • 用途

  • #post请求会把用户名和密码等单独到一个包发送

    用于向服务器提交数据。

  • 请求参数通过请求体传递。
  • 适用于需要修改服务器数据的操作(如提交表单、上传文件)。
  • 特点

  • 请求参数在请求体中,不会显示在 URL 中,适合传递敏感信息。
  • 没有长度限制。
  • 不会被缓存。
  • 不能被书签收藏。
  • 五 json库

    import json

    import requests

    response=requests.get(url='http://t.weather.itboy.net/api/weather/city/101010100')

    # print(response.text)

    #虽然看上去跟字典一模一样,但是,不能获取,因为这里的内容是json

    #明确,现在是把json转化为Python,用的是loads或者load;因为是response.text是字符串,所以用loads;

    #如果response.content是二进制,那么用load;

    #print(response.json())

    result=json.loads(response.text)

    #print('这是Python数据',result)

    #https://t.weather.itboy.net/api/weather/city/101010100

    #data=result['time']

    # 存放的是一个列表,列表中是多个字典,包含某一天具体信息

    data=result['data']['forecast']

    # 保存日期,保存最高温度,保存最低温度

    # 使用字典格式保存(‘日期’:‘)

    info={}

    all_data=[]

    #先获取所有信息,保存在一个字典中(一天的内容)

    #再把当天的信息保存到一个列表中

    for message in data:

        info['日期']=message['date']

        info['最高温度']=message['high']

        info['最低温度']=message['low']

        print(info)

        print('\n')

        all_data.append(info)

        print(all_data)

    # 现在有个这样一个列表,如何转为json

    # python转json:dump(),dumps() 保存成一个json文件,所以用dump

    # 爬虫,传输或者传递数据,用的很多都是json

    with open('temperature.json','w')as file:

        json.dump(all_data,file)

    with open('temerature1.json','w',encoding='utf-8')as file:

      # json.dump(all_data,file,ensure_ascii=False)

        json_str=json.dumps(all_data,ensure_ascii=False)

        file.write(json_str)

    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

    效果:

    temperature.json:[{"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}, {"\u65e5\u671f": "28", "\u6700\u9ad8\u6e29\u5ea6": "\u9ad8\u6e29 15\u2103", "\u6700\u4f4e\u6e29\u5ea6": "\u4f4e\u6e29 7\u2103"}]

    temerature1.json:[{"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}, {"日期": "28", "最高温度": "高温 15℃", "最低温度": "低温 7℃"}]

    补充:JSON文件是文本文件的一种特殊形式,其核心价值在于结构化数据的存储与交换。而普通文本文件更侧重于通用文本信息的记录。两者在扩展名、解析方式及数据组织上差异显著,需根据实际需求选择。

     特性  JSON文件  普通文本文件(.txt) 

     数据结构  必须符合JSON格式规范(键值对、数组等),具有严格的语法规则。  无固定结构,可包含任意文本内容(如纯文本、代码、HTML等)。 
     解析方式  需通过编程语言的JSON库(如Python的`json`模块)解析为对象或数组。  直接以字符串形式读取,无需特殊解析。 
     存储内容  专用于存储结构化数据(如配置信息、API响应、数据库记录)。  适用于任意文本信息(如日志、网页内容)。 
     扩展名  `.json`  `.txt`或其他任意扩展名(通常为`.txt`)

     操作流程:`json.loads()` 解析 → VSCode 操作 Python 对象 → `json.dump()` 写入新文件

    中文显示:需同时设置 `ensure_ascii=False` 和 `encoding='utf-8'`。

    验证方法:用文本编辑器(如 VSCode 自带编辑器)直接打开生成的 `.json` 文件,检查中文是否正常显示。

    `json.loads()` 的作用与 VSCode 操作:
    功能:`json.loads()` 将 JSON 字符串解析为 Python 对象(如字典、列表),使其可在 Python 程序中直接操作。  
    VSCode 操作:  
      解析后的 Python 对象(如字典)可直接通过键值访问、增删元素等操作。例如:  
        python
        import json
        with open('data.json', 'r', encoding='utf-8') as f:
            data = json.load(f)   解析为字典
        data'new_key' = '新值'   直接操作字典  
      支持所有 Python 字典操作方法(如 `.update()`、`.pop()` 等)

    注意:音视频和图片一般都是二进制文件,文本内容(字符串等)一般都为文本文件

    作者:目标为成为电子高手

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python中requests库与json库的使用详解

    发表回复