MaxRetryError: HTTPConnectionPool: Max retries exceeded (Caused by ProtocolError('Connection aborted.', error(111, 'Connection refused')))
(2个答案)
12个月前关闭。
GITHUB链接到脚本
https://github.com/Lexszin/learning-stuff/blob/master/Python/Web%20Crawling/Mangadex_downloader/main.py
问题描述
基本上,我做了一个脚本,可以从
https://mangadex.org下载漫画图像。
该脚本在技术上可以正常运行,但是在循环的第二次迭代开始时会返回“ Max Retries Exceed”(超过最大重试次数)...这对我来说没有意义,考虑到url在每次迭代中都会更新一次,并且只调用一次,如何仅被调用一次时有多次重试?
这个问题似乎不是客户端,而是服务器端,因为图像在第一次迭代中就可以很好地下载了,但这很奇怪。
以下是脚本中采取的步骤:
在
https://mangadex.org/检索所有现有标题,存储在“ index.json”,如果“ index.json”已存在,则加载文件。 (工作中)
解析从Myanimelist导入的“ .xml”文件,并从中返回所有漫画标题。 (工作中)
循环浏览“ index.json”和已粘贴的“ .xml”文件中的所有标题。 (工作中)
对于每个漫画,创建一个带有标题的目录,通过请求获取标题主页的源代码,并查找有多少页。 (工作中)
循环浏览每个页面,为每个页面获取英语或葡萄牙语的漫画的所有漫画标题及其链接。 (工作中)
从标题的首页爬取数据后,循环浏览章节标题及其URL的压缩实例。 (工作中)
在manga目录中创建一个目录,命名为当前迭代/章节(1、2、3等)。在新创建的文件夹中,创建一个名为“ EN”的文件夹(仅存储英语章节)。在新创建的“ EN”文件夹中,创建一个带有实际章节名称的文件夹。 (使用章节名称创建文件夹的原因是因为有时某些特定语言缺少章节,如果我使用迭代文件夹的编号来了解当前章节,则我将处于正确的迭代中,但可能不在正确的迭代中正确的章节。)(工作)
对于当前标题的每个章节链接,请使用Selenium的chrome webdriver转到其第一页。 (内容以JavaScript呈现)(工作中)
在第一章的页面中,获取该章中有多少页。将最后一页(包括最后一页)范围内的每个图像下载到新创建的Chapter文件夹中。
而已。然后,循环在下一章重新开始。当前标题的所有章节完成后,新的循环将从新的漫画开始。
确实可以正常工作...
但是,在第一个完整的循环周期之后(下载了当前章节的所有页面之后,然后遍历下一章),我得到了一个例外。每次运行脚本时,都会使用不同的IP地址和标题。
每次也完全下载指定的第一章。
从表面上看,在第一个周期之后,在Selenium加载第一章的那一行,此错误消息返回。
我有一个NordVPN订阅,所以我多次重新路由了IP,但仍然遇到相同的错误。
另外,如果图像已经下载到了假定的文件夹中,则脚本将跳过当前章节并开始下载下一章,因此即使不下载任何内容,我仍然会收到此错误消息。
关于什么可能导致此问题的任何想法?
错误
DevTools listening on ws://127.0.0.1:51146/devtools/browser/b6d08910-ea23-4279-b9d4-6492e6b865d0
Traceback (most recent call last):
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connection.py", line 159, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\util\connection.py", line 80, in create_connection
raise err
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\util\connection.py", line 70, in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py", line 600, in urlopen
chunked=chunked)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py", line 354, in _make_request
conn.request(method, url, **httplib_request_kw)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1229, in request
self._send_request(method, url, body, headers, encode_chunked)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1275, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1224, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1016, in _send_output
self.send(msg)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 956, in send
self.connect()
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connection.py", line 181, in connect
conn = self._new_conn()
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connection.py", line 168, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x000002128FCDD518>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:/Programming/Python/Projects/Mangadex.downloader/main.py", line 154, in <module>
driver.get(chapter_start_url)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 333, in get
self.execute(Command.GET, {'url': url})
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 319, in execute
response = self.command_executor.execute(driver_command, params)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 374, in execute
return self._request(command_info[0], url, body=data)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 397, in _request
resp = self._conn.request(method, url, body=body, headers=headers)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\request.py", line 72, in request
**urlopen_kw)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\request.py", line 150, in request_encode_body
return self.urlopen(method, url, **extra_kw)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\poolmanager.py", line 323, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py", line 667, in urlopen
**response_kw)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py", line 667, in urlopen
**response_kw)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py", line 667, in urlopen
**response_kw)
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "C:\Users\alexT\AppData\Local\Programs\Python\Python37\lib\site-packages\urllib3\util\retry.py", line 398, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=51139): Max retries exceeded with url: /session/4f72fba8650ac3ead558cb25172b4b38/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000002128FCDD518>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))
目的
我正在制作一个脚本,该脚本从您导出的MyAnimeList(可能也适用于Anilist)XML列表中解析漫画标题,并下载
https://mangadex.org中存在的所有列出的标题
我正在使用的模块:请求,重新,Beautiful Soup,json,os,selenium,time和urllib
请求-用于获取具有我所需信息的页面的源代码
重新-使用正则表达式解析包含在
https://myanimelist.net中的漫画列表的“ .xml”文件,并在章节中更改要下载的当前图像的链接。 (链接始终以“ .jpg”或“ .png”结尾,扩展名前有一个数字,即当前页面的编号,数字前有一个随机字母)
Beautiful Soup-用于解析请求的响应,解析标题,标题的链接,章节标题,章节的链接等。
JSON-用于将解析的漫画列表中的数据存储和加载到“ index.json”中或从中加载数据
操作系统-用于检查文件/目录是否存在。
硒-仅在各章中使用,因为读者使用JavaScript加载图像(将下载图像)以及当前章中有多少页(以此为基础循环浏览图像,因为它们具有相同的标题,URL中唯一改变的是当前页面)。
时间-Selenium加载章节页面后,仅使用一次,以便页面完全加载。
Urllib-用于下载章节图像。
PS-MyAnimeList和Anilist是动漫系列和漫画系列的索引,其中有漫画和动漫系列的列表,您可以在其中为列表的每个项目设置标签。 (如果您打算阅读漫画,观看动漫,如果动漫完成,等等。)
我是一名优秀的程序员,十分优秀!