Soumettre à un formulaire Web en utilisant python
j'ai vu des questions comme celles-ci posées de nombreuses fois mais aucune n'est utile
J'essaie de soumettre des données à un formulaire sur le web j'ai essayé des requêtes, et urllib et aucun 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 la source html de la page d'accueil
voici un exemple d'utilisation de 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 les méthodes ne fonctionnent pas je les ai essayés sur divers sites avec aucun succès donc si quelqu'un a réussi ceci s'il vous plaît me montrer comment!
Merci beaucoup!
3 réponses
si vous voulez passer q
comme paramètre dans L'URL en utilisant requests
,params
argument, et non data
(voir Passer Les Paramètres Dans Les URLs):
r = requests.get('http://stackoverflow.com', params=data)
demande https://stackoverflow.com/?q=%5Bpython%5D , ce qui n'est pas ce que vous cherchez.
Vous voulez vraiment POST
formulaire. Essayez ceci:
r = requests.post('https://stackoverflow.com/search', data=data)
C'est essentiellement la même que GET
-ting https://stackoverflow.com/questions/tagged/python , mais je pense que vous aurez l'idée de ce.
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()
ceci fait une requête POST avec les données spécifiées dans les valeurs. nous avons besoin d'urllib pour encoder l'url et ensuite d'urllib2 pour envoyer une requête.
mécaniser la bibliothèque à partir de python est également grand vous permettant de soumettre même des formulaires. Vous pouvez utiliser le code suivant pour créer un objet de navigateur et créer des requêtes.
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