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
sに入れるとこのエラーが表示されます。
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)
ここで起こったことは、iTunesサーバーがあなたの接続を拒否しているということです(あなたは短期間に同じIPアドレスからあまりにも多くのリクエストを送信しています)
最大再試行回数がurl:/ in/app/Adobe-reader/id469337564で最大回数を超えましたか?mt = 8
エラートレースは、「ターゲットマシンが積極的に拒否したため、接続できませんでした」のように誤解を招く可能性があります。
Githubのlibについてはpython.requests libに問題があります。こちらをチェックしてください こちら
この問題を解決するには(デバッグトレースの誤解を招くほどの問題ではありません)、次のような接続関連の例外をキャッチする必要があります。
try:
page1 = requests.get(ap)
except requests.exceptions.ConnectionError:
r.status_code = "Connection refused"
この問題を克服するもう1つの方法は、リクエストをサーバに送信するのに十分なタイムギャップを使用する場合、これはpythonのsleep(timeinsec)
関数によって実現できます(sleepをインポートすることを忘れないでください)。
from time import sleep
すべての要求のすべては素晴らしいpython libです、それがあなたの問題を解決することを願っています。
requests'
機能を使うだけです:
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
session.get(url)
これはURLをGET
し、requests.exceptions.ConnectionError
の場合は3回再試行します。 backoff_factor
は、定期的なリクエストクォータの場合に再度失敗するのを避けるために試行間に遅延を適用するのを助けます。
requests.packages.urllib3.util.retry.Retry
を見てください。再試行を簡単にするための多くのオプションがあります。
これをしてください。
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
どういたしまして :)
pip install pyopenssl
はそれを解決してくれたようです。
私は同様の問題を抱えていましたが、以下のコードが私のために働きました。
url = <some REST url>
page = requests.get(url, verify=False)
"verify = False"はSSL検証を無効にします。トライアンドキャッチはいつも通り追加できます。
例外処理を実装することは常に良いことです。スクリプトの予期せぬ終了を防ぐのに役立つだけでなく、エラーや情報通知を記録するのにも役立ちます。 Pythonリクエストを使うとき、私はこのような例外を捕らえることを好みます:
try:
res = requests.get(adress,timeout=30)
except requests.ConnectionError as e:
print("OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below.\n")
print(str(e))
renewIPadress()
continue
except requests.Timeout as e:
print("OOPS!! Timeout Error")
print(str(e))
renewIPadress()
continue
except requests.RequestException as e:
print("OOPS!! General Error")
print(str(e))
renewIPadress()
continue
except KeyboardInterrupt:
print("Someone closed the program")
ここでrenewIPadress()は、IPアドレスがブロックされた場合にIPアドレスを変更できるユーザー定義関数です。あなたはこの機能なしで行くことができます。
Seleniumブラウザーのテストスクリプトを作成しているときに、JS API呼び出しを使用する前にdriver.quit()
を呼び出すと、このエラーが発生しました。
将来これを経験している人のために私自身の経験を追加します。私の特定のエラーは
Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'
これは実際には、システムで開いているファイルの最大数に達したためであることがわかりました。接続の失敗や、示されているDNSエラーとは関係ありません。
このリクエストのヘッダーを追加します。
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)