Python之requests高级用法详解

 更新时间:2023年10月23日 10:40:29   作者:ZhiHuaWei  
这篇文章主要介绍了Python之requests高级用法详解,http协议是无状态的, 服务器无法区分多个请求是否来自同一个人,因此需要用cookie来进行标识,一般如果需要登录才能访问的网站就需要发送cookie信息,需要的朋友可以参考下

设置请求头(headers)

在爬虫操作中,经常需要携带请求头信息(比如User-Agent、Referer、Host、Origin、Cookie)才能正常访问。

User-Agent : 浏览器名称,服务器可以知道该请求是从哪个浏览器过来的,在爬虫中经常需要设置这个参数来伪装我们的请求是从浏览器中过来的,这个值也是我们最经常应用的;Referer : 表示当前请求是从哪个url过来的,在有些反爬虫请求中,如果不是从指定页面访问该请求,就不会有相关响应;

Host : 标识请求将要达到那台主机,并会在服务端被验证,如果不符合,就不能正确处理客户端的请求;

Origin : 说明最初请求是从哪里发起的。Referer显示来源页面的完整地址,而Origin显示来源页面的Origin: protocal+host,不包含路径等信息,也就不会包含含有用户信息的敏感内容,跟Referer相似,但是Origin只能用于post请求。Referer适用于所有请求;因此Origin较Referer更安全,多用于防范CSRF攻击;

Cookie : http协议是无状态的, 服务器无法区分多个请求是否来自同一个人,因此需要用cookie来进行标识,一般如果需要登录才能访问的网站就需要发送cookie信息。

GET请求代码示例

    # 引入requests库
    import requests
    
    # 声明定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 向指定的url发送请求,并返回
    url = 'https://www.baidu.com/s'
    # 传入参数
    data = {
        'wd': '中国'
    }
    r = requests.get(url=url, params=data, headers=headers)
    print(r.text)

POST请求代码示例

    # 引入requests库
    import requests
    
    # 声明定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 请求地址
    post_url = 'https://fanyi.baidu.com/sug'
    # 参数
    form_data = {
        'kw': 'baby'
    }
    # 进行post请求
    req = requests.post(url=post_url, data=form_data, headers=headers)
    print('json:', req.json())

设置代理服务器IP(proxy)

使用requests添加代理也是非常简单,只要在请求方法中(例如requests.get()或者requests.post())传递proxies参数就可以了,示例代码如下:

GET请求代码示例

    # 引入requests库
    import random
    import requests
    
    # 声明定义代理服务器列表
    proxy_list = [
        {"http": "58.21.202.124:8080"},
        {"http": "58.21.202.39:8080"},
        {"http": "39.107.232.194:8080"}
    ]
    # 随机选择一个代理
    proxy = random.choice(proxy_list)
    # 声明定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 请求地址
    url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'
    # 进行GET请求,打印响应结果
    try:
        req = requests.get(url=url, headers=headers, proxies=proxy)
        print(req.text)
    except requests.exceptions.ConnectionError as e:
        print(e)

POST请求代码示例

    # 引入requests库
    import random
    import requests
    
    # 声明定义代理服务器列表
    proxy_list = [
        {"http": "58.21.202.124:8080"},
        {"http": "58.21.202.39:8080"},
        {"http": "39.107.232.194:8080"}
    ]
    # 随机选择一个代理
    proxy = random.choice(proxy_list)
    # 声明定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 请求地址
    url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'
    # 进行POST请求,打印响应结果
    try:
        req = requests.post(url=url, headers=headers, proxies=proxy)
        print(req.text)
    except requests.exceptions.ConnectionError as e:
        print(e)

Cookies(Session)

如果在一个相应中包含了cookie,那么可以利用cookies属性拿到这个返返回的cookie值,例如:

    # 引入requests库
    import requests
    
    # GET访问
    # 向指定的url发送请求,并返回
    url = 'https://www.baidu.com/'
    # 发送get请求
    req = requests.get(url=url)
    # 响应内容
    print('Cookies信息:', req.cookies)
    print(req.cookies.get_dict())

requests.Session()

上面那个不是重点,重点的是requests.Session() ;之前使用urllib库的时候是可以使用opener发送多个请求,多个请求之间是可以共享cookie的。那么如果使用requests,也要达到共享cookie的目的,那么可以使用requests库给我们提供的session对象。注意,这里的session不是web开发中的那个session,这个地方只是一个会话的对象而已。还是以人人网登陆为例,使用requests来实现,示例代码如下:

    # 引入requests库
    import requests
    
    # 声明定义header
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
    }
    # 创建session对象
    session = requests.Session()
    # 人人网登陆地址
    post_uel = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2019621044248'
    # 参数
    form_data = {
        'email': '188****7357',  # 这是手机号,我隐藏掉中间四位
        'icode': '',
        'origURL': 'http://www.renren.com/home',
        'domain': 'renren.com',
        'key_id': '1',
        'captcha_type': 'web_login',
        'password': '01cb55635986f56265d3b55aaddaa79337d094cb56d6cf7724343a93ad586fe7',
        'rkey': 'd5ff51375d8eb17a011cad5622d835fd',
        'f': 'http%3A%2F%2Fwww.renren.com%2F971686685%2Fprofile'
    }
    ret1 = session.post(url=post_uel, headers=headers, data=form_data)
    print('登陆结果:', ret1.json())
    print('*' * 50)
    
    # 人人网个人中心地址
    get_url = 'http://www.renren.com/971686685/profile'
    ret2 = session.get(url=get_url)
    print(ret2.content.decode())

处理不信任的SSL证书

对于那些已经被信任的SSL证书的网站,例如//www.baidu.com/,那么使用requests库直接就可以正常的返回响应。请求可以为HTTPS请求验证SSL证书,就像web浏览器一样,SSL验证默认是开启的,如果证书验证失败,请求会抛出SSLError遇到请求的SSL验证,可以直接跳过不验证,将verify=False设置一下即可示例代码:

    # 引入requests库
    import requests
    
    # 向指定的url发送请求,并返回
    url = 'https://www.12306.cn/'
    # 发送get请求
    req = requests.get(url=url, verify=False)
    
    print(req.content)

到此这篇关于Python之requests高级用法详解的文章就介绍到这了,更多相关requests高级用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python忽略warnings的几种方法

    python忽略warnings的几种方法

    本文主要介绍了几种在Python忽略警告信息的方法,,可以使用Python 内置的警告控制机制来抑制特定类型的警告,下面就来介绍一下,感兴趣的可以了解一下
    2025-01-01
  • windows安装TensorFlow和Keras遇到的问题及其解决方法

    windows安装TensorFlow和Keras遇到的问题及其解决方法

    这篇文章主要介绍了windows安装TensorFlow和Keras遇到的问题及其解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-07-07
  • python基础教程之对象和类的实际运用

    python基础教程之对象和类的实际运用

    这篇文章主要介绍了python基础教程之对象和类的实际运用,本文讲解对象和类的一方法技巧,例如属性、内置方法、self关键字的运用等,需要的朋友可以参考下
    2014-08-08
  • Python高效生成requirements.txt的两种方法

    Python高效生成requirements.txt的两种方法

    Python项目依赖管理是开发流程中的关键环节,requirements.txt文件作为记录项目依赖的标准方式,能确保环境一致性并简化协作部署流程,掌握其生成方法对开发者至关重要,本文给大家介绍了两种高效生成requirements.txt的方法,需要的朋友可以参考下
    2025-12-12
  • Python散点图与折线图绘制过程解析

    Python散点图与折线图绘制过程解析

    这篇文章主要介绍了Python散点图与折线图绘制过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python上下文管理器深入讲解

    Python上下文管理器深入讲解

    Python有三大神器,一个是装饰器,一个是迭代器、生成器,最后一个就是今天文章的主角 -- 「上下文管理器」。上下文管理器在日常开发中的作用是非常大的,可能有些人用到了也没有意识到这一点
    2022-12-12
  • 解决PyCharm import torch包失败的问题

    解决PyCharm import torch包失败的问题

    今天小编就为大家分享一篇解决PyCharm import torch包失败的问题。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 一文带你深入理解Flask中的Session和Cookies

    一文带你深入理解Flask中的Session和Cookies

    Flask,作为一个灵活的微型 web 框架,提供了会话(Session)和 Cookies 管理的能力,本文将深入探讨 Flask 中的会话和 Cookies 的概念、工作机制以及应用实例,希望对大家有所帮助
    2023-12-12
  • 使用python查找替换PowerPoint演示文稿中的文本

    使用python查找替换PowerPoint演示文稿中的文本

    演示文稿已成为商务会议、学术报告和教育培训中不可或缺的一部分,而PowerPoint演示文稿作为行业标准工具,更是承载着无数创意与信息的载体,本文将介绍如何使用Python来精确查找并替换PowerPoint演示文稿中的文本,需要的朋友可以参考下
    2024-07-07
  • Python实现字符串与数组相互转换功能示例

    Python实现字符串与数组相互转换功能示例

    这篇文章主要介绍了Python实现字符串与数组相互转换功能,结合具体实例形式分析了Python字符串与数组相关转换功能的相关实现技巧与注意事项,需要的朋友可以参考下
    2017-09-09

最新评论