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超详细实现完整学生成绩管理系统

    python超详细实现完整学生成绩管理系统

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java实现一个完整版学生成绩管理系统,大家可以在过程中查缺补漏,提升水平
    2022-03-03
  • python except异常处理之后不退出,解决异常继续执行的实现

    python except异常处理之后不退出,解决异常继续执行的实现

    这篇文章主要介绍了python except异常处理之后不退出,解决异常继续执行的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • django创建简单的页面响应实例教程

    django创建简单的页面响应实例教程

    这篇文章主要给大家介绍了关于django如何创建简单的页面响应的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用django具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • PyQt 线程类 QThread使用详解

    PyQt 线程类 QThread使用详解

    QThread是我们将要详细介绍的第一个类。它也是 Qt 线程类中最核心的底层类。由于 PyQt 的跨平台特性,QThread要隐藏掉所有平台相关的代码。
    2017-07-07
  • 用Python将结果保存为xlsx的方法

    用Python将结果保存为xlsx的方法

    今天小编就为大家分享一篇用Python将结果保存为xlsx的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 基于Python实现主机远程控制

    基于Python实现主机远程控制

    这篇文章主要介绍了基于Python实现主机远程控制,本文为 HITwh 网络空间安全专业网络空间安全设计与实践选题,主要实现了远程监控局域网内的主机桌面与网络情况、简单键鼠控制、远程断网(ARP 攻击)、数据加密传输等功能,下面来看看具体实现过程吧
    2022-01-01
  • Django报错TemplateDoesNotExist的问题及解决

    Django报错TemplateDoesNotExist的问题及解决

    这篇文章主要介绍了Django报错TemplateDoesNotExist的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • python自动化测试中APScheduler Flask的应用示例

    python自动化测试中APScheduler Flask的应用示例

    这篇文章主要为大家介绍了python自动化测试中APScheduler Flask的应用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • python读取ini配置的类封装代码实例

    python读取ini配置的类封装代码实例

    这篇文章主要介绍了python读取ini配置的类封装代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python入门教程之Python的安装下载配置

    Python入门教程之Python的安装下载配置

    这篇文章主要介绍了Python入门教程之Python的安装下载配置,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04

最新评论