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
in을 넣으면 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)
답변
여기서 일어난 일은 itunes 서버가 연결을 거부 한다는 것입니다 (짧은 시간에 동일한 IP 주소에서 너무 많은 요청을 보내고 있습니다)
URL에서 최대 재시도 횟수를 초과했습니다 : / in / app / adobe-reader / id469337564? mt = 8
오류 추적은 “대상 시스템이 적극적으로 거부했기 때문에 연결할 수 없습니다” 와 같이 잘못 오도됩니다 .
Github의 python.requests lib에 관한 문제가 있습니다. 여기 에서 확인 하십시오.
이 문제를 해결하려면 (디스플레이 추적을 오도하는 문제가 아닌) 연결 관련 예외를 다음과 같이 잡아야합니다.
try:
page1 = requests.get(ap)
except requests.exceptions.ConnectionError:
r.status_code = "Connection refused"
이 문제를 극복하는 또 다른 방법은 충분한 시간 간격을 사용하여 서버에 요청을 보내는 경우 sleep(timeinsec)
파이썬 기능 으로 달성 할 수 있습니다 (수면을 가져 오는 것을 잊지 마십시오)
from time import sleep
모든 요청에서 모두 훌륭한 파이썬 라이브러리입니다. 문제가 해결되기를 바랍니다.
답변
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)
의 GET
경우 URL 이 3 번 재 시도 requests.exceptions.ConnectionError
됩니다. 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
천만에요 🙂
답변
답변
비슷한 문제가 있지만 다음 코드가 저에게 효과적이었습니다.
url = <some REST url>
page = requests.get(url, verify=False)
“verify = False”는 SSL 확인을 비활성화합니다. 평소처럼 try and catch를 추가 할 수 있습니다.
답변
항상 예외 처리를 구현하는 것이 좋습니다. 예기치 않은 스크립트 종료를 피할뿐만 아니라 오류 및 정보 알림을 기록하는 데 도움이됩니다. 파이썬 요청을 사용할 때 다음과 같은 예외를 잡는 것을 선호합니다.
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 주소가 차단되면 변경할 수있는 사용자 정의 함수입니다. 이 기능없이 갈 수 있습니다.
답변
회사 환경에서 프록시를 지정하면 해결되었습니다.
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] 일정 시간이 지난 후 연결된 당사자가 제대로 응답하지 않아서 실패했거나 연결된 호스트가 응답하지 않아서 설정된 연결에 실패했습니다. ‘))