可以根据字段的类型(例如TextControl,TextareaControl)选择一个表单字段吗?

时间:2010-06-26 04:19:07

标签: python html regex mechanize

我正在尝试使用mechanize解析html表单。表单本身有任意数量的隐藏字段,字段名称和id是随机生成的,所以我没有明显的方法来直接选择它们。显然,使用名称或ID是不合适的,并且由于隐藏字段的随机数量,我无法根据序列号选择它们,因为它总是会改变。

但是,总是有两个TextControl字段紧接着,然后在下面是TextareaControl。这些是我需要访问的3个字段,基本上我需要解析它们的名字,一切都很好。我一直在查看过去几个小时的机械化文档,并且没有提出任何似乎能够做到这一点的事情,无论它看起来多么简单(无论如何)。

我提出了一个替代解决方案,其中包括创建表单控件列表,迭代它以查找包含字符串'Text'的控件,返回新列表,然后最后使用它来删除名称一个正则表达式。虽然这样做似乎没必要,但我想知道是否有更优雅的解决方案。谢谢你们。

编辑:如果有人好奇的话,这就是我目前要提取的信息。我想我可能只会坚持这一点。这似乎是不必要的,但它完成了工作,而且没有什么密集,所以我不担心效率或任何事情。

def formtextFieldParse(browser):
 '''Expects a mechanize.Browser object with a form already selected. Parses 
 through the fields returning a tuple of the name of those fields. There 
 SHOULD only be 3 fields. 2 text followed by 1 textarea corresponding to 
 Posting Title, Specific Location, and Posting Description'''
 import re
 pattern = '\(.*\)'
 fields = str(browser).split('\n')
 textfields = []
 for field in fields:
     if 'Text' in field: textfields.append(field)
 titleFieldName = re.findall(pattern, textfields[0])[0][1:-2]
 locationFieldName = re.findall(pattern, textfields[1])[0][1:-2]
 descriptionFieldName = re.findall(pattern, textfields[2])[0][1:-2]

1 个答案:

答案 0 :(得分:1)

我认为mechanize不具备您所需的确切功能;您可以使用mechanize获取HTML页面,然后使用BeautifulSoup解析后者吗?