zoukankan      html  css  js  c++  java
  • requests高级部分 urllib简单介绍

    1. requests高级用法

    1.1 文件上传功能

    import requests
    ​
    # 定义上传文件数据, 键为file, 值为文件句柄
    f=open('filepath','rb')
    files = {
    'file':f
    }
    r = requests.post(url=url,headers = headers,files=files)
    print(res.text)

    1.2 cookie处理

    
    
    # cookie处理方式:
        1.headers添加cookie键值对
        2.RequestsCookieJar对象
                    3.session类自动封装cookie
    
    # headers内添加cookie键值对处理cookie
    import requests
    url = 'https://www.baidu.com'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
        'Cookies':'BAIDUID=79A570F8D90B2C45E42D40A3666ADC46:FG=1; BIDUPSID=79A570F8D90B2C45E42D40A3666ADC46; PSTM=1551074009; BD_UPN=12314753; sugstore=0; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; yjs_js_security_passport=10c9ca61409abe70ac5c03db796f78648e697d8f_1563711806_js; COOKIE_SESSION=2860_2_2_7_3_5_0_0_2_4_106_0_3778_177561_116_109_1563714759_1563714752_1563714643%7C9%23177557_14_1563714643%7C7; delPer=0; BD_HOME=0; H_PS_PSSID=1452_21117_29522_29521_28519_29099_28831_29221'
    }
    ​
    res = requests.get(url=url, headers=headers)
    res.encoding = 'utf-8'
    with open('baidu_cookie.html', 'w', encoding='utf-8') as f:
        f.write(res.text)
    
    # RequestsCookieJar对象处理cookie: 用cookie维持百度登陆
    import requests
    cookies = 'BAIDUID=79A570F8D90B2C45E42D40A3666ADC46:FG=1; BIDUPSID=79A570F8D90B2C45E42D40A3666ADC46; PSTM=1551074009; BD_UPN=12314753; sugstore=0; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; yjs_js_security_passport=10c9ca61409abe70ac5c03db796f78648e697d8f_1563711806_js; COOKIE_SESSION=2860_2_2_7_3_5_0_0_2_4_106_0_3778_177561_116_109_1563714759_1563714752_1563714643%7C9%23177557_14_1563714643%7C7; delPer=0; BD_HOME=0; H_PS_PSSID=1452_21117_29522_29521_28519_29099_28831_29221; BDUSS=lSVnBVVkRVNFpNZ2ZJZ2ZpNFpjblFFSX5EaW9DNzBpcnNkaDZIQVdRd2Z1bHhkRVFBQUFBJCQAAAAAAAAAAAEAAABwfMtW09rQodPjMDgyMGZyZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8tNV0fLTVdYX'
    jar = requests.cookies.RequestsCookieJar()
    headers = {
        'User-Agetn': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }
    for cookie in cookies.split(';'):
        key, value = cookie.split('=', 1)
        jar.set(key, value)
        
    res = requests.get('http://www.baidu.com', cookies=jar, headers=headers)
    print(res.text)  # 响应数据中包含用户名信息, 说明cookie生效

    1.3 会话维持

    # HTTP无状态:
        使用requests模块中的get()和post()方法请求网页时, 每一次请求都是独立的, 没有连续请求之间的状态保持. 假象, 如果你登陆了淘宝后向查看订单, 那么如果没有状态的维持就无法实现.
        
    # 会话的维持: Session对象
    from requests import Session
    s = Session()
    res = s.get('https://www.baidu.com')
    ​

    1.4 SSL证书验证

    
    
    # 1.SSL证书验证
    requests提供了证书验证的功能. 当发起HTTP请求时, 模块会检查SSL证书. 但检查的行为可以用verify参数来控制.
        verify = False  # 不检查SSL证书
        verify = True  # 检查SSL证书
        
    # 2.异常
    如果使用requests模块的SSL验证, 验证不通过会抛出异常, 此时可以将verify参数设置为False
    ​
    # 3.www.12306.cn的证书验证
    # 会抛出异常
    import requests
    response = requests.get('https://www.12306.cn')
    print(response.status_code)
    ​
    # 不抛异常, 但会出现警告
    import requests
    response = requests.get('https://www.12306.cn', verify=False)
    print(response.status_code)
    ​
    # 禁止警告
    import requests
    from requests.packages import urllib3
    urllib3.disable_warnings()
    response = requests.get(url='https://www.12306.cn', verify=False)
    print(response.status_code)
    

      

    1.5 代理设置

    # 代理: 代理即代理ip
    代理ip是指在请求的过程中使用非本机ip进行请求, 避免大数据量频繁请求的过程中出现ip封禁, 限制数据的爬取.
    ​
    # 代理ip分类:
        1.透明代理ip: 请求时, 服务器知道请求的真实ip, 知道请求使用了代理
        2.匿名代理ip: 请求时, 服务器知道请求使用了代理, 但不知道请求的真实ip
        3.高匿代理ip: 请求时, 服务器不知道请求使用了代理, 也不知道请求的真实ip
            
    

      

    # requests模块使用代理ip
    import requests
    url = 'http://www.httpbin.org'
    proxies = {
        'http': 'http://61.183.176.122:57210'
    }
    res = requests.get(url=url, proxies=proxies)
    print(res.text)

    1.6 超时设置

    # 超时设置:
        由于网络状况的不同, 服务器配置差异以及服务器处理并发的能力不同, 有时会出现服务器的响应时间过长, 甚至无法获取响应而抛出异常. requests模块发送请求可以设置超时时间, 在超时时间内未得到响应, 便会抛出异常.
        一方面, 减少了请求的阻塞时间, 一方面, 可以进行异常处理, 执行相应的操作.
        
    import requests
    ​
    url = 'https://www.baidu.com'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }
    res = requests.get(url=url, headers=headers, timeout=0.001)  # 在0.001秒为得到响应, 抛出requests.exceptions.ConnectTimeout异常
    print(res.text)

    1.7 构建Request对象

    
    
    # 1.Prepared Request
    利用 Prepared Request 数据结构构件Request对象. 其构建及使用步骤如下:
    from requests import Request, Session
    ​
    # 构建Request对象
    url = '...'
    data = {...
    }
    params = {...
    }
    headers = {...
    }
    session = Session()
    ​
    # 构建post请求:
    req_post = Request(method='POST', url=url, headers=headers, data=data)
    req_obj_post = session.prepare_request(req_post)
    ​
    # 构建get请求:
    req_get = Request(method='GET', url=url, headers=headers, params=params)
    req_obj_get = session.prepare_request(req_get)
    ​
    # 利用构建的请求对象, 向服务器发送请求
    res = session.send(req_obj_post)
    res = session.send(req_obj_get)
    ​
    # 应用:
    通过此方法, 我们可以构建一个独立的request对象, 当需要请求的url很多时, 我们可以为每一个url构建一个request对象, 将所有request对象置于队列中, 便于调度.
    
    # 构建request对象, 请求糗事百科获取页面
    from requests import Request, Session
    url = 'https://www.qiushibaike.com/'
    headers = {
        "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }
    session = Session()
    req_get = Request(url=url, headers=headers, method='GET')
    req_get_obj = session.prepare_request(req_get)
    res = session.send(req_get_obj)
    res.encoding = 'utf-8'
    with open('qb_reqobj.html', 'w', encoding='utf-8') as f:
        f.write(res.text)

    2. urllib简单介绍

    # urllib简介:
    1.urllib模块是Python的一个请求模块
    2.Python2中是urllib和urllib2相结合实现请求的发送. Python3中同一为urllib库
    3.urllib是Python内置的请求库, 其包含4个模块:
    (1).request模块: 模拟发送请求
    (2).error模块: 异常处理模块
    (3).parse模块: 工具模块, 提供关于URL的处理方法, 如拆分, 解析, 合并等
    (4).robotparser模块: 识别robots协议
    

      

     
  • 相关阅读:
    Jzoj4822 完美标号
    Jzoj4822 完美标号
    Jzoj4792 整除
    Jzoj4792 整除
    Educational Codeforces Round 79 A. New Year Garland
    Good Bye 2019 C. Make Good
    ?Good Bye 2019 B. Interesting Subarray
    Good Bye 2019 A. Card Game
    力扣算法题—088扰乱字符串【二叉树】
    力扣算法题—086分隔链表
  • 原文地址:https://www.cnblogs.com/gaodenghan/p/13637809.html
Copyright © 2011-2022 走看看