【问题标题】:Python, parse html formPython,解析html表单
【发布时间】:2011-04-02 06:00:08
【问题描述】:

如何从其他网站的 html 表单中获取输入? 我希望它返回一个字典,例如:

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

对不起我的英语。

【问题讨论】:

  • 您是在尝试解析 HTML 文件(可能从 urllib.urlopen-ing url 返回),还是这是一些基于 Django 的东西?
  • 我尝试从其他网站解析表单。

标签: python html forms


【解决方案1】:

看看 mechanize、lxml.html 和 BeatifulSoup。

【讨论】:

  • BeautifulSoup 已停产。最好不要提。
  • BeautifulSoup 也比lxml.html 慢很多
【解决方案2】:

您可能无法从其他网站上的其他用户那里检索表单数据。如果您希望使用脚本将数据发送到表单,mechanize 是一种使这变得非常简单的工具。

【讨论】:

  • 感谢您的回答,但不幸的是表格不是静态的并且每次都不同,因此有必要进行全面分析。在机械化方面不是绝对方便。
  • 在这种情况下,使用 lxml.html 来解析文档,查找表单和输入标签(可能使用 xpath 查询)等等。
  • Derek,这些表单肯定是使用<form> 标签生成的。这应该是您开始所需的全部内容。如果表格是不确定的,则没有脚本可以帮助您。如果您的意思是表单是由客户端 JavaScript 生成的,那么浏览器自动化可能会有所帮助。
【解决方案3】:

是的,机械化很可爱!

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 2011-09-13
    • 2012-11-25
    • 2011-06-21
    • 1970-01-01
    • 2013-12-23
    • 2017-03-03
    • 2010-12-07
    相关资源
    最近更新 更多