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!

19
demandé sur Serial 2013-07-07 09:41:23

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 POSTformulaire. 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.

24
répondu Johnsyweb 2017-05-23 12:18:04
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.

11
répondu Rashid Feroz 2015-01-21 19:30:18

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
0
répondu Harsh Gupta 2017-07-15 11:34:43