html里多个form时, 取出form跟它下面的所有指定类型的input元素?

#coding=utf-8
from lxml import etree
html = '''
<html>
  <body>
    <a href="http://www.baidu.com/" target="_blank">91wan游戏</a>
<form action="/find.do">
<span class="s_ipt_wr">
<input type="text" name="wd" id="kw" maxlength="100" class="s_ipt" autocomplete="off">
</span>
<input type="hidden" name="rsv_bp" value="0">
<div>
<span>
<input type="hidden" name="ie" value="utf-8">
<div>
<input type="text" name="wd" id="kw" maxlength="100" class="s_ipt" autocomplete="off">
</div>
</span>
</div>
<div class="s_btn_wr">
<input type="submit" value="百度一下" id="su" class="s_btn" onmousedown="this.className='s_btn s_btn_h'" onmouseout="this.className='s_btn'">
</div>
<span class="s_btn_wr">
<input type="submit" value="百度一下" id="su" class="s_btn" onmousedown="this.className='s_btn s_btn_h'" onmouseout="this.className='s_btn'">
</span>
<div id="sd_1363580690288" style="display: none;"></div>
</form>
<form name="f" action="/search.do">
<span class="s_ipt_wr">
<input type="text" name="wd" id="kw" maxlength="100" class="s_ipt" autocomplete="off">
</span>
<input type="hidden" name="rsv_bp" value="0">
<div>
<span>
<input type="hidden" name="ie" value="utf-8">
<div>
<input type="text" name="wd" id="kw" maxlength="100" class="s_ipt" autocomplete="off">
</div>
</span>
</div>
</form>
  </body>
</html>
'''
page = etree.HTML(html.lower().decode('utf-8'))
def getEle(page, xpath):
inputHiddenInForms = page.xpath(xpath)
print "size: " + `len(inputHiddenInForms)`
for input in inputHiddenInForms:
print input.attrib
print"text>>>>>>>>>"
getEle(page, u"//form//input[@type='text' or @type='hidden']");

上面的Python代码, 只能取到form下所有的input标签(text或hidden类型的), 但怎么把input外面的form也取出来呢? 要对应关系?
现在我用下面的方式拿到了, 不过感觉有些绕:

page = lxml.html.fromstring(html.lower().decode('utf-8'));
forms = page.forms
print "size: " + `len(forms)`
dir = {}
for f in forms:
actionName = f.action
# print actionName
formHTMlContent = tostring(f)
# print formHTMlContent
page = etree.HTML(formHTMlContent)
inputs = page.xpath(u"//form//input[@type='text' or @type='hidden']")
# dir.put(actionName, inputs)
# dir.update({actionName, inputs})
dir['"'+actionName+'"'] = inputs
#print str(dir)
for k, v in dir.iteritems():
print "action value: " + k
for input in v:
print "input " + str(input.attrib["name"])

大家看, 有没有更简单的方式?

那要看你submit哪个form罗。

如果你要传回下面的form的input的话,你应该submit下面的form,不是上面的。

如果你要submit上面的form的时候,一拼把下面的form的资料也一起传回,那你得用javascript帮忙,不是单单靠python就可以做得到。在submit上面的form的时候,你要先用javascript把下面的form的input value抄写一份到上面的form,然後submit时,所有资料都会齐全追问

多谢啦。

不过, 这里边没有JavaScript和浏览器的什么事, 完全是用Python语言解析了。

追答

就是这个问题,就是因为你只用python才有问题

python是server side运作的,而javascript是client side运作的。每一次submit form的时候,就是要从client side传回资给server side。现在你需要的是从client side收集好资料後才submit到server side。你单单用python,在server side那边是帮不了什麼忙

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-19
不太懂这个

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网