问卷调查 批量模拟真人填写 爬虫 实战

前言

放暑假之前学校布置了社会实践任务,需要填写问卷调查,这是个麻烦事,被我一直拖到临近开学。昨天在deadline的神圣力量下我终于开始了,但是我努力的在淘宝中逛了一圈后发现代填问卷平均一元一份,这能忍?忍不了啊,于是有了这篇文章。该篇文章主要研究的是模拟真人填写问卷,详情见下文。


抓包

该问卷调查总共分为两种题型,单选题和多选题,其中一道题的截图如下:

在这里插入图片描述

作答该题时抓到的包如下

请求头:

在这里插入图片描述

请求体:

在这里插入图片描述

响应体:

在这里插入图片描述

现在我们来分析一下抓包的结果,在请求头中,x-uuid和cookie是发生变化的,每次问卷调查结束后都会发生变化,在请求体中,id也是在每次问卷调查结束后变化,answer里面则代表着我选择的选项,其它的没有变化,响应体则表示着下一个问题的内容。

由以上的分析,我们需要着重关注的是x-uuid、cookie和请求体里的id

获取cookie

我们首先来获取cookie,第一步就要找到设置cookie的包,如下:

在这里插入图片描述

这里没有什么需要关注的字段,直接进行调用并获取响应的cookie,如下:

在这里插入图片描述


获取x-uuid

拿到cookie后就要获取x-uuid,这里需要逆向js代码,先定位到生成位置

在这里插入图片描述

在这里插入图片描述

可以看到最终是gl函数生成了x-uuid,不过里面传入了两个参数,分别是Vl(new Date)和Math.random(),我先用控制台测试一下:

在这里插入图片描述

可以看到Vl(new Date)是获取了当前的时间并格式化了一下,Math.random()是获取了随机数,gl(t,n)是把传入的数据进行了加密,现在先来观察一下加密后的结果:32位的十六进制数,因此我首先猜想的是MD5,传入的时间是明文,而随机数是盐,让我们来验证一下猜想

在这里插入图片描述

发现这样对不上,但是当我把随机数删去后,运气就来了

在这里插入图片描述

原来gl函数是直接把时间进行了MD5,那么就可以很简单的获取x-uuid,如下:

在这里插入图片描述


获取id

请求头的参数搞定之后,我们需要获取请求体里的id,这里在抓的包里找到其生成位置,如下:

在这里插入图片描述

那么好了,我只需要发起请求并在响应体里获取id就行了,代码如下:

在这里插入图片描述


模拟真人填写问卷

现在我们需要获取的字段已经全部拿到,下面就可以模拟填写问卷了,该部分主要对请求体里面的answer进行下手

单选:

在这里插入图片描述

多选:

在这里插入图片描述

经过上面的拆解分析,请求体其实并不难拼接,主要的问题是爬虫程序应该如何选择选项,以具有真人的不确定性以及合理性,其实并不难,利用概率就能够轻松的解决

比如选择男女,代码如下:

在这里插入图片描述

在上面的代码中,我生成了从0到99的数组,然后随机生成一个数字,假设选择男生的概率为60%,那么我只需要当随机数在0到60的范围内选择男生就行了,不论是单选还是多选,都是这个思路,只不过要注意的是多选的时候,各个选项之间是相互独立的,因此需要为每一个选项都生成一个随机数,并分别指定概率,如下:

在这里插入图片描述


输出反馈结果

虽然现在已经可以运行程序自动填写问卷了,但我们还需要知道是否填写成功,关键信息再最后一个包中

在这里插入图片描述

因此我们只需要筛选出这个字符串就行了,如下:

在这里插入图片描述


运行效果

现在程序写完了,让我们先填个400张问卷看看效果૮ ˆﻌˆ ა

在这里插入图片描述

在这里插入图片描述

perfect

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值