example - Envío a un formulario web usando python
urllib2 python 3 (3)
He visto preguntas como esta muchas veces pero ninguna es útil
Estoy tratando de enviar datos a un formulario en la web. He probado las solicitudes y urllib y ninguna han funcionado.
por ejemplo, aquí hay un código que debe buscar la etiqueta [python] en 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
sin embargo, cuando lo ejecuto obtengo el código HTML de la página de inicio
Aquí hay un ejemplo de uso de peticiones:
import requests
data= {
''q'': ''[python]''
}
r = requests.get(''http://stackoverflow.com'', data=data)
print r.text
mismo resultado No entiendo por qué estos métodos no funcionan. Los he probado en varios sitios sin éxito, así que si alguien lo ha hecho con éxito, ¡muéstrame cómo!
¡Muchas gracias!
Mecanizar biblioteca desde python también es excelente, ya que le permite incluso enviar formularios. Puede utilizar el siguiente código para crear un objeto de navegador y crear solicitudes.
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
Si desea pasar q
como un parámetro en la URL usando requests
, use el argumento params
, no los data
(vea Pasar parámetros en las URL ):
r = requests.get(''http://.com'', params=data)
Esto solicitará https://.com/?q=%5Bpython%5D , que no es lo que está buscando.
Usted realmente quiere POST
a un formulario . Prueba esto:
r = requests.post(''https://.com/search'', data=data)
Esto es esencialmente lo mismo que GET
-ting python , pero creo que obtendrás la idea de esto.
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()
Esto hace una solicitud POST con los datos especificados en los valores. necesitamos urllib para codificar la url y luego urllib2 para enviar una solicitud.