我试图获取App Store > Business的内容:
import requests
from lxml import html
page = requests.get("https://itunes.apple.com/in/genre/ios-business/id6000?mt=8")
tree = html.fromstring(page.text)
flist = []
plist = []
for i in range(0, 100):
app = tree.xpath("//div[@class='column first']/ul/li/a/@href")
ap = app[0]
page1 = requests.get(ap)
当我使用range
(0,2)
时,它可以正常运行,但是当我将range
放入100
时,它会显示此错误:
Traceback (most recent call last):
File "/home/preetham/Desktop/eg.py", line 17, in <module>
page1 = requests.get(ap)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get
return request('get', url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 378, in send
raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='itunes.apple.com', port=443): Max retries exceeded with url: /in/app/adobe-reader/id469337564?mt=8 (Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)
答案 0 :(得分:104)
这里发生的是 itunes 服务器拒绝您的连接(您在短时间内从相同的IP地址发送了太多请求)
网址超出最大重试次数:/ in / app / adobe-reader / id469337564?mt = 8
错误跟踪误导它应该是“无法建立连接,因为目标机器主动拒绝它”。
关于Github的python.requests lib存在问题,请查看here
要克服这个问题(不是因为它会误导调试跟踪而引起的问题),你应该捕获与连接相关的异常,如下所示:
try:
page1 = requests.get(ap)
except requests.exceptions.ConnectionError:
r.status_code = "Connection refused"
另一种解决此问题的方法是,如果你使用足够的时间间隔向服务器发送请求,这可以通过python中的sleep(timeinsec)
函数来实现(不要忘记导入睡眠)
from time import sleep
所有请求都是非常棒的python库,希望能解决你的问题。
答案 1 :(得分:27)
就这样做,
粘贴以下代码代替page = requests.get(url)
:
import time
page = ''
while page == '':
try:
page = requests.get(url)
break
except:
print("Connection refused by the server..")
print("Let me sleep for 5 seconds")
print("ZZzzzz...")
time.sleep(5)
print("Was a nice sleep, now let me continue...")
continue
欢迎你:)
答案 2 :(得分:18)
pip install pyopenssl
似乎为我解决了这个问题。
答案 3 :(得分:2)
我遇到了类似的问题,但是以下代码对我有用。
url = <some REST url>
page = requests.get(url, verify=False)
“ verify = False”禁用SSL验证。尝试捕获可以像往常一样添加。
答案 4 :(得分:1)
在编写硒浏览器测试脚本时,在使用JS api调用之前调用driver.quit()
时遇到了此错误。请记住,退出网络驱动程序是最后要做的事情!
答案 5 :(得分:1)
即使安装了pyopenssl并尝试了各种python版本(尽管在Mac上运行良好)后,我仍无法使其在Windows上运行,所以我切换到urllib,并且在python 3.6(来自python .org)上工作, 3.7(anaconda)
import urllib
from urllib.request import urlopen
html = urlopen("http://pythonscraping.com/pages/page1.html")
contents = html.read()
print(contents)
答案 6 :(得分:1)
在公司环境中指定代理可以为我解决该问题。
page = requests.get("http://www.google.com:80", proxies={"http": "http://111.233.225.166:1234"})
完整错误是:
requests.exceptions.ConnectionError:HTTPSConnectionPool(host ='www.google.com',port = 80):URL超过了最大重试次数:/(由NewConnectionError(':导致:无法建立新连接:[WinError 10060 ]连接尝试失败,因为连接的一方在一段时间后未正确响应,或者建立的连接失败,因为连接的主机未能响应'))
答案 7 :(得分:1)
就import time
并添加:
time.sleep(6)
for 循环中的某处,避免在短时间内向服务器发送过多请求。 数字 6 表示:6 秒。 保持测试数字从 1 开始,直到达到有助于避免问题的最短秒数。
答案 8 :(得分:0)
为此请求添加标题。
headers={
'Referer': 'https://itunes.apple.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
requests.get(ap, headers=headers)
答案 9 :(得分:0)
为以后遇到这种情况的人增加我自己的经验。我的具体错误是
Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'
事实证明,这实际上是因为我已达到系统上打开文件的最大数量。它与失败的连接或指示的DNS错误无关。
答案 10 :(得分:0)
增加我自己的经验:
r = requests.get(download_url)
当我尝试下载url中指定的文件时。
错误是
HTTPSConnectionPool(host, port=443): Max retries exceeded with url (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))
我通过在函数中添加verify = False
来纠正它,如下所示:
r = requests.get(download_url + filename)
open(filename, 'wb').write(r.content)
答案 11 :(得分:0)
检查您的网络连接。我有这个,并且VM没有正确的网络连接。
答案 12 :(得分:0)
在浏览器中运行路由时出现相同的错误,但是在邮递员中,它运行正常。我的问题是,查询字符串之前的路由之后没有/
。
127.0.0.1:5000/api/v1/search/?location=Madina
引发错误,并在/
为我工作之后删除了search
。
答案 13 :(得分:0)
也可能是网络配置问题。因此,为此您需要重新配置您的网络配置。
对于 Ubuntu: 须藤vim /etc/network/interfaces
在 dns-nameserver 中添加 8.8.8.8 并保存。
重置你的网络:/etc/init.d/networking restart
现在试试..
答案 14 :(得分:-5)
我遇到了同样的问题,找到了最简单的解决方案。 尝试替换它:
url="https://itunes.apple.com/in/genre/ios-business/id6000?mt=8"
与此:
url="http://itunes.apple.com/in/genre/ios-business/id6000?mt=8"
协议上的区别是“ s” 。这解决了我的麻烦。