• 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协议
    

      

     
  • 相关阅读:
    白书上的BellmanFord模板
    c#中的分部类和分部方法
    c#类
    浪潮gs开发平台学习平台快速开发入门
    c#学习积累
    自定义属性编辑器
    hibernate 中的hql,nativesql ,list(),iterate() 的使用规则
    c#继承
    浪潮gs中间件服务器,客户端,数据库sqlserver安装注意事项
    c#接口
  • 原文地址:https://www.cnblogs.com/gaodenghan/p/13637809.html
Copyright © 2020-2023  润新知