Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3098 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  PYTHON Concaténation URL entraine erreur 400

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PYTHON Concaténation URL entraine erreur 400

n°2220212
erwan83
Du Shift DEL tu te méfieras !
Posté le 19-02-2014 à 17:02:30  profilanswer
 

Le but, rapido:
j'ai deux fichiers avec des noms et je les mets dans un string http pour faire une requete, sur google,bing, yahoo ou autre mais ça plante invariablement au même endroit
 

Code :
  1. #EVIDEMMENT J'IMPORTE LES LIBRAIRIES ADEQUATES
  2. user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36'
  3. headers = { 'User-Agent' : user_agent }
  4. fichier = open('NOMS1.txt','r')
  5. for a in range (1,100000,1):
  6.     lecture = fichier.readline()
  7.     print lecture
  8.     if nom == "":
  9.         break
  10.    
  11.     fichier2 = open('NOMS2.txt','r')
  12.     for b in range (1,100000,1):
  13.         lecture2 = fichier2.readline()
  14.         if nom2 == "":
  15.             break
  16.         elif nom2 <> "":
  17.             if nom <> nom2:
  18.                 nom = str(nom)
  19.                 nom2 = str(nom2)
  20.                 ADRESSE = "%s%s %s" % ("http://www.bing.com/search?q=",nom,nom2)
  21.                 req = urllib2.Request(ADRESSE, None, headers)
  22.                 response = urllib2.urlopen(req)
  23.                 TXWEB = response.read()


Traceback (most recent call last):
  File "test.py", line 51, in <module> (EN FAIT LA LIGNE 25 DE MON PROJET CI DESSUS)
    response = urllib2.urlopen(req)
  File "C:\Python\lib\urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python\lib\urllib2.py", line 410, in open
    response = meth(req, response)
  File "C:\Python\lib\urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python\lib\urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "C:\Python\lib\urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "C:\Python\lib\urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 400: Bad Request

 
PIRE:
Au lieu de

Code :
  1. ADRESSE = "%s%s %s" % ("http://www.bing.com/search?q=",nom,nom2)

j'ai mis

Code :
  1. ADRESSE = "%s%s %s" % ("http://www.bing.com/search?q=","PIF","HERCULE" )


et ça marche...
 
Alors si quelqu'un pouvait me conseiller... (Fred?)
parce que là je m'arrache les cheveux

mood
Publicité
Posté le 19-02-2014 à 17:02:30  profilanswer
 

n°2220304
fred1599
Posté le 20-02-2014 à 14:59:57  profilanswer
 

En admettant que ton code soit bien indenté, tu te rends compte du nombre de fois que tu ouvres ton fichier NOMS2.txt ?
 
Tu te rends compte du nombre de requêtes que tu fais sur le même serveur en quelques millisecondes?
 
Vérifies aussi les valeurs de nom et nom2 avec des print.
 

n°2220340
erwan83
Du Shift DEL tu te méfieras !
Posté le 20-02-2014 à 17:46:06  profilanswer
 

Argggghhhh
 
Oui, j'ai mis une attente en bout de boucle
J'ai fait des print,  
J'ai demandé à m'afficher la valeur ORD de chaque CHR de nom et nom2 pour voir si aucun CHR bizarre n'était caché
 
Et ça plante


Message édité par erwan83 le 20-02-2014 à 17:46:21
n°2220512
masklinn
í dag viðrar vel til loftárása
Posté le 22-02-2014 à 21:39:47  profilanswer
 

Normal, tu envoies "http://www.bing.com/search?q=foo bar", c'est pas valide, tu peux pas avoir un espace dans une URL.
 
1. les valeurs doivent être urlencodées pour remplacer les caractères "spéciaux" par des valeurs échappées (genre espace par %20). urllib.urlencode fait ça
2. `<>` c'est déprécié, utiliser `!=`
3. le step 1 est la valeur par défaut de range
4. d'ailleurs elles servent à quoi tes itérations sur des range là? Pourquoi tu itères pas directement sur les fichiers?
5. utiliser `with` avec une ouverture de fichier pour s'assurer de bien le fermer
 

Citation :

ADRESSE = "%s%s %s" % ("http://www.bing.com/search?q=","PIF","HERCULE" )


Chez moi ça marche pas [:spamafote]

>>> urllib2.urlopen('http://www.bing.com/search?q=PIF HERCULE')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 410, in open
    response = meth(req, response)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request
>>>  


 

Code :
  1. with open('NOMS1.txt', 'rb') as name1:
  2.    with open('NOMS2.txt', 'rb') as name2:
  3.        for a, b in itertools.product(name1, name2):
  4.            if a == b: continue
  5.            url = 'http://bing.com/search?%s' % urllib.urlencode({'q': name1 + ' ' + name2})
  6.            response = urllib2.urlopen(urllib2.Request(address, None, headers))
  7.            result = response.read()


 
Notes que scraper les pages de cette manière me semble un bon moyen de se faire ipban rapidement. Tu ferais mieux d'utiliser les API adéquates.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2220513
erwan83
Du Shift DEL tu te méfieras !
Posté le 22-02-2014 à 23:23:30  profilanswer
 

Merci.
Je ne compte pas me faire bannir, c'est un code vite monté mais je ne veux pas faire 1 000 000 de requetes, j'en aurais pour toute une vie :)
 
Le petit code ci-dessus est-il fonctionnel ?
 
Merci pour les tuyaux en tout cas

n°2220515
masklinn
í dag viðrar vel til loftárása
Posté le 23-02-2014 à 08:07:47  profilanswer
 

Il n'est pas testé. Mais il ne devrait pas être loin de ce que j'ai compris du code d'origine: pour chaque paire (mot1, mot2) possible où mot1 != mot2, faire une recherche bing


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  PYTHON Concaténation URL entraine erreur 400

 

Sujets relatifs
[php] Stocker une variable dans l'URL.Erreur codeblocks lors de la compilation"Do you want to build it now?"
javascript : window.onerror lire le code jetant une erreurErreur 403
erreur Impossible d'obtenir la propriété 0 d'une réference null ou nonaide pour un programme en python (réception de e mails)
parse erreurProgrammation sur image avec Python
VBA : erreur d'exécution 13type erreur
Plus de sujets relatifs à : PYTHON Concaténation URL entraine erreur 400


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR