Python客户端格式错误

Python客户端格式错误,python,clientform,Python,Clientform,导入客户端表单 从urllib2导入urlopen page = urlopen('http://garciainteractive.com/blog/topic_view/topics/content/') form = ClientForm.ParseResponse(page, backwards_compat=False) print form[0] 问题在于ClientForm以以下方式解析第一个html表单: <POST http://garciainteractive.co

导入客户端表单 从urllib2导入urlopen

page = urlopen('http://garciainteractive.com/blog/topic_view/topics/content/')
form = ClientForm.ParseResponse(page, backwards_compat=False)
print form[0]
问题在于ClientForm以以下方式解析第一个html表单:

<POST http://garciainteractive.com/blog/topic_view/topics/content/ application/x-www-form-urlencoded
  <HiddenControl(ACT=1) (readonly)>
  <HiddenControl(RET=http://garciainteractive.com/blog/topic_view/topics/content/) (readonly)>
  <HiddenControl(URI=/blog/topic_view/topics/content/) (readonly)>
  <HiddenControl(PRV=) (readonly)>
  <HiddenControl(XID=d840927d4eaf95cef7aeca789009fb3991f574da) (readonly)>
  <HiddenControl(entry_id=42) (readonly)>
  <HiddenControl(site_id=1) (readonly)>
  <CheckboxControl(save_info=[yes])>
  <CheckboxControl(notify_me=[yes])>
  <TextControl(captcha=)>
  <SubmitControl(submit=Submit) (readonly)>>

因此,无法找到
名称
电子邮件
url
输入。我怎样才能修好它?短暂性脑缺血发作


更新:事实上,我不是单独使用ClientForm,而是作为mechanize的一部分,因此我更喜欢一种解决方案,允许在不重写mechanize代码的情况下进行修复。问题可能是HTML本身无效-例如,它反复使用id=“comment\u form”,而每个文档只应该有一个给定名称的id

您最好的解决方案可能是首先使用BeautifulSoup解析您的urlopen页面结果,然后将其漂亮地打印回ClientForm的字符串中——这可能会消除大多数粗糙的边缘,并为ClientForm提供更好的执行操作的机会


如果这不起作用,请将结果打印出来,并确定您必须对HTML进行何种转换,以使表单对于ClientForm非常简单-通过删除无关的标记和积垢。

正如Richard建议的那样使用BeautifulSoup

from BeautifulSoup import BeautifulSoup, SoupStrainer
from StringIO import StringIO
from urllib2 import urlopen
import ClientForm

url='http://garciainteractive.com/blog/topic_view/topics/content/'           

html=urlopen(url).read()
forms_filter=SoupStrainer('form',id="comment_form")
soup = BeautifulSoup(html,parseOnlyThese=forms_filter)
forms = ClientForm.ParseFile(StringIO(soup),"", backwards_compat=False)
forms[0]['name']='Kalmi'
forms[0]['email']='kalmi@..com'

感谢您提供的有用答案,请查看我发布到原始问题的更新