已有397人关注
request报错
发表在Python答疑区 2022-01-13 悬赏:3 学分
是否精华
版块置顶:

和那个快手爬票类似的requests请求代码,报错:

[ WARN:0@11.818] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (539) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
Trace back(most recent call last):
    self.prepare_url(url, params)
  File "C:\Users\Administrator\PycharmProjects\Project\venv\python\lib\site-packages\requests\models.py", line 372, in prepare_url
    enc_params = self._encode_params(params)
  File "C:\Users\Administrator\PycharmProjects\Project\venv\python\lib\site-packages\requests\models.py", line 77, in _encode_params
    for k, vs in to_key_val_list(data):

ValueError: too many values to unpack (expected 2)

报错代码:


def req(opt={}):
    """发起请求"""
    global res
    opt = opt if opt else {}
    opt["method"] = "POST" if bool(opt["method"]) == False else str(opt["method"]).upper()
    opt["url"] = opt["url"] if opt["url"] else ''
    opt["async"] = opt["async"] if opt["async"] else True
    opt["data"] = opt["data"] if opt["data"] else None
    opt["onsuccess"] = opt["onsuccess"] if opt["onsuccess"] else lambda: None
    try:
        opt["onerror"] = opt["onerror"] if opt["onerror"] else lambda: None
    except KeyError:
        pass
    params = []
    headers = {}
    for k, v in dict(opt["data"]).items():
        try:
            params.append(parse.urlencode(str(k)) + '=' + parse.urlencode(v))
        except TypeError:
            params.append(k + "=" + v)
    # 判断提交方式
    postData = '&'.join(params)
    if str(opt["method"]).upper() == "POST":
        for key, val in dict(opt["data"]).items():
            headers[key] = val
        pass
    else:
        headers["Content-Type"] = ["application/x-www-form-urlencoded;charset=utf-8"]
    if str(opt["method"]).upper() == "POST":
        print(opt["data"])
        print(headers)
        headers, opt["data"] = headers, {}
        res = requests.request(method=opt["method"], url=opt["url"], params=params, headers=headers)
    elif str(opt["method"]).upper() == "POST":
        res = requests.request("POST", opt["url"] + "?" + postData, opt["async"])
    if res.status_code == 200 or res.status_code == 304:
        returner = opt["onsuccess"](res.text)
    if res.status_code != 200 and res.status_code != 304:
        raise AiRequestError("API请求失败或超时,请稍后再试!")
    return returner
请问怎么解决?


分享到:
精彩评论 3
无语_mrkj
学分:3155 LV11
2022-01-17
沙发

从错误提示看,可能是数据格式不对,或者是没有爬取到数据。

王若宇
学分:70 LV3
2022-01-18
板凳

无语_mrkj 发表于2022-01-17 15:00

从错误提示看,可能是数据格式不对,或者是没有爬取到数据。

哦谢谢,我再看看

game99258
学分:2266 LV10
2022-07-29
地板

371-372和76-77行看一下

首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照