Próbuję pobrać zawartość 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)
Kiedy próbuję range
z (0,2)
nim pracuje, ale kiedy umieścić range
w 100
s to pokazuje ten błąd:
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)
python
python-requests
user3446000
źródło
źródło
i
zmiennej gdzieś wfor
?itunes.apple.com
. Czy możesz uruchomićdig itunes.apple.com
swój wiersz poleceń i opublikować tutaj wyniki?Odpowiedzi:
Tutaj zdarzyło się, że serwer itunes odmawia połączenia (wysyłasz zbyt wiele żądań z tego samego adresu IP w krótkim czasie)
śledzenie błędów jest mylące, powinno to być coś w stylu „Nie można nawiązać połączenia, ponieważ maszyna docelowa aktywnie odmówiła” .
Wystąpił problem na stronie about python.requests lib na Github, sprawdź tutaj
Aby rozwiązać ten problem (nie tyle problem, ile wprowadzający w błąd ślad debugowania), powinieneś złapać wyjątki związane z połączeniem, takie jak:
Innym sposobem rozwiązania tego problemu jest wykorzystanie wystarczającej ilości czasu do wysyłania żądań do serwera, można to osiągnąć za pomocą
sleep(timeinsec)
funkcji w Pythonie (nie zapomnij zaimportować uśpienia)W sumie wszystkie żądania są niesamowitą biblioteką Pythona, mam nadzieję, że rozwiąże Twój problem.
źródło
(Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)
część. „gai” oznaczagetaddrinfo
, a prawdopodobny powiązany błąd to: EAI_NONAME Węzeł lub usługa nie są znane; lub zarówno węzeł, jak i usługa mają wartość NULL; lub AI_NUMERICSERV został określony w hints.ai_flags, a usługa nie jest ciągiem numerycznym numeru portu. Prawdopodobnie wyglądało na to, że sen naprawił to, ale prawdopodobnie przespałeś przejściowy problem z programem rozpoznawania nazw DNS.Po prostu użyj
requests'
funkcji:Spowoduje to
GET
wyświetlenie adresu URL i spróbuj ponownie 3 razy w przypadkurequests.exceptions.ConnectionError
.backoff_factor
pomoże zastosować opóźnienia między próbami, aby uniknąć ponownej porażki w przypadku okresowego limitu wniosków.Spójrz
requests.packages.urllib3.util.retry.Retry
, ma wiele opcji upraszczających ponawianie.źródło
python manage.py shell
i używamsession.get('http://localhost:8000/api/')
. Jakaś pomoc? @Zuludev-server
najpierw uruchomić i uruchomić go.Po prostu zrób to,
Wklej następujący kod w miejsce
page = requests.get(url)
:Nie ma za co :)
źródło
import time
requests
ma własny kod do obsługi błędu i ponownej próbyexcept: ...
) zrequests
isleep()
w odpowiedzi. Zamiast tego powinny przechwytywaćrequests.exceptions.ConnectionError
isleep()
tylko wtedy, gdy wystąpi ten wyjątek. (Lub jeszcze lepiej, po prostu użyj wbudowanejRetry()
klasy, która jest dołączonarequests
, zgodnie z sugestią @Zulu).pip install pyopenssl
wydawało się, że rozwiązuje to za mnie.https://github.com/requests/requests/issues/4246
źródło
Mam podobny problem, ale poniższy kod zadziałał.
„verify = False” wyłącza weryfikację SSL. Try and catch można dodać jak zwykle.
źródło
Zawsze dobrze jest zaimplementować obsługę wyjątków. Pomaga to nie tylko uniknąć nieoczekiwanego wyjścia ze skryptu, ale może również pomóc w rejestrowaniu błędów i powiadomieniach. Korzystając z żądań Pythona wolę wychwytywać takie wyjątki:
Tutaj renewIPadress () jest funkcją definiowaną przez użytkownika, która może zmienić adres IP, jeśli zostanie zablokowany. Możesz obejść się bez tej funkcji.
źródło
ip-adrress
w Pythonie, czy wiesz coś o tym, to daj mi znaćOkreślenie proxy w środowisku korporacyjnym rozwiązało to za mnie.
Pełny błąd to:
źródło
nie byłem w stanie sprawić, by działał w systemie Windows nawet po zainstalowaniu pyopenssl i wypróbowaniu różnych wersji Pythona (chociaż działał dobrze na Macu), więc przełączyłem się na urllib i działa na Pythonie 3.6 (z python .org) i 3.7 (anaconda )
źródło
Kiedy pisałem skrypt testowy przeglądarki selenium, napotkałem ten błąd podczas wywoływania
driver.quit()
przed użyciem wywołania JS API. Pamiętaj, że opuszczenie webdrivera jest ostatnią rzeczą do zrobienia!źródło
Dodam własne doświadczenie dla tych, którzy będą tego doświadczać w przyszłości. Mój konkretny błąd to
Okazuje się, że było to spowodowane tym, że osiągnąłem maksymalną liczbę otwartych plików w systemie. Nie miało to nic wspólnego z nieudanymi połączeniami lub nawet błędem DNS, jak wskazano.
źródło
Dodając własne doświadczenie:
kiedy próbowałem pobrać plik określony w adresie URL.
Błąd był
Poprawiłem to, dodając
verify = False
funkcję w następujący sposób:źródło
Dodaj nagłówki dla tego żądania.
źródło