Python爬虫自动填写调查表


作者:Harkerbest

声明:本文章为原创文章,本文章永久链接:https://www.harkerbest.cn/?p=163,转载请注明原文地址,盗版必究!!!

警告:本文章仅用于技术交流,禁止将本文章内容用于违法犯罪活动,违者后果自负!!!


  本教程也可用于Python requests使用post提交表单的教学

  随着网络化的普及,网络调查表在生活中随处可见,但是有些时候,我们每天都需要填写一些内容比较固定的调查表,比如说体温填报、健康登记等等,作为一名程序员,我们应该把这些机械的操作交给电脑,让电脑造福人类。今天小编就来教大家如何使用Python爬虫实现自动填写网络调查表。这样,我们只需要将编写好的脚本部署到服务器上就能够每天定时完成填写表格的任务了。

思路:

  一般情况下,网络调查表网站都会将你填写好的信息以表单的形式Post上去,因此我们有两种方法可以实现自动填写,一种是使用Selenium模拟操作浏览器,在填写调查表的网页上通过id等元素进行定位并找到对应的输入方框将预先设置好的内容填入,最后再模拟点击提交按钮进行提交。这种方法的优点是简单方便,如果无法通过抓包找到网站提交信息的方式,那么这是一种很好的方法,但是这种方法的缺点也很明显,就是耗时大,完成启动浏览器并填写数据至少也要10秒的时间,同时由于是可视化界面,需要很大的负载,如果是个人电脑则没有太大的影响,但是如果是在生产环境下部署,很可能会使服务器内存爆满,因此这个方法并不适合生产环境下使用。

  第二种方法,也是小编今天给大家介绍的方法,就是通过抓包找到网站提交数据时Post表单的URL地址并使用requests进行模拟提交表单,这样就能够既快捷又不占用内存地进行自动填写调查表了。下面开始今天的教程!

(一)抓包分析表单

  今天小编以某问卷网站进行演示,使用Python爬虫自动填写健康调查表。

  首先我们需要通过抓包的方式找到网站使用post方式提交数据的URL地址和提交的表单的规律。方法如下:

1.访问问卷填写页面并填写信息

  这里的信息可以随意填写,只需要记住在那个部分填写了什么就好。(如图)

%title插图%num
在网页中填写好信息

2.按F12进入开发者工具并点击Network选项

  注意:这一步一定不能调换顺序,必须在点击按钮提交信息之前进入开发者工具,否则无法抓取到数据包!!!

  首先按下F12进入开发者工具(不同浏览器可能会不同,具体可以百度),接下来选择Network选项。(如图)

%title插图%num
按F12进入开发者工具并选择Network选项

3.点击提交按钮进行提交并分析抓包数据

  点击提交按钮后可以看到右边开发者工具中出现大量请求信息(如图)

%title插图%num
开发者工具中出现大量请求信息

  一般情况下,提交数据的post请求在按钮按下的时候就会发出,因此我们从最上面开始一个一个寻找……

  经过寻找,发现在较前面有一个请求为post请求,并且post的表单(Form Data)内信息为之前填写的信息(如图),因此可以判定这一请求就是网站提交数据的请求。

%title插图%num
请求方式为Post
%title插图%num
提交表单(Form Data)内信息为之前所填写信息
%title插图%num
Requests Headers

  其中第一幅图内的Requests URL为下文需要用到的URL,第二幅图的Form Data为下文用于提交表单的内容,第三幅图的requests headers即为下文提到的(请求头)headers。

  接下来我们将利用Python使用抓取到的URL以及表单(Form Data)等信息进行模拟提交表单实现自动提交调查问卷。

(二)使用Python进行模拟提交表单

  本教程需要用到Python的requests库,如果没有安装的请在命令提示符(cmd)中键入以下命令安装:

pip install requests

1.设置URL并构造表单和请求头(headers)

import requests #导入requests库
 url='https://xxxxx.com/xxxxx'  #设置URL,其中URL为上文抓取到请求内容的Requests URL
 data={'submitdata':'xxxxxxxxx'} #设置表单,内容为上文中抓取到的Form Data,其中表单形式为Python的字典
 headers={#header内容即为上文中的requests headers,形式为Python字典,一般只需要将User-Agent和Referer填入即可
    ' User-Agent':'xxxxxxx'
    'Referer':'https://xxxxx'
     }

2.使用设置好的URL、表单和请求头提交表单

  提交表单只需要一行代码即可解决:

sourse=requests.post(url,data=data,headers=headers).text
 #其中url,data,headers均为上文设置好的内容,.text的作用是将返回的Response转化为Python的字符串,执行后返回的结果将赋值给sourse。

  执行后可以根据返回的结果自行分析提交是否成功(由于不同网站返回结果不一样,所以这里无法做分析),通常网站返回的会是下一个网页的源码或者是一个json的成功提示,具体需要自行分析。

全部代码

  这里附上全部代码,由于Python爬虫的特殊性,不同的网站可能会需要部分改动,但是方法是不变的。因此,遇到特殊情况时需要根据本文的方法去仔细琢磨,要相信自己能够解决问题!

 import requests #导入requests库
 url='https://xxxxx.com/xxxxx'  #设置URL,其中URL为上文抓取到请求内容的Requests URL
 data={'submitdata':'xxxxxxxxx'} #设置表单,内容为上文中抓取到的Form Data,其中表单形式为Python的字典
 headers={#header内容即为上文中的requests headers,形式为Python字典,一般只需要将User-Agent和Referer填入即可
    ' User-Agent':'xxxxxxx'
    'Referer':'https://xxxxx'
     }
 sourse=requests.post(url,data=data,headers=headers).text
 #其中url,data,headers均为上文设置好的内容,.text的作用是将返回的Response转化为Python的字符串,执行后返回的结果将赋值给sourse。
 print(sourse)#根据返回信息判断是否提交成功

结语:

  到这里本教程就结束了,希望能够帮到大家,如果你觉得这篇文章对你有帮助,请分享给更多需要的人,谢谢!!!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

CAPTCHAis initialing...