2013-07-07 13 views
17

Widziałem pytania jak to poproszony wiele razy, ale nikt nie jest pomocnyPrzesyłanie do formularza internetowego przy użyciu Pythona

Im próbuje przesłać dane do formularza na ive internetowej próbował żądań i urllib i żaden z nich nie pracował

na przykład tutaj jest kod, który należy wyszukać [python] znacznikiem na 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 

jeszcze kiedy go uruchomić i uzyskać Soure HTML na stronie głównej

tutaj jest przykładem użycia żądania:

import requests 

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

print r.text 

sam wynik! Nie rozumiem, dlaczego te metody nie działają, próbowałem ich na różnych stronach bez powodzenia, więc jeśli ktoś zrobił to z powodzeniem, pokaż mi jak!

Dziękuję bardzo!

+0

Brzmi jak zadanie dla [tag: mechanize-python]! – Johnsyweb

+0

Tak, źle to sprawdzam, ale wciąż się zastanawiam, dlaczego to nie zadziała !? – Serial

Odpowiedz

19

Jeśli chcesz przekazać q jako parametr w adresie URL, używając requests użyj params argument nie data (patrz Passing Parameters In URLs):

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

to poprosi https://stackoverflow.com/?q=%5Bpython%5D, co nie jest, kim jesteś szukam.

Naprawdę chcesz POST do formie. Spróbuj tego:

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

ta jest zasadniczo taka sama jak GET -ting https://stackoverflow.com/questions/tagged/python, ale myślę, że masz pomysł z tego.

+2

wow, które faktycznie działało, próbowałem wielu bu nie wiedziałem, dlaczego nie mogłem dostać to dzięki! – Serial

+1

Pracowałem dla mnie. Dzięki – 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() 

Spowoduje to utworzenie żądania POST z danymi określonymi w wartościach. potrzebujemy urllib, aby zakodować adres URL, a następnie urllib2, aby wysłać żądanie.

+0

To jest dokładnie to samo, co op ma ... – KindaTechy

0

Mechanize biblioteka z Pythona jest również świetna, umożliwiając nawet przesyłanie formularzy. Poniższego kodu można użyć do utworzenia obiektu przeglądarki i tworzenia żądań.

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