Outils pour capturer et convertir le Web
Communauté en ligne de GrabzIt

Je renvoie une erreur lorsque j'exécute une démo avec Python

Posez des questions concernant l’outil Web Scraper de GrabzIt. Par exemple, comment utiliser le scraper Web et l’API pour extraire des données de pages Web, d’images ou de documents PDF.

erreur:

Traceback (appel le plus récent dernier):

  Fichier "GrabzItClient.py", ligne 6, dans

    saisissez-le.SaveTo("documents/result.docx")

  Fichier "C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py", ligne 235, dans SaveTo

    identifiant = soi.Save()

  Fichier "C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py", ligne 209, dans Save

    obj = self._take(sig, callBackURL)

  Fichier "C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py", ligne 223, dans _take

    return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))

  Fichier "C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py", ligne 629, dans HTTPPost

    h.endheaders()

  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 1234, dans les en-têtes de fin

    self._send_output(message_body, encode_chunked=encode_chunked)

  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 1026, dans _send_output

    self.send(msg)

  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 964, en envoi

    auto.connect()

  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 936, dans la connexion

    (self.host, self.port), self.timeout, self.source_address)

  Fichier "C:\Program Files\Python36\lib\socket.py", ligne 704, dans create_connection

    pour res dans getaddrinfo (hôte, port, 0, SOCK_STREAM) :

  Fichier "C:\Program Files\Python36\lib\socket.py", ligne 743, dans getaddrinfo

    pour res dans _socket.getaddrinfo (hôte, port, famille, type, proto, drapeaux) :

socket.gaierror: [Errno 11001] getaddrinfo a échoué

 

source:(J'ai installé GrabzIt et j'ai obtenu la CLÉ D'APPLICATION et le SECRET D'APPLICATION)

depuis GrabzIt importer GrabzItClient

 

grabzIt = GrabzItClient.GrabzItClient (CLÉ D'APPLICATION, SECRET D'APPLICATION)

saisissez-le.HTMLToDOCX(" Bonjour le monde! ") 

saisissez-le.SaveTo("documents/result.docx") 

 

peux-tu me dire que dois-je faire ?

Question posée par un anonyme le 21 août 2018

Bienvenue dans la communauté!

Généralement un socket.gaierror: [Errno 11001] getaddrinfo a échoué est provoqué lorsque le code est appelé derrière un pare-feu ou un proxy. Veuillez vous assurer que l'application a accès au port 80.

Réponse du support GrabzIt le 21 août 2018

Merci pour la réponse.

Oui, c'est le problème du proxy. Il fonctionne correctement lorsque je change l'autre PC qui n'a pas de proxy.

Comment cela peut-il fonctionner avec un proxy ?

Répondu par anonyme le 21 août 2018

Ce sera une nouvelle fonctionnalité. Nous cherchons si nous pouvons modifier le client Python pour activer l'utilisation de serveurs proxy.

Si cela est possible, nous vous répondrons avec un correctif. Vous pouvez essayer vous-même si vous le souhaitez car tous nos clients sont open source : https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

Réponse du support GrabzIt le 21 août 2018

Nous avons ajouté la nouvelle fonctionnalité. Téléchargez simplement le fichier GrabzItClient.py et remplacez votre copie à partir d'ici : https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

Vous pouvez ensuite définir l'url proxy de votre serveur proxy à l'aide de la nouvelle méthode SetLocalProxy, par exemple :

grabzIt.SetLocalProxy("http://123.123.123.123:21231")

S'il vous plaît, dites-nous maintenant comment ça se passe et nous ferons bientôt une nouvelle version !

Réponse du support GrabzIt le 21 août 2018

Merci pour la réponse.

j'ai remplacé le GrabzItClient.py et j'ai changé ma source :

 

 

grabzIt = GrabzItClient.GrabzItClient (CLÉ D'APPLICATION, SECRET D'APPLICATION)

grabzIt.SetLocalProxy("http://xxx@jp.xxxxx.com:yyyyyyy@zzz.proxy.zzz.zzzzzzzz.com:8080")

saisissez-le.HTMLToDOCX(" Bonjour le monde! ") 

saisissez-le.SaveTo("documents/result.docx") 

 

utilisateur:xxx@jp.xxxxx.com

mot de passe:yyyyyyy

Serveur proxy:zzz.proxy.zzz.zzzzzzz.com

Port:8080

 

Message d'erreur:

Traceback (appel le plus récent dernier):
  Fichier "GrabzIt_test.py", ligne 54, dans
    saisissez-le.SaveTo("résultat.docx")
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 487, dans SaveTo
    identifiant = soi.Save()
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 435, dans Save
    obj = self._take(sig, callBackURL)
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 463, dans _take
    return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 1307, dans HTTPPost
    en-têtes['Proxy-Authorization'] = 'Basic' + base64.b64encode(auth)
  Fichier "C:\Program Files\Python36\lib\base64.py", ligne 58, dans b64encode
    encodé = binascii.b2a_base64(s, newline=False)
TypeError : un objet de type octets est requis, pas « str »

 

même message d'erreur même si j'ai changé DéfinirProxyLocal de "http://xxx@jp.xxxxx.com:yyyyyyy@zzz.proxy.zzz.zzzzzzz.com:8080"À "http://xxx%40jp.xxxxx.com:yyyyyyy@zzz.proxy.zzz.zzzzzzz.com:8080"

 

Répondu par anonyme le 22 août 2018

désolé, j'ai peut-être défini le mauvais proxy.

J'ai changé le proxy en "http://the_other_proxy_server:port" et le message d'erreur est devenu :

Traceback (appel le plus récent dernier):
  Fichier "GrabzIt_test.py", ligne 54, dans
    saisissez-le.SaveTo("résultat.docx")
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 487, dans SaveTo
    identifiant = soi.Save()
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 435, dans Save
    obj = self._take(sig, callBackURL)
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 463, dans _take
    return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 1327, dans HTTPPost
    h.endheaders()
  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 1234, dans les en-têtes de fin
    self._send_output(message_body, encode_chunked=encode_chunked)
  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 1026, dans _send_output
    self.send(msg)
  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 964, en envoi
    auto.connect()
  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 940, dans la connexion
    soi._tunnel()
  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 919, dans _tunnel
    message.strip()))
OSError : Échec de la connexion au tunnel : 407 Authentification proxy requise

Répondu par anonyme le 22 août 2018

Vous devez spécifier votre nom d'utilisateur et votre mot de passe comme ceci : http://username:password@example.com:12335

Réponse du support GrabzIt le 22 août 2018

Oui, j'ai précisé mon identifiant et mon mot de passe (question du mercredi 22 août 2018 09:34:43) comme :

http://username:password@example.com:12335

le nom d'utilisateur est l'adresse e-mail (xxx@jp.xxxxx.com), j'ai donc changé pour xxx%40jp.xxxxx.com

mais c'est le même message d'erreur : TypeError : un objet de type octet est requis, pas 'str'

Répondu par anonyme le 22 août 2018

Désolé, j'ai raté votre réponse précédente. Je pense qu'il s'agit d'un problème Python 3 et j'ai publié un correctif qui devrait résoudre l'erreur. Veuillez mettre à jour à nouveau GrabzItClient.py à partir de : https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

Réponse du support GrabzIt le 22 août 2018

J'ai remplacé le fichier python et j'ai trouvé un nouveau message d'erreur :

Traceback (appel le plus récent dernier):

  Fichier "GrabzIt_test.py", ligne 54, dans

    saisissez-le.SaveTo("résultat.docx")

  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 244, dans SaveTo

    identifiant = soi.Save()

  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 218, dans Save

    obj = self._take(sig, callBackURL)

  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 232, dans _take

    return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))

  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 661, dans HTTPPost

    en-têtes['Proxy-Authorization'] = 'Basic' + encodedAuth

TypeError : doit être une chaîne, pas un octet

Répondu par anonyme le 22 août 2018

Ok, nous l'avons décodé intou ascii. Nous n'utilisons pas Python 3, c'est pourquoi cela nous a surpris. Veuillez mettre à jour votre code à partir d'ici : https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

Comme il s'agit d'un open source, n'hésitez pas à déboguer et à valider toutes les améliorations que vous souhaitez sur Github. Comme nous n'avons pas accès à votre configuration.

Réponse du support GrabzIt le 22 août 2018

Merci beaucoup pour votre aide.

OSError : Échec de la connexion au tunnel : 407 Authentification proxy requise

Je vais essayer de déboguer. 

Répondu par anonyme le 22 août 2018

Nous pensons savoir quel est le problème, mais cela nécessitera de réécrire une partie du code. Nous vous contacterons donc une fois terminé. J'espère que dans 24 heures.

Réponse du support GrabzIt le 22 août 2018

Je crois que nous avons résolu le problème ! Vous pouvez obtenir la dernière version ici : https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

Réponse du support GrabzIt le 22 août 2018

Merci pour votre réponse.

Nouveau message d'erreur :

Traceback (appel le plus récent dernier):
  Fichier "GrabzIt_test.py", ligne 54, dans
    saisissez-le.SaveTo("résultat.docx")
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 243, dans SaveTo
    identifiant = soi.Save()
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 217, dans Save
    obj = self._take(sig, callBackURL)
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 231, dans _take
    return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 629, dans HTTPPost
    h = soi._getConnection()
  Fichier "C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py", ligne 679, dans _getConnection
    h.putheader('autorisation-proxy', 'Basic' + encodedAuth)
  Fichier "C:\Program Files\Python36\lib\http\client.py", ligne 1201, dans putheader
    augmenter CannotSendHeader()
http.client.CannotSendHeader

 

Répondu par anonyme le 22 août 2018

Nous avons apporté quelques améliorations mineures à : https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py

Et je l'ai testé en Python 2.7, 3.4 et 3.6 et il fonctionne dans tous les environnements, avec et sans proxys et avec des proxys autorisés.

Si cela ne fonctionne toujours pas pour vous, vous devrez déboguer le code.

Réponse du support GrabzIt le 23 août 2018

Merci de votre réponse.

Je vais déboguer ma source.

Au fait, avez-vous testé le nom d'utilisateur qui est Email comme xxx@yyy.com ?

Répondu par anonyme le 23 août 2018

Non, je n'avais pas besoin d'encoder et de décoder correctement, alors c'est peut-être là le problème.

Réponse du support GrabzIt le 23 août 2018