J'ai vu des questions comme celle-ci posées plusieurs fois mais aucune n'est utile
J'essaie de soumettre des données à un formulaire sur le Web, cinq demandes ont été essayées, et urllib et aucune n'ont fonctionné
par exemple, voici le code qui devrait rechercher la balise [python] sur SO:
import urllib
import urllib2
url = 'http://stackoverflow.com/'
# Prepare the data
values = {'q' : '[python]'}
data = urllib.urlencode(values)
# Send HTTP POST request
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
html = response.read()
# Print the result
print html
pourtant, quand je l'exécute, je reçois le code HTML de la page d'accueil
voici un exemple d'utilisation des requêtes:
import requests
data= {
'q': '[python]'
}
r = requests.get('http://stackoverflow.com', data=data)
print r.text
même résultat! Je ne comprends pas pourquoi ces méthodes ne fonctionnent pas. Je les ai essayées sur divers sites sans succès. Si quelqu'un a réussi à le faire, montre-moi comment!
Merci beaucoup!
Si vous souhaitez passer q
en tant que paramètre dans l'URL à l'aide de requests
, utilisez l'argument params
et non pas data
(voir Passing Parameters In URLs ):
r = requests.get('http://stackoverflow.com', params=data)
Ceci demandera https://stackoverflow.com/?q=%5Bpython%5D , ce qui n'est pas ce que vous recherchez.
Vous voulez vraiment POST
en un form. Essaye ça:
r = requests.post('https://stackoverflow.com/search', data=data)
Ceci est essentiellement identique à GET
-ting https://stackoverflow.com/questions/tagged/python , mais je pense que vous en aurez une idée.
import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
values = {'name' : 'Michael Foord',
'location' : 'Northampton',
'language' : 'Python' }
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
Cela crée une demande POST avec les données spécifiées dans les valeurs. Nous avons besoin d’urllib pour encoder l’url puis urllib2 pour envoyer une requête.
Mécaniser la bibliothèque à partir de python est également très utile, vous permettant même de soumettre des formulaires. Vous pouvez utiliser le code suivant pour créer un objet de navigateur et créer des demandes.
import mechanize,re
br = mechanize.Browser()
br.set_handle_robots(False) # ignore robots
br.set_handle_refresh(False) # can sometimes hang without this
br.addheaders = [('User-agent', 'Firefox')]
br.open( "http://google.com" )
br.select_form( 'f' )
br.form[ 'q' ] = 'foo'
br.submit()
resp = None
for link in br.links():
siteMatch = re.compile( 'www.foofighters.com' ).search( link.url )
if siteMatch:
resp = br.follow_link( link )
break
content = resp.get_data()
print content