美文网首页
2020-07-14--requests入门01

2020-07-14--requests入门01

作者: program_white | 来源:发表于2020-07-13 23:16 被阅读0次

    request和requests库的区别

    request:在之前学习web时,需要获取客户端传来的一些数据时,可以通过request对象进行获取,例如method,form等,这些数据都封装在request对象中。
    requests:用于在客户端浏览器对服务器进行访问时使用的库,服务器的回应可以通过requests进拿到。

    request的优势

    • requests在python2 和python3中通用,方法完全一样,urllib2在python2和python3中的名称不同
    • 工作中爬虫基本都使用requests
    • 虽然Python的标准库中 urllib 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 "HTTP for Humans",说明使用更简洁方便。requests 继承了urllib的所有特性,requests的底层实现就是urllib2。
    • requests能够自动帮助我们解压(gzip压缩的等)网页内容,简单易用
    • Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

    功能特性

    Requests 完全满足今日 web 的需求:

    • Keep-Alive & 连接池
    • 国际化域名和 URL
    • 带持久 Cookie 的会话
    • 浏览器式的 SSL 认证
    • 自动内容解码
    • 基本/摘要式的身份认证
    • 优雅的 key/value Cookie
    • 自动解压
    • Unicode 响应体
    • HTTP(S) 代理支持
    • 文件分块上传
    • 流下载
    • 连接超时
    • 分块请求
    • 支持 .netrc
    • Requests 支持 Python 2.6—2.7以及3.3—3.7,而且能在 PyPy 下完美运行。

    request的使用

    在使用之前请安装Anaconda,并创建python项目,选择Anaconda中的python解释器。
    1.requests

    pip install requests 
    

    2.使用requests

    响应 = requests.方法(请求地址)
    
    response = requests.method(url)
    

    3.requests.get(url) = response的返回值

    response.text    #获取服务器响应的str类型的响应
    response.content  #获取字节bytes类型的响应
    response.status_code    #获取响应的状态码
    response.headers  #获取响应头
    response.request  #获取响应对应的请求
    

    request的GET方式

    get请求方式:

    1. 访问baidu:
    import requests
    
    resp = requests.get('https://www.baidu.com')
    
    print(resp)           #<Response [200]>
    
    1. 以get方式带参数访问测试网站时:
    1.直接在url后加上参数即可
    import requests
    resp1 = requests.get("http://httpbin.org/get?name=lizhao&age=20")
    print(resp1.text)
    
    2.单独传递参数,get方法的参数有url和params两个,将两部分分开写
    params = {
        'name':'lizhao',
        'age':'20'
    }
    resp2 = requests.get("http://httpbin.org/get",params=params)
    print(resp2.text)
    

    两部分的响应一摸一样:

    1. 但是上边的响应其实是json格式的字符串,那么如果要取出里边的数据怎么办?

    调用resp.json()直接将json字符串转为dict类型

    #json()直接转为dict类型
    print(resp1.json())       #{'args': {'age': '20', 'name': 'lizhao'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.24.0', 'X-Amzn-Trace-Id': 'Root=1-5f0dc7a5-cf30d50fea502634727b91f1'}, 'origin': '111.18.58.96', 'url': 'http://httpbin.org/get?name=lizhao&age=20'}
    
    print(type(resp1.json()))           #<class 'dict'>
    
    1. 修改编码方式
    1. 修改baidu响应的编码方式
    import requests
    
    #访问baidu
    resp = requests.get('https://www.baidu.com')
    
    
    print(resp.text)
    
    print(resp.encoding)         #ISO-8859-1
    #修改编码方式
    resp.encoding = 'utf-8'
    
    print(resp.text)
    
    print(resp.encoding)         #utf-8
    

    响应结果:

    1. 获取字节格式的响应
    print(resp.content)         #获取字节的响应
    print(resp.content.decode())       #直接转为utf-8 
    

    响应结果:

    1. 获取响应头
    print(resp.headers)
    

    获取GitHub的ico头像

    import requests
    
    resp = requests.get('https://github.com/favicon.ico')
    
    print(resp.content)
    
    #二进制方式写入文件
    with open('github.ico','wb') as f:
        f.write(resp.content)
    print('完成')
    

    运行结果:

    requests的POST请求

    在之前的例子中都是以get请求进行访问的,那么post是怎样请求的呢?

    post请求函数:

    传递的参数是dat还是json由服务器决定。

    post请求:

    import requests
    
    #设置请求头
    header={
    "User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16",
    }
    #请求数据
    data = {
    'name' : 'lizhao',
    'age' : 22
    }
    #发送请求
    req = requests.post('https://httpbin.org/post',data=data,headers=header)
    print(req.text)
    print(req.status_code)      #200
    print(req.json())    
    

    在请求的headers中加入用户代理User-Agent。

    结果:

    案例访问金山词霸,获取翻译结果

    需求 1、构造url 2、请求头 3、构造请求体 4、发送请求,输出数据 如下如是浏览

    响应:

    代码:

    import requests
    
    xurl = 'http://fy.iciba.com/ajax.php?a=fy'
    
    xform = {
        'f':'auto',      #翻译前语言类型
        't':'auto',      #想要翻译的类型
        'w':'你好'        #翻译内容
        }
    
    xhead = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
    }
    
    #发送请求
    resp = requests.post(url=xurl,data=xform,headers=xhead)
    
    #接收数据dict类型
    json_data = resp.json()
    
    print(json_data)
    print(json_data['content']['out'])       #取出翻译结果
    

    结果:

    相关文章

      网友评论

          本文标题:2020-07-14--requests入门01

          本文链接:https://www.haomeiwen.com/subject/hxuqhktx.html