当前位置: 首页 > 知识库问答 >
问题:

PythonValueError:太多的值无法为爬虫程序解包

刘狐若
2023-03-14

我试图运行我在网上找到的刮板,但收到一个ValueError:太多的值在这行代码上解包

 k, v = piece.split("=")

这条线是这个函数的一部分

def format_url(url):
# make sure URLs aren't relative, and strip unnecssary query args
u = urlparse(url)

scheme = u.scheme or "https"
host = u.netloc or "www.amazon.com"
path = u.path

if not u.query:
    query = ""
else:
    query = "?"
    for piece in u.query.split("&"):
        k, v = piece.split("=")
        if k in settings.allowed_params:
            query += "{k}={v}&".format(**locals())
    query = query[:-1]

return "{scheme}://{host}{path}{query}".format(**locals())

如果您有任何意见,我们将不胜感激,谢谢。

共有3个答案

易研
2023-03-14

您还没有显示任何基本调试:问题点的piece是什么?如果字符串中有多个=,则split操作将返回2个以上的值——因此会显示错误消息。

如果只想在第一个=上拆分,则使用索引获取位置,并获取所需的切片:

pos = piece.index('=')
k = piece[:pos]
v = piece[pos+1:]
樊令秋
2023-03-14

这是由于一个包含两个或多个'='字符。在这种情况下,您将返回一个包含三个或更多元素的列表。您不能将其分配给两个值。

您可以通过向添加一个附加参数来拆分最多一个'='来解决这个问题。

k, v = piece.split("=",1)

但是现在我们仍然不能保证在片段字符串中存在'='

但是我们可以使用python-3. x中的urllib.parse模块(python-2. x中的urlparse):

from urllib.parse import urlparse, parse_qsl

purl = urlparse(url)
quer = parse_qsl(purl.query)

for k,v in quer:
    # ...
    pass

现在,我们已经将查询字符串解码为可以单独处理的键值元组列表。我建议也使用urllib建立一个URL。

涂泰平
2023-03-14

您可以使用urlparse.parseqs函数,而不是自己解析URL:

>>> from urlparse import urlparse, parse_qs
>>> URL = 'https://someurl.com/with/query_string?i=main&mode=front&sid=12ab&enc=+Hello'
>>> parsed_url = urlparse(URL)
>>> parse_qs(parsed_url.query)
{'i': ['main'], 'enc': [' Hello '], 'mode': ['front'], 'sid': ['12ab']}

(来源)

 类似资料:
  • 主要内容:多线程使用流程,Queue队列模型,多线程爬虫案例网络爬虫程序是一种 IO 密集型程序,程序中涉及了很多网络 IO 以及本地磁盘 IO 操作,这些都会消耗大量的时间,从而降低程序的执行效率,而 Python 提供的多线程能够在一定程度上提升 IO 密集型程序的执行效率。 如果想学习 Python 多进程、多线程以及 Python GIL 全局解释器锁的相关知识,可参考《Python并发编程教程》。 多线程使用流程 Python 提供了两个支持多线

  • 问题内容: 运行脚本答案时,出现以下错误: 编码: 任何帮助表示赞赏! 问题答案: 我从OpenCV StackExchange网站获得了答案。回答 答案: 我敢打赌,您正在使用当前的OpenCV的master分支:此处的return语句已更改,请参阅http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_d

  • 本文向大家介绍JAVA 多线程爬虫实例详解,包括了JAVA 多线程爬虫实例详解的使用技巧和注意事项,需要的朋友参考一下 JAVA 多线程爬虫实例详解 前言 以前喜欢Python的爬虫是出于他的简洁,但到了后期需要更快,更大规模的爬虫的时候,我才渐渐意识到Java的强大。Java有一个很好的机制,就是多线程。而且Java的代码效率执行起来要比python快很多。这份博客主要用于记录我对多线程爬虫的实

  • 问题内容: 我正在编写一个opencv程序,但在另一个stackoverflow问题上找到了一个脚本: 计算机视觉掩盖人的手 运行脚本化答案时,出现以下错误: 编码: 任何帮助表示赞赏! 问题答案: 您正在使用当前的OpenCV的master分支:return语句已更改,请参见 http://docs.opencv.org/trunk/modules/imgproc/doc/structural_

  • 问题内容: 我从这段代码中得到该异常: 这行是引发异常的行。该s为对象。有人有什么想法吗? 问题答案: 是一个,默认情况下,您仅迭代键(字符串)。 由于具有两个以上的键*,因此无法将它们解压到“ ”中,因此引发了异常。 在Python 2. x中 ,要遍历键和值(“ ”),我们使用。 但是,由于无论如何都将键扔掉了,因此还可以简单地遍历字典的值: 在Python 3. x中 ,preferred

  • 本文向大家介绍python爬虫中多线程的使用详解,包括了python爬虫中多线程的使用详解的使用技巧和注意事项,需要的朋友参考一下 queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue。python3直接queue即可 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性