Ik probeer de inhoud van App Store > ; Zakelijk:
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)
Als ik het range
probeer met (0,2)
werkt het, maar als ik het range
in 100
s het toont deze fout:
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)
Antwoord 1, autoriteit 100%
Wat hier is gebeurd, is dat de itunes-server je verbinding weigert (je verzendt te veel verzoeken vanaf hetzelfde ip-adres in korte tijd)
Maximum aantal nieuwe pogingen overschreden met url: /in/app/adobe-reader/id469337564?mt=8
fouttracering is misleidend, het zou zoiets moeten zijn als “Er kan geen verbinding worden gemaakt omdat de doelcomputer dit actief heeft geweigerd”.
Er is een probleem op de python.requests lib op Github, bekijk het hier
Om dit probleem op te lossen (niet zozeer een probleem als wel een misleidende debug-tracering) moet u verbindingsgerelateerde uitzonderingen opvangen, zoals:
try:
page1 = requests.get(ap)
except requests.exceptions.ConnectionError:
r.status_code = "Connection refused"
Een andere manier om dit probleem op te lossen is als u voldoende tijd gebruikt om verzoeken naar de server te sturen. Dit kan worden bereikt door de functie sleep(timeinsec)
in python (vergeet niet om slaap te importeren)
from time import sleep
Al met al is het een geweldige python lib, hoop dat dit je probleem oplost.
Antwoord 2, autoriteit 97%
Gebruik gewoon de functies van 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)
Hiermee wordt de URL GET
en 3 keer opnieuw geprobeerd in het geval van requests.exceptions.ConnectionError
. backoff_factor
helpt bij het toepassen van vertragingen tussen pogingen om te voorkomen dat ze opnieuw mislukken in het geval van een periodiek verzoekquotum.
Bekijk requests.packages.urllib3.util.retry.Retry
, het heeft veel opties om het opnieuw proberen te vereenvoudigen.
Antwoord 3, autoriteit 25%
Doe dit gewoon,
Plak de volgende code in plaats van 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
Graag gedaan 🙂
Antwoord 4, autoriteit 20%
pip install pyopenssl
leek het voor mij op te lossen.
https://github.com/requests/requests/issues/4246
Antwoord 5, autoriteit 16%
Ik heb een soortgelijk probleem, maar de volgende code werkte voor mij.
url = <some REST url>
page = requests.get(url, verify=False)
“verify=False” schakelt SSL-verificatie uit. Proberen en vangen kan zoals gewoonlijk worden toegevoegd.
Antwoord 6, autoriteit 5%
Het specificeren van de proxy in een bedrijfsomgeving loste het voor mij op.
page = requests.get("http://www.google.com:80", proxies={"http": "http://111.233.225.166:1234"})
De volledige fout is:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host=’www.google.com’, port=80): Max. aantal nieuwe pogingen overschreden met url: / (Veroorzaakt door NewConnectionError(‘: Kan geen nieuwe verbinding tot stand brengen: [WinError 10060] ] Een verbindingspoging is mislukt omdat de verbonden partij na een bepaalde tijd niet correct heeft gereageerd, of de tot stand gebrachte verbinding is mislukt omdat de verbonden host niet heeft gereageerd’))
Antwoord 7, autoriteit 4%
Het is altijd goed om exception handling te implementeren. Het helpt niet alleen om onverwacht afsluiten van het script te voorkomen, maar kan ook helpen bij het loggen van fouten en infomeldingen. Bij het gebruik van Python-verzoeken vang ik het liefst uitzonderingen zoals deze:
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")
Hier is renewIPadress() een door de gebruiker gedefinieerde functie die het IP-adres kan wijzigen als het wordt geblokkeerd. U kunt zonder deze functie.
Antwoord 8, autoriteit 2%
Mijn eigen ervaring toevoegen voor degenen die dit in de toekomst ervaren. Mijn specifieke fout was
Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'
Het bleek dat dit eigenlijk was omdat ik het maximale aantal open bestanden op mijn systeem had bereikt. Het had niets te maken met mislukte verbindingen, of zelfs een DNS-fout zoals aangegeven.
Antwoord 9
Toen ik een selenium browser-testscript aan het schrijven was, kwam ik deze fout tegen bij het aanroepen van driver.quit()
voordat een JS api-aanroep werd gebruikt. Onthoud dat het afsluiten van webdriver het laatste is wat u hoeft te doen!
Antwoord 10
ik kon het niet laten werken op Windows, zelfs niet na het installeren van pyopenssl en het proberen van verschillende python-versies (terwijl het prima werkte op mac), dus schakelde ik over naar urllib en het werkt op python 3.6 (van python .org) en 3.7 (anaconda)
import urllib
from urllib.request import urlopen
html = urlopen("http://pythonscraping.com/pages/page1.html")
contents = html.read()
print(contents)
Antwoord 11
Het kan ook een netwerkconfiguratieprobleem zijn. Dus daarvoor moet je je netwerkconfiguraties opnieuw configureren.
voor Ubuntu :
sudo vim /etc/network/interfaces
voeg 8.8.8.8 toe aan dns-nameserver en sla het op.
reset uw netwerk: /etc/init.d/networking restart
Probeer het nu..
Antwoord 12
Mijn eigen ervaring toevoegen:
r = requests.get(download_url)
toen ik probeerde een bestand te downloaden dat in de url is gespecificeerd.
De fout was
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')])")))
Ik heb het gecorrigeerd door verify = False
als volgt in de functie toe te voegen:
r = requests.get(download_url + filename)
open(filename, 'wb').write(r.content)
Antwoord 13
Controleer uw netwerkverbinding. Ik had dit en de VM had geen goede netwerkverbinding.
Antwoord 14
Ik had dezelfde fout toen ik de route in de browser uitvoerde, maar in de postbode werkt het prima. Het probleem met de mijne was dat er geen /
was na de route vóór de queryreeks.
127.0.0.1:5000/api/v1/search/?location=Madina
geef de fout weer en verwijder /
nadat de search
werkte voor mij.
Antwoord 15
gewoon import time
en voeg toe:
time.sleep(6)
ergens in de for-lus, om te voorkomen dat er in korte tijd te veel verzoeken naar de server worden gestuurd.
het cijfer 6 betekent: 6 seconden.
blijf nummers testen vanaf 1, totdat je het minimum aantal seconden hebt bereikt dat het probleem helpt voorkomen.
Antwoord 16
Voeg kopteksten toe voor dit verzoek.
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)