• 技术文章 >后端开发 >Python教程

    Python如何使用Requests请求网页

    WBOYWBOY2023-04-25 09:29:01转载53

    Requests 继承了urllib2的所有特性。

    Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

    安装方式

    利用 pip 安装

    $ pip install requests

    GET请求

    基本GET请求(headers参数 和 parmas参数)

    1.最基本的GET请求可以直接用get方法'

    response = requests.get("http://www.baidu.com/")
     
    # 也可以这么写
    # response = requests.request("get", "http://www.baidu.com/")

    2.添加 headers 和 查询参数

    如果想添加 headers,可以传入headers参数来增加请求头中的headers信息。

    如果要将参数放在url中传递,可以利用 params 参数。

    import requests
     
    kw = {'wd':'长城'}
     
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
     
    # params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
    response = requests.get("http://www.baidu.com/s?", params = kw, headers = headers)
     
    # 查看响应内容,response.text 返回的是Unicode格式的数据
    print (response.text)
     
    # 查看响应内容,response.content返回的字节流数据
    print (respones.content)
     
    # 查看完整url地址
    print (response.url)
     
    # 查看响应头部字符编码
    print (response.encoding)
     
    # 查看响应码
    print (response.status_code)

    运行结果

    ......

    ......

    'http://www.baidu.com/s?wd=%E9%95%BF%E5%9F%8E'

    'utf-8'

    200

    使用response.text 时,Requests 会基于 HTTP 响应的文本编码自动解码响应内容,大多数 Unicode 字符集都能被无缝地解码。

    使用response.content 时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。

    POST方法

    1.基本的POST的请求

    response = requests.post("http://www.baidu.com/",data = data)

    2.body带参数

    formdata = {
        "type": "AUTO",
        "doctype": "json",
        "key": "www",
        "ue": "UTF-8",
    }
    url = "http://auto-installment/v1/loan-credit-check"
    response = requests.post(url,data = data,headers=headers)
     
    print(response.text)#显示返回结果
    print(response.json())# 如果是json文件可以直接显示

    注意:

    打印的结果出现中文乱码,使用json.dupms(response, ensure_ascii=False))解决

    Session

    一般利用Session在跨请求的时候保持某些参数,比如实现登录后才能访问其他页面

    # 1. 创建session对象,可以保存Cookie值
    session = requests.session()
     
    # 2. 需要登录的用户名和密码
    data = {"username": "mxxxx", "password": "1233444"}
     
    # 3. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
    session.post("https://www.jianshu.com/sign_in", data=data)
     
    # 4. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
    response = session.get("https://www.jianshu.com/writer#/")

    踩坑记要

    1.在使用requests去请求一个接口时,出现报错的情况,但是这个接口本身却没有问题。这是因为接口的请求参数有两种情况:简单类型(一般少于3个)和复杂对象类型。

    解决方法:在headers中定义一下这两种参数的类型

    简单类型:headers={"Content-Type": "application/x-www-form-urlencoded"}

    复杂对象类型:headers={"Content-Type":application/json}

    2.某些HTTPS请求存在 SSL证书验证

    解决方法:response = requests.get("https://www.baidu.com/", verify=False)

    扩展

    1.requests请求失败后,增加重试机制(若失败,将会重试3次)

    request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
    session.mount('https://',request_retry)

    2.使用grequests实现异步请求

    urls = [
        'http://www.url1.com',
        'http://www.url2.com',
        'http://www.url3.com',
        'http://www.url4.com',
        'http://www.url5.com',
    ]
    resp = (grequests.get(u) for u in urls)
    grequests.map(resp)

    3.自定义cookies

    我们使用Session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies

    我们使用Session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies

    # 自定义cookies
    cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}
     
    session.post('http://', cookies=cookie)

    4.统计一个API请求花费的时间

    session.get(url).elapsed.total_seconds()

    5.设置请求超时

    session.get(url, timeout=15)

    6.文件上传

    Requests利用files作为参数模拟提交文件数据

    file = {'file':open('test.bmp','rb')}   #rb表示用二进制格式打开指定目录下的文件,且用于只读
    r =requests.post('http://',files=file)
    print(r.text)

    以上就是Python如何使用Requests请求网页的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:亿速云,如有侵犯,请联系admin@php.cn删除
    专题推荐:Python Requests
    上一篇:如何用Python中progress库实现进度条 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 使用Python和pywinauto实现自动化采集任务的步骤和方法• Python速查表大全,你掌握了哪些知识点?• Python中如何高效地实现列转行操作• python怎么使用pyshp读写shp文件• Python中异常的传递性和手动抛出异常的方法
    1/1

    PHP中文网