【问题标题】:Max retries exceeded with url requests Pythonurl请求Python超出了最大重试次数
【发布时间】:2019-04-28 02:19:27
【问题描述】:

我正在尝试抓取此页面,我使用的代码是这样的:

page = get("https://www.uobgroup.com/online-rates/gold-and-silver-prices.page")

运行此代码时出现此错误:

Traceback (most recent call last):
  File "/Users/lakesh/WebScraping/Gold.py", line 46, in <module>
    page = get("https://www.uobgroup.com/online-rates/gold-and-silver-prices.page")
  File "/Library/Python/2.7/site-packages/requests/api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 512, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 622, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/adapters.py", line 511, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.uobgroup.com', port=443): Max retries exceeded with url: /online-rates/gold-and-silver-prices.page (Caused by SSLError(SSLError(1, u'[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)'),))

也试过了:

page = get("https://www.uobgroup.com/online-rates/gold-and-silver-prices.page",verify=False)

这也不行。需要一些指导。

完整代码:

from requests import get
import requests
from requests.exceptions import RequestException
from contextlib import closing
from bs4 import BeautifulSoup
from collections import defaultdict
import json

requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DES-CBC3-SHA'
page = get("https://www.uobgroup.com/online-rates/gold-and-silver-prices.page")
html = BeautifulSoup(page.content, 'html.parser')
result = defaultdict(list)
last_table = html.find_all('table')[-1]

【问题讨论】:

  • 你可能会从stackoverflow.com/questions/51991891/…得到一些指导
  • requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DES-CBC3-SHA' 试过这个并得到这个错误:名称'requests'没有定义
  • 我从堆栈跟踪中猜测您的代码可能有一个from requests import get。如果是这种情况,请添加import requests
  • 仍然无法获取数据。也发布了我的代码。
  • 我所暗示的指导是,该站点可能正在做一些奇怪的事情,它接受的密码是什么。 curl -v ... 表明该站点接受与 DHE-RSA-AES256-GCM-SHA384 的连接。试试看。

标签: python python-requests


【解决方案1】:

我添加了verify=False 选项,还取出了设置密码的行。一旦我这样做了,你的代码就可以在 Python 3 中为我工作......有时。它工作一次,然后似乎有一段时间不起作用。我的猜测是该站点是限速访问,可能基于它看到的代理签名,试图限制机器人访问。当它工作时我打印了last_table,这就是我得到的:

<table class="responsive-table-rates table table-striped table-bordered" id="nova-funds-list-table">
<tbody>
<tr>
<td style="background-color: #002265; text-align: center; color: #ffffff;">DESCRIPTION</td>
<td style="background-color: #002265; text-align: center; color: #ffffff;">CURRENCY</td>
<td style="background-color: #002265; text-align: center; color: #ffffff;">UNIT</td>
<td style="background-color: #002265; text-align: center; color: #ffffff;">BANK SELLS</td>
<td style="background-color: #002265; text-align: center; color: #ffffff;">BANK BUYS</td>
<td style="text-align: left; display: none;"> </td>
<td style="text-align: left; display: none;"> </td>
</tr>
</tbody>
</table>

我正在将传入的内容转储到文件中。当它工作时,我得到可读的 HTML。当它不起作用时,我会在顶部看到几行可读的行,然后是一堆乱码,可能是一些复杂的 Javascript。不确定那是什么。当它不起作用时,我得到这个:

Traceback(最近一次调用最后一次):文件 “/Users/stevenjohnson/lab/so/ReadAFile.py”,第 8 行,在 last_table = html.find_all('table')[-1] IndexError: list index out of range

无论哪种情况,我都会返回 200 状态代码。

这是我的代码版本:

from requests import get
from bs4 import BeautifulSoup
from collections import defaultdict

page = get("https://www.uobgroup.com/online-rates/gold-and-silver-prices.page", verify=False)
html = BeautifulSoup(page.content, 'html.parser')
result = defaultdict(list)
last_table = html.find_all('table')[-1]
print(last_table)

我在 Mac 上。也许您不是,并且您机器上的证书链与我的不同,因此您无法尽我所能。不过,我想让你知道,你的代码只需要 verify=False 就可以为我工作。

【讨论】:

  • 好吧,那我不知道发生了什么。它在 Python 2.716 和 3.7.3 下的 Mac 上运行良好。我正在运行 High Sierra。 - 我正在运行 bs4-0.0.1。
  • 我的代码和你的一样,只是我在get调用的末尾添加了verify=False。 - 它现在对我来说一直在运行。你最近有试过吗?也许是网站的问题。
  • 哦等等! ..我的代码不一样。我注释掉了requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DES-CBC3-SHA' 行。 - 我会发布我的代码...
  • 不是它不再工作了。我认为这个网站有些古怪。 - 再次工作。至于什么时候起作用,什么时候不起作用,这是非常随机的。 - 我不认为这是访问次数。我刚刚连续运行了 8 次成功,然后第 9 次尝试失败。
  • 哦...顺便说一句...我没有收到身份验证或 SSL 错误。我总是找回内容。我只是有时会返回一个错误页面,或者看起来是这样。
猜你喜欢
  • 2021-04-03
  • 2014-07-25
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 2020-07-11
相关资源
最近更新 更多