2013-07-07 16 views
17

Ich habe Fragen gesehen, wie dies viele, viele Male gefragt, aber keine sind hilfreichzu einem Web-Formular einreichen Python mit

Im Versuch, Daten über das Web-ive zu einem Formular einreichen Anfragen versucht, und urllib und kein

gearbeitet haben

zum Beispiel hier ist der Code, der für die [python] Tag auf SO 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 

noch, wenn ich es laufen ich die html soure der Homepage

bekommen

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 

dasselbe Ergebnis! Ich verstehe nicht, warum diese Methoden nicht funktionieren Ich habe sie auf verschiedenen Websites ohne Erfolg versucht, also wenn jemand dies erfolgreich getan hat, bitte zeigen Sie mir wie!

Vielen Dank!

+0

Klingt wie ein Job für [tag: mechanize-python]! – Johnsyweb

+0

yeah krank check das aus, aber ich frage mich immer noch, warum diese nicht funktionieren !? – Serial

Antwort

19

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

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

Dies wird https://stackoverflow.com/?q=%5Bpython%5D verlangen, was nicht ist, was Sie sind Auf der Suche nach.

Sie wollen wirklich POST zu einer Form. Versuchen Sie folgendes:

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

Dies ist im Wesentlichen die gleiche wie GET -ting https://stackoverflow.com/questions/tagged/python, aber ich denke, dass Sie die Idee von diesem erhalten.

+2

wow, dass tatsächlich gearbeitet habe ich versuchte viel Bu ich wusste nicht, warum ich es nicht bekommen konnte danke! – Serial

+1

Arbeitete für mich. Danke – MegaBytes

9
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 macht eine POST-Anfrage mit den in den Werten angegebenen Daten. Wir benötigen urlib, um die URL zu codieren und dann urllib2, um eine Anfrage zu senden.

+0

Das ist genau das Gleiche wie das, was das op hat ... – KindaTechy

0

Mechanisierung Bibliothek von Python ist auch großartig, so dass Sie sogar Formulare senden können. Sie können den folgenden Code verwenden, um ein Browserobjekt zu erstellen und Anforderungen zu 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 
Verwandte Themen