requests基本用法

发布时间:2019-05-02 15:42:00编辑:Run阅读(4927)

    requests比起urllib更加方便简单,有了它,cookies,登陆验证,代理设置等操作都很容易解决.


    安装requests

    pip3 install requests


    基本用法

    import requests
    
    r = requests.get("https://www.baidu.com")
    # 状态码
    print(r.status_code)
    # 文本类型 str
    print(r.text)
    # bytes类型
    print(r.content.decode('utf-8'))
    # cookies信息
    print(r.cookies)


    GET请求

    http中最常见的请求之一,构建一个简单的get请求

    import requests
    
    r = requests.get("http://httpbin.org/get")
    print(r.text)

    返回信息如下:

    image.png


    如果要附加额外的信息,怎么添加,可以通过字符串拼接的方式,即构造如下:

    http://httpbin.org/get?name=zhangsan&age=22


    上面的写法有点麻烦,一般情况下这种信息数据会用字典来存储,利用params这个参数就好了,示例:

    import requests
    
    data = {'name': 'zhangsan',
            'age': '22',
            }
    r = requests.get("http://httpbin.org/get", params=data)
    print(r.text)

    返回信息如下:

    image.png


    上面返回的数据是字符串,但是它很特殊,是JSON格式的,如果要直接得到一个字典格式的话,可以调用json()方法,示例如下:

    import requests
    
    data = {'name': 'zhangsan',
            'age': '22',
            }
    r = requests.get("http://httpbin.org/get", params=data)
    print(type(r.text))
    print(type(r.json()))
    print(r.json())

    返回信息:

    image.png

    如果返回的信息不是json格式的话,就会解析出错,抛出异常



    抓取网页示例:抓取知乎文章title,使用lxml的xpath来解析页面

    import requests
    from lxml import etree
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    r = requests.get("https://www.zhihu.com/explore", headers=headers).content.decode('utf-8')
    # 使用lxml来解析html页面
    content = etree.HTML(r)
    tag_list = content.xpath("//a[@class='question_link']/text()")
    print(tag_list)

    返回信息:

    image.png



    抓取二进制数据(图片,音频,视频)

    import requests
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    r = requests.get("http://pic1.win4000.com/wallpaper/9/5450ae2fdef8a.jpg", headers=headers)
    with open('111.jpg', 'wb') as f:
        f.write(r.content)

    返回信息,会在当前目录下生成111.jpg文件

    image.png



    POST请求

    import requests
    
    data = {'name': 'zhangsan',
            'age': '22'}
    r = requests.post('http://httpbin.org/post', data=data)
    print(r.text)

    返回信息:

    image.png

    其中form部分就是提交的数据,证明POST请求成功



    响应

    获取其它信息,状态码,响应头,Cookies等....

    import requests
    
    
    r = requests.get('https://www.baidu.com')
    # 状态码,返回int类型
    print(type(r.status_code), r.status_code)
    # 响应头
    print(type(r.headers), r.headers)
    # Cookies属性
    print(type(r.cookies), r.cookies)
    # url
    print(type(r.url), r.url)
    # 请求历史
    print(type(r.history), r.history)

    返回信息:

    image.png



    状态码常用来判断请求是否成功,而requests还提供了一个内置的状态码查询对象,requests.codes

    示例:

    import requests
    
    r = requests.get('https://www.baidu.com')
    if r.status_code == requests.codes.ok:
        print("Request Successfully")
    else:
        exit()

    返回结果:

    Request Successfully

关键字

上一篇: 没有了

下一篇: requests上传文件Cookies设置