sar*_*ple 6 html python parsing beautifulsoup html-parsing
我的目标是获取所有输入名称和值的列表.将它们配对并提交表格.名称和值是随机的.
from bs4 import BeautifulSoup # parsing
html = """
<html>
<head id="Head1"><title>Title Page</title></head>
<body>
<form id="formS" action="login.asp?dx=" method="post">
<input type=hidden name=qw1NWJOJi/E8IyqHSHA== value='gDcZHY+nV' >
<input type=hidden name=sfqwWJOJi/E8DFDHSHB== value='kgDcZHY+n' >
<input type=hidden name=Jsfqw1NdddfDDSDKKSL== value='rNg4pUhnV' >
</form>
</body>
</html>
"""
html_proc = BeautifulSoup(html)
Run Code Online (Sandbox Code Playgroud)
这个位工作正常:
print html_proc.find("input", value=True)["value"]
> gDcZHY+nV
Run Code Online (Sandbox Code Playgroud)
但是,以下陈述不起作用或不起作用:
print html_proc.find("input", name=True)["name"]
> TypeError: find() got multiple values for keyword argument 'name'
print html_proc.findAll("input", value=True, attrs={'value'})
> []
print html_proc.findAll('input', value=True)
> <input name="qw1NWJOJi/E8IyqHSHA==" type="hidden" value="gDcZHY+nV">
> <input name="sfqwWJOJi/E8DFDHSHB==" type="hidden" value="kgDcZHY+n">
> <input name="Jsfqw1NdddfDDSDKKSL==" type="hidden" value="rNg4pUhnV">
> </input></input></input>, <input name="sfqwWJOJi/E8DFDHSHB==" type="hidden"
> value="kgDcZHY+n">
> <input name="Jsfqw1NdddfDDSDKKSL==" type="hidden" value="rNg4pUhnV">
> </input></input>, <input name="Jsfqw1NdddfDDSDKKSL==" type="hidden" value="rNg4p
> UhnV"></input>
Run Code Online (Sandbox Code Playgroud)
ale*_*cxe 18
您无法提交表单BeautifulSoup,但以下是如何获取名称,值对的列表:
print [(element['name'], element['value']) for element in html_proc.find_all('input')]
Run Code Online (Sandbox Code Playgroud)
打印:
[('qw1NWJOJi/E8IyqHSHA==', 'gDcZHY+nV'),
('sfqwWJOJi/E8DFDHSHB==', 'kgDcZHY+n'),
('Jsfqw1NdddfDDSDKKSL==', 'rNg4pUhnV')]
Run Code Online (Sandbox Code Playgroud)
d = {e['name']: e.get('value', '') for e in html_proc.find_all('input', {'name': True})}
print(d)
Run Code Online (Sandbox Code Playgroud)
打印:
{'sfqwWJOJi/E8DFDHSHB==': 'kgDcZHY+n',
'qw1NWJOJi/E8IyqHSHA==': 'gDcZHY+nV',
'Jsfqw1NdddfDDSDKKSL==': 'rNg4pUhnV'}
Run Code Online (Sandbox Code Playgroud)
在@alecxe的基础上,这可以避免KeyErrors,并将表单解析为字典,为请求做好准备.
url = 'http://example.com/' + html_proc.form['action']
requests.post(url , data=d)
Run Code Online (Sandbox Code Playgroud)
虽然如果这变得更复杂(cookie,脚本),你可能想要机械化.
TypeError的原因是第一个参数混淆了find()是'name'.相反html_proc.find("input", attrs={'name': True}).同样对于attrs参数,而不是set {'value'}使用字典{'value': True}.
| 归档时间: |
|
| 查看次数: |
14313 次 |
| 最近记录: |