2010-08-22 96 views
2

如何从其他网站上的html表单获得输入? 我希望它返回一个字典,如:Python,解析html表格

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

对不起,我的英语水平。

+0

你想解析一个HTML文件(可能从'urllib.urlopen'-url返回),或者这是一些基于Django的东西? – Stephen 2010-08-22 10:27:14

+0

我尝试从其他网站解析表单。 – Artyom 2010-08-22 10:29:28

回答

1

看看mechanize,lxml.html和BeatifulSoup。

+2

BeautifulSoup已停产。最好不要提。 – OTZ 2010-08-22 10:36:45

+0

'BeautifulSoup'也比'lxml.html' – 2010-08-22 22:42:13

+1

更新(2014)慢得多,美丽的汤显然没有停产。 – ajm475du 2014-11-17 01:13:13

3

您可能无法从其他网站上的其他用户检索表单数据。如果您希望使用脚本将数据发送到表单,则mechanize是一个使其非常容易的工具。

+0

感谢您的回答,但不幸的是形式不是静态的,每次都不相同,因此有必要进行全面的分析。 在机械化方面它不会绝对方便。 – Artyom 2010-08-22 10:39:24

+0

在这种情况下,使用lxml.html解析文档,查找表单和输入标记(可能使用xpath查询)等等。 – 2010-08-22 10:45:05

+2

Derek,当然这些表格是使用'

'标签生成的。这应该是您开始所需的一切。如果这些表格是不确定的,那么脚本将无法为您提供帮助。如果您的意思是表单由客户端JavaScript生成,那么浏览器自动化可能会有所帮助。 – 2010-08-22 22:44:41

1

是机械化是甜的!

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