Reqeusts概述

Reqeusts概述

问题:为什么要学习requests,而不是urllib?

  • requests的底层实现就是urllib
  • requests简单易用
  • requests在python2 和python3中通用,方法完全一样
  • requests能够自动帮助我们解压(gzip压缩的等)网页内容

requests的作用

requests的基本使用

  • 安装requests模块: pip install requests
  • 使用步骤(三部曲):

    • 导入模块: import reqeusts
    • 发送get请求,获取响应: response = requests.get(url)
    • 从响应中获取数据
  • 核心代码: 发送get请求

    response = requests.get(url)
  • response的常用属性:
    • response.text
    • respones.content 二进制形式的响应数据
    • response.status_code 响应状态吗
    • response.headers 响应头
    • response.request.headers 请求头
  • response.text 和response.content的区别
    • response.text
      • 类型:str
      • 解码类型: 根据HTTP头部对响应的编码作出有根据的推测,推测的文本编码
      • 如何修改编码方式:response.encoding=”gbk”
    • response.content
      • 类型:bytes
      • 解码类型: 没有指定
      • 如何修改编码方式:response.content.deocde(“utf8”)
    • 推荐使用response.content.deocde()的方式获取响应的html页面
  • 需求:通过requests向百度首页发送请求,获取百度首页的数据
    # 1. 导入这个模块; 如果没有就安装一下: pip install resquests
    import requests
    # 2. 发送请求(get)
    response = requests.get("http://www.baidu.com/")
    # 3. 读取数据
    # response.encoding = "utf8"
    # #print(response.encoding) #ISO-8859-1 拉丁文编码表; 希腊等一些欧洲国家
    #  text 属性: 返回 自动识别编码的字符穿, 如果要指定编码,可以使用encoding的属性来指定编码
    # content = response.text
    # print(content)
    # content 属性: 获取的是二进制数据,使用decode进行解码
    data = response.content.decode()
    print(data)
    # response.status_code  响应状态吗
    print(response.status_code)
    # response.request.headers  请求头
    print(response.request.headers)
    # response.headers   响应头
    print(response.headers)

怎么才能做到100%的解决乱码问题

  1. 先使用decode()来尝试解码, 现在国内80%网站都是用utf-8进行编码的
  2. 如果上面面没有解决乱码问题,就指定GBK的编码方式, 个别网站使用的是GBK
  3. 如果指定GBK还不行,就request的自动推断功能了,通过text 属性获取
    # 1. 现在国内80%网站都是用utf-8进行编码的
    data = response.content.decode()
    print(data)
    # 2. 如果上面面没有解决乱码问题,就指定GBK的编码方式
    # data = response.content.decode("GBK")
    # 3. 如果指定GBK还不行,就request的自动推断功能了,通过text 属性获取
    # data = response.text

练习: 使用requests下载一张图片保存到本地

  • 思路:
    1. 导包
    2. 发送请求,获取响应
    3. 打开文件,把数据写入文件
  • 代码:
    # 1. 导入requests模块
    import requests
    # 2. 发送请求获取二进制数据(bytes)
    respone =  requests.get("http://imgsrc.baidu.com/image/c0%3Dpixel_huitu%2C0%2C0%2C294%2C40/sign=098c3f828cd6277ffd1f3a7841407a5c/3c6d55fbb2fb4316e3afd1432ba4462309f7d353.jpg")
    # 获取二进制数据; 注意: 这里不要解码, 因为图片,视频等文件都是二进制的不是文本,不需要解码
    # data = respone.content
    # 3. 把数据写入文件
    with open("壁纸.jpg", "wb") as f:
        f.write(respone.content)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值