爬虫Request

作者: 上心心上 | 来源:发表于2019-03-11 15:31 被阅读26次

    什么是Requests
    Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库
    如果你看过上篇文章关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。
    默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装: pip install request
    requests功能详解

    总体功能的一个演示

    import requests

    response = requests.get("https://www.baidu.com")
    print(type(response))
    print(response.status_code)
    print(type(response.text))
    print(response.text)
    print(response.cookies)
    print(response.content)
    print(response.content.decode("utf-8"))

    很多情况下的网站如果直接response.text会出现乱码的问题,所以这个使用response.content
    这样返回的数据格式其实是二进制格式,然后通过decode()转换为utf-8,这样就解决了通过response.text直接返回显示乱码的问题.
    各种请求方式

    requests里提供个各种请求方式

    import requests
    response = requests.get('http://httpbin.org/get')
    requests.post("http://httpbin.org/post")
    requests.put("http://httpbin.org/put")
    requests.delete("http://httpbin.org/delete")
    requests.head("http://httpbin.org/get")
    requests.options("http://httpbin.org/get")

    如果我们想要在URL查询字符串传递数据,通常我们会通过httpbin.org/get?key=val方式传递。Requests模块允许使用params关键字传递参数,以一个字典来传递这些参数,例子如下:
    import requests
    data = {
    "name":"zhaofan",
    "age":22
    }
    response = requests.post("http://httpbin.org/get",params=data)
    print(response.url)
    print(response.text)

    解析json
    import requests
    import json

    response = requests.get("http://httpbin.org/get")
    print(type(response.text))
    print(response.json())
    print(json.loads(response.text))
    print(type(response.json()))

    从结果可以看出requests里面集成的json其实就是执行了json.loads()方法,两者的结果是一样的
    获取二进制数据
    在上面提到了response.content,这样获取的数据是二进制数据,同样的这个方法也可以用于下载图片以及
    视频资源
    添加headers
    和前面我们将urllib模块的时候一样,我们同样可以定制headers的信息,如当我们直接通过requests请求知乎网站的时候,默认是无法访问的
    import requests
    headers = {

      "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML,       like Gecko) Chrome/58.0.3029.110 Safari/537.36"
    

    }
    response =requests.get("https://www.baidu.com",headers=headers)

    print(response.text)

    requests高级用法
    文件上传
    实现方法和其他参数类似,也是构造一个字典然后通过files参数传递
    import requests
    files= {"files":open("git.jpeg","rb")}
    response = requests.post("http://httpbin.org/post",files=files)
    print(response.text)

    获取cookie
    import requests

    response = requests.get("http://www.baidu.com")
    print(response.cookies)

    for key,value in response.cookies.items():
    print(key+"="+value)

    会话维持
    cookie的一个作用就是可以用于模拟登陆,做会话维持
    import requests
    s = requests.Session()
    s.get("http://httpbin.org/cookies/set/number/123456")
    response = s.get("http://httpbin.org/cookies")
    print(response.text)

    这是正确的写法,而下面的写法则是错误的
    import requests

    requests.get("http://httpbin.org/cookies/set/number/123456")
    response = requests.get("http://httpbin.org/cookies")
    print(response.text)

    相关文章

      网友评论

        本文标题:爬虫Request

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