webentwicklung-frage-antwort-db.com.de

Senden an ein Webformular mit Python

Ich habe Fragen wie diese oft gesehen, aber keine sind hilfreich

Ich versuche, Daten an ein Formular im Web zu senden. Ich habe versucht, Anfragen zu beantworten, und urllib und keiner hat funktioniert

hier ist zum Beispiel Code, der auf SO nach dem Tag [python] suchen soll:

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

aber wenn ich es laufen lasse, bekomme ich die HTML-Quelle der Homepage

hier ist ein Beispiel für die Verwendung von Anfragen:

import requests

data= {
    'q': '[python]'
    }
r = requests.get('http://stackoverflow.com', data=data)

print r.text

gleiches Ergebnis! Ich verstehe nicht, warum diese Methoden nicht funktionieren. Ich habe sie auf verschiedenen Seiten ohne Erfolg ausprobiert. Falls dies erfolgreich war, zeigen Sie mir bitte wie!

Vielen Dank! 

21
Serial

Wenn Sie q als Parameter in der URL mit requests übergeben möchten, verwenden Sie das Argument params, nicht data (siehe Parameter in URLs übergeben ):

r = requests.get('http://stackoverflow.com', params=data)

Dadurch wird https://stackoverflow.com/?q=%5Bpython%5D angefordert. Dies ist nicht das, wonach Sie suchen.

Sie möchten wirklich POST zu einem form. Versuche dies:

r = requests.post('https://stackoverflow.com/search', data=data)

Dies ist im Wesentlichen dasselbe wie GET -ting https://stackoverflow.com/questions/tagged/python , aber ich denke, dass Sie die Idee davon bekommen.

29
Johnsyweb
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()

Dies führt zu einer Anforderung von POST mit den in den Werten angegebenen Daten. Wir benötigen urllib, um die URL zu kodieren, und dann urllib2, um eine Anfrage zu senden.

11
Rashid Feroz

Die Bibliothek zum Erstellen von Bibliotheken aus Python ist auch großartig, sodass Sie sogar Formulare einreichen können. Mit dem folgenden Code können Sie ein Browserobjekt und Anforderungen erstellen.

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
Harsh Gupta