2010-06-26 27 views
1

我想解析一个使用机械化的HTML表单。表单本身具有任意数量的隐藏字段,并且字段名称和ID是随机生成的,所以我没有明显的方式直接选择它们。很明显,使用名称或ID是不可能的,并且由于隐藏字段的随机数,我不能根据序列号选择它们,因为它总是也会改变。基于字段的类型(例如TextControl,TextareaControl),可以使用机械化来选择一个表单吗?

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

我想出了一个替代解决方案,它包括制作表单控件的列表,迭代通过它来查找包含字符串“文本”的控件,返回这些列表的新列表,然后最终剥离出名称使用正则表达式。虽然这工作似乎没有必要,我想知道是否有一个更优雅的解决方案。多谢你们。

编辑:这是我目前正在做的提取该信息,如果任何人的好奇。我想我可能会坚持这一点。这看起来没有必要,但它完成了工作,没有任何密集的东西,所以我不担心效率或任何事情。

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

听起来就像你试图制作一个机器人来击败常见的不引人注目的反注入技术 – 2010-06-26 04:57:21

+0

我不知道你是否认为它是一个机器人,但我只是想做一个程序来管理我的craigslist广告,因为我总是忘记重新发布它们。我不会滥发或滥用任何东西(尽管我承认我很可能违反了tos),我只是为我的业务运营常规广告,偶尔会在那里卖东西。 – kryptobs2000 2010-06-26 05:32:01

回答

1

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

+0

啊,非常感谢。我可能不会为这个项目研究它,因为它花费了足够长的时间来学习机械化(真的不是那么长时间,但它是我迄今为止真正学会使用的第一个未包含的库)。根据我接下来做什么,我可能会探索它。 – kryptobs2000 2010-06-26 05:24:36

相关问题