Scarpy爬虫报了下面的错
第一个报错
2023-05-24 15:44:49 [scrapy.core.scraper] ERROR: Error downloading <GET https://zh.wikipedia.org/wiki/%E8%A1%8C%E7%A8%8B%3E
Traceback (most recent call last):
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/cache.py", line 190, in run_and_cache
result = self.get(namespace=namespace, key=key_args)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/cache.py", line 93, in get
raise KeyError("namespace: " + namespace + " key: " + repr(key))
KeyError: "namespace: publicsuffix.org-tlds key: {'urls': ('https://publicsuffix.org/list/public_suffix_list.dat', 'https://raw.githubusercontent.com/publicsuffix/list/master/public_suffix_list.dat'), 'fallback_to_snapshot': True}"
第二个报错
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/cache.py", line 190, in run_and_cache
result = self.get(namespace=namespace, key=key_args)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/cache.py", line 93, in get
raise KeyError("namespace: " + namespace + " key: " + repr(key))
KeyError: "namespace: urls key: {'url': 'https://publicsuffix.org/list/public_suffix_list.dat'}"
第三个报错
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/twisted/internet/defer.py", line 1697, in _inlineCallbacks
result = context.run(gen.send, result)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/scrapy/core/downloader/middleware.py", line 64, in process_response
method(request=request, response=response, spider=spider)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/scrapy/downloadermiddlewares/cookies.py", line 73, in process_response
self._process_cookies(cookies, jar=jar, request=request)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/scrapy/downloadermiddlewares/cookies.py", line 44, in _process_cookies
if cookie_domain and _is_public_domain(cookie_domain):
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/scrapy/downloadermiddlewares/cookies.py", line 19, in _is_public_domain
parts = _split_domain(domain)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/tldextract.py", line 233, in call
suffix_index = self._get_tld_extractor().suffix_index(
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/tldextract.py", line 274, in _get_tld_extractor
public_tlds, private_tlds = get_suffix_lists(
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/suffix_list.py", line 55, in get_suffix_lists
return cache.run_and_cache(
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/cache.py", line 192, in run_and_cache
result = func(**kwargs)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/suffix_list.py", line 72, in _get_suffix_lists
text = find_first_response(cache, urls, cache_fetch_timeout=cache_fetch_timeout)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/suffix_list.py", line 30, in find_first_response
return cache.cached_fetch_url(
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/cache.py", line 199, in cached_fetch_url
return self.run_and_cache(
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/cache.py", line 192, in run_and_cache
result = func(**kwargs)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/tldextract/cache.py", line 209, in _fetch_url
response = session.get(url, timeout=timeout)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/requests/sessions.py", line 600, in get
return self.request("GET", url, **kwargs)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/requests/sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/requests/sessions.py", line 701, in send
r = adapter.send(request, **kwargs)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/requests/adapters.py", line 455, in send
conn = self.get_connection(request.url, proxies)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/requests/adapters.py", line 352, in get_connection
conn = proxy_manager.connection_from_url(url)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/urllib3/poolmanager.py", line 299, in connection_from_url
return self.connection_from_host(
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/urllib3/poolmanager.py", line 500, in connection_from_host
return super(ProxyManager, self).connection_from_host(
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/urllib3/poolmanager.py", line 246, in connection_from_host
return self.connection_from_context(request_context)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/urllib3/poolmanager.py", line 261, in connection_from_context
return self.connection_from_pool_key(pool_key, request_context=request_context)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/urllib3/poolmanager.py", line 282, in connection_from_pool_key
pool = self._new_pool(scheme, host, port, request_context=request_context)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/urllib3/poolmanager.py", line 214, in _new_pool
return pool_cls(host, port, **request_context)
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/urllib3/connectionpool.py", line 938, in init
HTTPConnectionPool.init(
File "/Users/luhongyang/opt/anaconda3/python.app/Contents/lib/python3.9/site-packages/urllib3/connectionpool.py", line 198, in init
self.pool = self.QueueCls(maxsize)
TypeError: LifoQueue() takes no arguments
报错都非常奇怪 全是库函数里报错 是库的问题吗还是代码的问题呢
Error downloading 就是无法下载,你后面的链接是无法访问的,你可以试试把链接拷贝到浏览器里面试试,确实是无法访问的。
jiyugpt
这些报错信息似乎与 tldextract 库有关。tldextract 用于提取 URL 中的顶级域名和子域名,以及其他相关信息。根据错误信息来看,报错发生在 tldextract 库的缓存功能部分。
第一个报错和第二个报错显示了关于缓存的错误,提示无法获取缓存的键值。可能的原因是 tldextract 库无法访问公共后缀列表,导致缓存失败。
第三个报错显示了在处理异常时另一个异常发生,这可能是由于缓存失败导致的。
这些问题可能是由于网络访问限制、防火墙配置或其他网络相关问题引起的。为了解决这个问题,你可以尝试以下几个步骤:
确保你的网络连接正常,并且没有任何防火墙或代理设置阻止对公共后缀列表的访问。
检查你的网络环境是否允许访问 https://publicsuffix.org/list/public_suffix_list.dat 和 https://raw.githubusercontent.com/publicsuffix/list/master/public_suffix_list.dat 这两个 URL,你可以尝试在浏览器中访问这两个链接来验证。
如果你使用了代理,尝试禁用代理并重新运行程序,看是否能够解决问题。
更新或重新安装 tldextract 库,确保你使用的是最新版本。
如果以上步骤仍然无法解决问题,那么可能需要进一步检查你的网络设置、防火墙配置和库依赖关系等方面的问题,或者尝试其他类似的库来替代 tldextract 进行 URL 解析操作。
KeyError: "namespace: publicsuffix.org-tlds key:
KeyError: "namespace: urls key:
TypeError: LifoQueue() takes no arguments
KeyError:“namespace:publicsuffix.org-tlds密钥:
KeyError:“namespace:urls密钥:
类型错误:LifoQueue()不接受参数
从中文释义来看,这个错误通常是由于Scarpy爬虫无法找到所需的键值对引起的。KeyError错误表明在Python字典中没有找到给定的键。另外,TypeError错误表明LifoQueue()函数需要一个参数,但是你没有提供任何参数。这可能是由于代码中的某些错误导致的。
首先建议你可以尝试更新下Scarpy库到最新版本看看
或者查看文档,检查下是否是配置问题
最后,再检查代码,是否有语法错误
错误显示在下载你要爬取的网页的时发生了错误,首先检查下你的网页是否可以正常打开的,链接是否写错,多了空格什么的,其次检查下的scrapy的配置文件是否有错误,也有可能是被反爬了,增加user-agent,遵守roboot协议设置为False、或者设置代理等看看。最后,可以再看看scrapy打印出来的日志,里面也许会有更详细的报错信息
这些报错似乎都与库函数相关,可能是库函数的问题。下面是每个报错的简要解释:
第一个报错是 tldextract 库中的一个缓存错误,它试图从公共后缀列表中解析域名,但在缓存中找不到相应的条目。
第二个报错是在第一个错误处理程序中引发的,同样与 tldextract 库中的缓存有关。
第三个报错是在 scrapy 库中的一个中间件中引发的,它试图使用 urllib3 库的 LifoQueue 类创建一个队列,但是 LifoQueue 类不带参数。
因此,建议检查您的库依赖关系和版本,并确保它们与 Scrapy 兼容。如果问题仍然存在,您可以尝试在 Scrapy 之外使用这些库,看看它们是否能正常工作,以便确定问题是否与 Scrapy 有关。
从错误堆栈来看,这应该是scrapy依赖的tldextract和requests库出现了版本兼容性问题导致的。有几点需要检查:
检查scrapy、tldextract和requests的版本号,并确认版本之间的兼容性。这三个库的版本更新较快,版本差异可能导致无法正常工作。需更新到最新兼容版本。
tldextract库在获取公共后缀列表时出现KeyError,很有可能是其公共后缀列表源发生变更导致的。可以在tldextract的缓存目录下删除public_suffix_list.dat文件,让其重新下载后缀列表数据。
在报错位置,urllib3在创建connection pool时出现TypeError,无法正常构造LifoQueue对象。这也是版本差异造成的,需要更新urllib3到最新版本。
同样在请求连接过程中,requests也出现了版本兼容问题。更新requests库版本亦可解决此问题。
所以,总体来说,此问题应源自依赖库的版本差异。我的建议是:
查看scrapy、tldextract、requests和urllib3的版本号,并更新所有这些库到最新兼容版本。
删除tldextract缓存目录下的public_suffix_list.dat文件,让其重新获取数据。
重新安装和编译这些库的Python扩展。
重新启动爬虫,很有可能问题就会解决。
这类版本差异导致的问题在Python开发中较常见,解决方式主要是更新相关依赖库到兼容的最新版本。如果更新后问题仍未解决,则需要进一步检查是否存在其他版本兼容问题或代码错误。
希望以上分析和建议能帮助您解决此scrapy爬虫的报错问题。
为啥不将代码放上来让大家看看呢。大概率是函数使用不当吧
该回答引用ChatGPT4与博主@晓码自在合作编写:
根据错误堆栈,这似乎是urllib3库版本问题导致的。urllib3在较新版本进行了一些修改,导致老版本的代码无法兼容。
Specifically,在urllib3的1.25.4版本之前,HTTPSConnectionPool的初始化方法接受maxsize参数,用于设置连接池的最大大小。但在1.25.4版本之后,这个参数被移除了,导致老版本的代码调用时报TypeError。
解决方法有两种:
pip install --upgrade urllib3
这会自动下载并安装最新版本的urllib3,修复此兼容性问题。
python
import urllib3
if urllib3.__version__ < '1.25.4':
pool = HTTPSConnectionPool(host, maxsize=10) # 老版本的初始化调用
else:
pool = HTTPSConnectionPool(host) # 新版本的初始化调用
我个人更推荐第一种方法,升级至最新版本的urllib3库。这样可以避免版本兼容问题,而且也能使用库的最新特性。
除了这一兼容性问题外,其他错误似乎都是由此引起的连锁反应。升级urllib3库应该可以完全解决你的爬虫报错问题。
借用文心一言和GPT-4的作答:
看起来Scarpy无法下载指定的网页,这是一个常见的错误。为了解决这个问题,你可以尝试以下几个步骤:
确认你的网络连接是否正常。如果网络连接不稳定,可能会导致Scarpy无法下载网页。
检查目标网页是否在Scarpy的允许访问列表中。你可以在Scarpy的settings.py文件中添加或修改相关配置,以允许访问目标网页。
确认你的代理服务器是否正常。如果使用代理服务器,请确保代理服务器配置正确,并且代理服务器可以访问目标网页。
尝试使用其他工具下载目标网页,例如使用浏览器或者使用命令行工具。如果其他工具可以正常下载,那么可能是Scarpy本身出现了问题,你可以尝试更新Scarpy或者联系Scarpy的开发者寻求帮助。