tags:

views:

69

answers:

3

Hello, how i can get input from the html forms. To receive such dictionary:

form = [('name' = 'somename', 'type' = 'text', 'value':''},{' name' = 'somename', 'type' = 'submit', 'value': ' submit ').

Sorry for my English.

+1  A: 

Look at mechanize, lxml.html and BeatifulSoup.

Ivo van der Wijk
BeautifulSoup is discontinued. Better not to mention.
OTZ
`BeautifulSoup` is also much slower than `lxml.html`
Tim McNamara
+2  A: 

Hi Derek, you probably wont be able to retrieve form data from other users on other sites. If you wish to use a script to send data to a form, mechanize is one tool that makes this quite easy.

Tim McNamara
Thanks for the answer, but forms unfortunately not static and each time different, therefore is necessary the full analysis.In mechanize it will be not absolutely convenient.
Artyom
In that case, use lxml.html to parse the document, find form and input tags (possibly using xpath queries), and so on.
Ivo van der Wijk
Derek, surely the forms are being generated using the `<form>` tag. This should be all that you need to get started. If the forms are indeterministic, no script will be able to assist you. If you mean the forms are generated by client-side JavaScript, then browser automation may help.
Tim McNamara
+1  A: 

Yeah mechanize is sweet !

import mechanize

# Browser
br = mechanize.Browser()
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

# we inspect the all form element in the http://stackoverflow.com
br.open('http://stackoverflow.com')
for form in br.forms():
    print form
Gunslinger_