美文网首页
Python爬虫(3)- Requests库

Python爬虫(3)- Requests库

作者: James_Qiu | 来源:发表于2017-06-26 15:38 被阅读0次

    Python版本:Python 3.X
    Requests库官方文档:https://pypi.python.org/pypi/requests

    Introduction

    Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。如果你看过 Python爬虫(2) 关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。

    默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装。但是国内使用pip容易撞墙,推荐下载requests轮子。这里有个http://www.lfd.uci.edu/~gohlke/pythonlibs网站里面有各种各样的轮子,ctrl+f找到requests后,下载zip格式的轮子,解压后把requests文件夹放到Python的lib文件夹里就可以了。这时运行import requests,有可能提示你没这个库没那个库的,这时因为requests库还用到了其他的库,同样从那个网站里找到相应的库依次放到lib文件夹里就好。

    总体演示

    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')转换。

    各种请求方式

    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")
    

    GET请求

    get请求可以不带参数只有URL,也可以携带params为data的参数。如果我们想要在URL查询字符串传递数据,通常我们会通过httpbin.org/get?key=val方式传递。Requests模块允许使用params关键字传递参数,以一个字典来传递这些参数,例子如下:

    import requests
    data = {
        "name":"zhaofan",
        "age":22
    }
    response = requests.get("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()方法,两者的结果是一样的。

    添加headers
    和前面我们将urllib模块的时候一样,我们同样可以定制headers的信息,如当我们直接通过requests请求知乎网站的时候,默认是无法访问的。因为访问知乎需要头部信息,这个时候我们在谷歌浏览器里输入chrome://version,就可以看到用户代理,将用户代理添加到头部信息:

    image.png

    这样子就可以正常访问了:

    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.zhihu.com",headers=headers)
     
    print(response.text)
    

    POST请求

    通过在发送post请求时添加一个data参数,这个data参数可以通过字典构造成,这样对于发送post请求就非常方便。

    import requests
     
    data = {
        "name":"jamesqiu",
        "age":19
    }
    response = requests.post("http://httpbin.org/post",data=data)
    print(response.text)
    

    响应

    import requests
     
    response= requests.get(" 
    if response.status_code == requests.codes.ok:    
        print("Access Successfully!")
    

    requests的高级用法

    文件上传

    import requests
    files= {"files":open("git.jpeg","rb")}
    response = requests.post("url", files=files)
    print(response.text)
    

    获取cookie

    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)
    

    证书验证

    现在的很多网站都是https的方式访问,所以这个时候就涉及到证书的问题。解决方法为:

    import requestsfrom requests.packages import urllib3
    urllib3.disable_warnings()
    response = requests.get(" 
    print(response.status_code)
    

    这样就不会提示警告信息,当然也可以通过cert参数放入证书路径。

    代理设置

    proxies= {
        "http":"http://127.0.0.1:9999",
        "https":"http://127.0.0.1:8888"
    }
    response  = requests.get("https://www.baidu.com",proxies=proxies)
    print(response.text)
    

    如果代理需要密码,则

    proxies ={"http":"http://user:password@127.0.0.1:9999"}
    

    其他

    另外还有设置timeout参数,认证设置(有的网站需要认证,可以通过requests.auth模块实现:参数auth=HTTPBasicAuth),异常处理等。

    相关文章

      网友评论

          本文标题:Python爬虫(3)- Requests库

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