J'essaie d'obtenir le contenu de l' App Store> Entreprise :
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)
Quand j'essaye range
avec (0,2)
ça marche, mais quand je mets le range
dans, 100
ça montre cette erreur:
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
la source
la source
i
variable quelque part dans lefor
?itunes.apple.com
. Pouvez-vous exécuterdig itunes.apple.com
sur votre ligne de commande et publier les résultats ici?Réponses:
Ce qui s'est passé ici, c'est que le serveur iTunes refuse votre connexion (vous envoyez trop de demandes à partir de la même adresse IP dans un court laps de temps)
La trace d'erreur est trompeuse, cela devrait être quelque chose comme "Aucune connexion n'a pu être établie car la machine cible l'a activement refusée" .
Il y a un problème à propos de python.requests lib sur Github, vérifiez-le ici
Pour surmonter ce problème (pas tellement un problème car il s'agit d'une trace de débogage trompeuse), vous devez intercepter les exceptions liées à la connexion comme ceci:
Une autre façon de surmonter ce problème est que si vous utilisez suffisamment de temps pour envoyer des requêtes au serveur, cela peut être réalisé par une
sleep(timeinsec)
fonction en python (n'oubliez pas d'importer sleep)Dans l'ensemble, les requêtes sont géniales python lib, espérons que cela résout votre problème.
la source
(Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)
pièce. "gai" signifiegetaddrinfo
, et l'erreur associée probable est: EAI_NONAME Le nœud ou le service n'est pas connu; ou le nœud et le service sont NULL; ou AI_NUMERICSERV a été spécifié dans hints.ai_flags et le service n'était pas une chaîne de numéro de port numérique. Cela ressemblait probablement au sommeil corrigé, mais vous venez probablement de dormir à travers un problème de résolution DNS transitoire.Utilisez simplement les
requests'
fonctionnalités:Ce sera
GET
l'URL et réessayer 3 fois en cas derequests.exceptions.ConnectionError
.backoff_factor
aidera à appliquer des délais entre les tentatives pour éviter d'échouer à nouveau en cas de quota de demandes périodiques.Jetez un œil à
requests.packages.urllib3.util.retry.Retry
, il a de nombreuses options pour simplifier les tentatives.la source
python manage.py shell
et j'utilisesession.get('http://localhost:8000/api/')
. De l'aide? @Zuludev-server
et de le faire fonctionner en premier.Fais juste ça,
Collez le code suivant à la place de
page = requests.get(url)
:Vous êtes les bienvenus :)
la source
import time
requests
a son propre code pour gérer son erreur et réessayerexcept: ...
)requests
etsleep()
en réponse. Au lieu de cela, ils devraient attraperrequests.exceptions.ConnectionError
etsleep()
seulement si cette exception se produit. (Ou mieux encore, utilisez simplement laRetry()
classe intégrée fournie avecrequests
, comme suggéré par @Zulu).pip install pyopenssl
semblait le résoudre pour moi.https://github.com/requests/requests/issues/4246
la source
J'ai eu un problème similaire mais le code suivant a fonctionné pour moi.
"verify = False" désactive la vérification SSL. Try and catch peut être ajouté comme d'habitude.
la source
Il est toujours bon d'implémenter la gestion des exceptions. Cela aide non seulement à éviter la sortie inattendue du script, mais peut également aider à consigner les erreurs et les notifications d'informations. Lorsque j'utilise des requêtes Python, je préfère attraper des exceptions comme celle-ci:
Ici, renewIPadress () est une fonction définie par l'utilisateur qui peut changer l'adresse IP si elle est bloquée. Vous pouvez vous passer de cette fonction.
la source
ip-adrress
en python, savez-vous quelque chose à ce sujet, alors faites le moi savoirLa spécification du proxy dans un environnement d'entreprise l'a résolu pour moi.
L'erreur complète est:
la source
Je n'ai pas pu le faire fonctionner sur Windows même après avoir installé pyopenssl et essayé diverses versions de python (alors que cela fonctionnait bien sur mac), alors je suis passé à urllib et cela fonctionne sur python 3.6 (à partir de python .org) et 3.7 (anaconda )
la source
Lorsque j'écrivais un script de test de navigateur au sélénium, j'ai rencontré cette erreur lors d'un appel
driver.quit()
avant l'utilisation d'un appel API JS.N'oubliez pas que quitter Webdriver est la dernière chose à faire!la source
Ajout de ma propre expérience pour ceux qui vivent cela dans le futur. Mon erreur spécifique était
Il s'avère que c'était en fait parce que j'avais atteint le nombre maximum de fichiers ouverts sur mon système. Cela n'avait rien à voir avec des connexions échouées, ou même une erreur DNS comme indiqué.
la source
Ajout de ma propre expérience:
lorsque j'ai essayé de télécharger un fichier spécifié dans l'url.
L'erreur était
Je l'ai corrigé en ajoutant
verify = False
la fonction comme suit:la source
Vérifiez votre connexion réseau. J'avais ceci et la VM n'avait pas une connexion réseau appropriée.
la source
Ajoutez des en-têtes pour cette demande.
la source