zoukankan      html  css  js  c++  java
  • Python3爬虫(四)请求库的使用requests

     Infi-chu:

    http://www.cnblogs.com/Infi-chu/

    一、基本用法:

    1. 安装:

    pip install requests

    2. 例子:

    import requests
    url = 'http://www.baidu.com'
    r = requests.get(url)
    print(type(r))    # 类型是str(JSON格式)
    print(r.status_code)
    print(r.text)
    print(r.cookies)
    

    【注】其余请求方法也是一样的

    r = requests.post(url)
    r = requests.put(url)
    r = requests.delete(url)
    r = requests.head(url)
    r = requests.options(url)

    3. GET请求:

    • 例子
    import requests
    url = 'http://www.baidu.com'
    r = requests.get(url)
    print(r.text)
    

     若想在url中添加参数有两种方式:

      a. 直接添加

    r = requests.get(url+参数)

      b. 通过params参数添加

    import requests
    data = {"name":"Infi-chu","age":"23"}
    r = requests.get(url,params=data)

    网页的返回类型是str类型,是JSON格式的,我们可以直接调用 json()方法

    若返回结果不是JSON格式,便会出现解析错误,抛出 json.decode.JSONDecodeError异常

    • 抓取网页

    可使用正则表达式和headers。

    • 抓取二进制数据

    图片、音频、视频等文件本质上都是二进制码组成的。

    抓取GitHub图标:

    import requests
    r = requests.get("http://github.com/favicon.ico")
    print(r.text)
    print(r.content)
    # 保存图片
    with open('favicon.ico','wb') as f:
        f.write(r.content)
    • 添加headers

    在爬取知乎时必须在User-Agent中加入信息,否则不能爬取,会被拦截

    4. POST请求

    improt requests
    data = {'name':'Infi-chu','age'='23'}
    r = requests.post('http://www.baidu.com',data=data)
    

     成功后会在form中看到所提交的数据(F12查看)

    5. 响应

    发送数据后,得到的就是响应,我们使用text和content获取了内容,下面是另外的信息:

    import requests
    r = requests.get('http://www.baidu.com')
    print(type(r.status_code),r.status_code)
    print(type(r.headers),r.headers)
    print(type(r.cookies),r.cookies)
    print(type(r.history),r.history)
    print(type(r.url),r.url)
    

     headers 属性返回 CaseInsensitiveDict 类型

     cookies 属性返回 RequestsCookieJar 类型

    二、高级用法:

    1.文件上传

    import requests
    f = {'file':open('favicon.ico','rb')}
    r = requests.post(url,files=f)
    print(r.text)

    2.Cookies

    import requests
    r = requests.get(url)
    print(r.cookies)
    for k,v in r.cookies.items():
        print(k+"="+v)

    3.会话维持

    使用Session对象

    import requests
    s = requests.Session()
    s.get('http://httpbin.org/cookies/set/number/123456789')
    r = s.get('http://httpbin.org/cookies')
    print(r.text)

    4.SSL证书验证

    requests提供了证书验证的功能,使用verify参数控制是否检查此证书,默认是True,会自动验证

    5.代理设置

    对于某些网站,在测试的时候请求几次,能正常获取信息,但是一旦大规模爬取,可能会出现验证码或直接封掉IP,导致一段时间内无法访问

    代理设置:

    import requests
    proxy = {'http':'http://ip:port','https':'https://ip:port'}
    requests.get('https://www.taobao.com',proxies=proxy)

    6.超时设置

    import requests
    r = requests.get('https://www.taobao.com',timeout=1)
    print(r.status_code)
    

      

    7.身份认证

    import requests
    from requests.auth import HTTPBasicAuth
    r = requests.get(url,auth=HTTPBasicAuth('username','password'))
    print(r.status_code)
    
    # 可简写为
    r = requests.get(url,auth=('username','password'))
    print(r.status_code)
    # 也提供了OAuth认证,使用 pip3 install requests_oauthlib

    8.Prepared Request

    将请求表示为数据结构,这个数据结构叫Prepared Request

  • 相关阅读:
    WPF元素之间的关系
    依赖属性
    多线程显示运行状态
    WPF 基本知识
    SQL 这个删除重复行怎么做
    路由事件
    WPF的数据邦定
    SQL对表中XML列的查询
    WMI访问注册表读取系统信息
    创建第一个WPF应用程序
  • 原文地址:https://www.cnblogs.com/Infi-chu/p/8961065.html
Copyright © 2011-2022 走看看