python中 requests 访问以及打包中常见的问题

发布于 2020-05-09  501 次阅读


requests库简介:

requests是使用Apache2 licensed 许可证的HTTP库。

Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。

在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。

使用方法:

Step1:导入

import requests

Step2:确定访问地址

r = requests.get('www.baidu.com')       # 最基本的不带参数的get请求

Step3:访问,并解码

test = requests.get("https://www.7tianbo.com/")
test.encoding = 'utf-8'
res = test.text

仿E语言的网页_访问()函数

def 网页_访问_对象(请求地址, 请求方式=0, 提交的内容='', 提交的COOKIE='', 提交的协议头={}, 允许重定向=True, 上传文件=None, 代理地址=None, 最长等待=30, 编码方式=None,
             证书验证=False):
    '请求方式:0是GET 1是POST.提交的内容跟提交的Cookie可以是字符串也可以是字典。返回的Cookie是文本型,返回的协议头是字典,证书验证:默认为False,需要引用证书时传入证书路径,上传文件传入文件路径'
    网页 = 网页类型()
    requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
    http = requests.session()
    if type(上传文件) == str:
        try:
            files = {'file': open(上传文件, 'rb')}
        except:
            上传文件 = None
    else:
        上传文件 = None

    if 提交的协议头 == {} or 提交的协议头 == '':
        提交的协议头 = {"Accept": "*/*",
                  "Referer": 请求地址,
                  "Accept-Language": "zh-cn",
                  "Content-Type": "application/x-www-form-urlencoded",
                  "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36"}

    if type(提交的协议头) == str:
        if len(提交的协议头) > 3:
            协议头数组 = 文本_分割文本(提交的协议头, '\n')
            提交的协议头 = {}
            for x in 协议头数组:
                键 = 文本_删首尾指定字符(文本_取文本左边(x, ':'))
                值 = 文本_删首尾指定字符(文本_取文本右边(x, ':'))
                if 键 != '' and 值 != '':
                    提交的协议头[键] = 值
        else:
            提交的协议头 = {}

    if 请求方式 < 0 or 请求方式 > 1:
        请求方式 = 0
    if 最长等待 < 1 or 最长等待 > 60:
        最长等待 = 30
    if 代理地址 != None:
        代理地址 = {"http": "http://" + 代理地址, "https": "https://" + 代理地址}
    if 提交的COOKIE != '' and type(提交的COOKIE) == str:
        if 文本_寻找文本(提交的COOKIE, "=") == -1:
            提交的COOKIE = {}
        elif 文本_寻找文本(提交的COOKIE, ";") == -1:
            键 = 文本_删首尾指定字符(文本_取文本左边(提交的COOKIE, '='))
            值 = 文本_删首尾指定字符(文本_取文本右边(提交的COOKIE, '='))
            if 键 != '' and 值 != '':
                提交的COOKIE = {键: 值}
        else:
            COOKIE数组 = 文本_分割文本(提交的COOKIE, ';')
            提交的COOKIE = {}
            for x in COOKIE数组:
                键 = 文本_删首尾指定字符(文本_取文本左边(x, '='))
                值 = 文本_删首尾指定字符(文本_取文本右边(x, '='))
                if 键 != '' and 值 != '':
                    提交的COOKIE[键] = 值
    try:
        if 请求方式 == 0:
            网页对象 = http.get(文本_删首尾指定字符(请求地址), params=提交的内容, cookies=提交的COOKIE, headers=提交的协议头, allow_redirects=允许重定向,
                            files=上传文件,
                            proxies=代理地址, timeout=最长等待, verify=证书验证)
        else:
            网页对象 = http.post(文本_删首尾指定字符(请求地址), data=提交的内容, cookies=提交的COOKIE, headers=提交的协议头, allow_redirects=允许重定向,
                             files=上传文件,
                             proxies=代理地址, timeout=最长等待, verify=证书验证)

        if 编码方式 != None:
            网页对象.encoding = 编码方式
        网页.源码 = 网页对象.text
        返回的COOKIE = ''
        返回的COOKIE字典 = dict(网页对象.cookies)
        for x in 返回的COOKIE字典:
            返回的COOKIE = 返回的COOKIE + x + '=' + 返回的COOKIE字典[x] + '; '
        网页.Cookie = 返回的COOKIE
        网页.状态码 = 网页对象.status_code
        网页.协议头 = 网页对象.headers
    except Exception as error:
        print('网页_访问_对象:运行出错|' + str(error))

    return 网页

打包中的问题:

由于requests版本的问题,少部分版本可能存在打包后requests指令无法执行,需要用到自以下代码后打包:

    import queue

绝对不是恋爱脑!