我正在尝试使用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]
答案 0 :(得分:1)
我认为mechanize
不具备您所需的确切功能;您可以使用mechanize
获取HTML页面,然后使用BeautifulSoup
解析后者吗?