打开Python爬虫实战练习页面网页表单爬取(RPA初阶)_N06_Spiderbuf,可以看到页面是由一些常见的表单控件组成的,有些表单控件有值,有些没有。
网页表单通常由标签 <form> 标签对包含起来,按照HTML5的标准,表单控件通常有text、email、password、url、number、range、Date pickers (date, month, week, time, datetime, datetime-local)、search、color、tel、textarea等组成,大部分是以 <input>标签包含,由属性type控件类型,如:
<form>
<input type="text" name="username" value="spiderbuf" /><!-- 这里是文本 -->
<input type="email" name="email" value="test@spiderbuf.cn" /><!-- 这里是邮箱 -->
<input type="password" name="password" /><!-- 这里是密码-->
...
</form>
其中的 name 属性值是必须的且是唯一的,要不然表单提交时将不会出现在 payload 里面,从而无法提交到后台。所以要获取表单的值,最好的方法就是根据 name 属性值定位,然后获取该控件的 value 属性的值。
# 以下是获取 input name 属性的代码
attr_name = input.attrib['name'] if 'name' in input.attrib else ''
通过 xpath 表达式 //input 就能获取到所有 input 元素,然后遍历解析 name 属性及获取 value 属性值。
root = etree.HTML(html)
inputs = root.xpath('//input')
for input in inputs:
attr_name = input.attrib['name'] if 'name' in input.attrib else ''
特殊的控件有选项类,是由 <select> 标签包含的,需要在 input 列表外单独处理。
RPA(流程自动化机器人)除了要能读取表单数据外,还需要写入,同样是通过操作 input 等控件的 value 属性值来进行。
完整示例代码:示例代码