Python 爬虫问卷星填写

Python 爬虫问卷星填写

​ 因为一些没必要的问卷作业,需要一批问卷数据。尝试用Python实现问卷星的问卷填写,参考了目前网络上的Python问卷星的填写,貌似很多漏洞已经修复了。12月时,基本上爬虫的方式来批量填写已经不能完成。但是,既然有了问题还是要解决的。

以下是目前网络上流传的方式

1、利用Python + selenium 实现模拟浏览器

参考:https://blog.csdn.net/yan_star/article/details/89848105

  • 成果:可以实现浏览器的正常打开,并能够实现问卷的输入

  • 问题:在提交时候会出现智能验证码,貌似问卷星会检测是否为爬虫,尝试过加入header参数,目前无法解决。

在这里插入图片描述

2、传统构建 post 请求,通过参数传递的方式进行填写

参考:https://www.jianshu.com/p/34961ceedcb4

  • 成果:可以实现网页链接的构建,但是请求失败

  • 问题:目前问卷星添加了更多的验证参数,导致数据请求失败(22表示请求失败

    image-20201211160328211

​ 这里写一下主要的参数改变,通过抓取问卷星实际的POST请求进行测试,筛查掉一些没有必要的参数外,主要参数包括以下几个:

param = {
    "jqpram":"?",
    "jqsign":"%3F6%3Fc%3Ed37%2B0%6040%2B23%3Eg%2B%3F223%2Bdd0%3F5025cc52",# 可以根据ktimes 和 jqnonce 生成
    "jqnonce":"可以直接问卷链接请求中获取,生成jqsign",# 
    "starttime":"请求时间,可以直接问卷链接请求中获取",
    "curID":"问卷星的编码值,可以直接问卷链接请求中获取",
    "submittype":1,# 问卷类型,一般为 1
    "rn":3673390564,
    "sd":"http%3A%2F%2Fwww.wjx.cn%2F" # 默认值
    "ktimes":15 # 完成时间
    "rn":"从请求中获取,相较之前发生变化,只保留前半部分"
}

​ 相较之前博主写的,目前post请求已经发了一部分变化,其中最主要的变化在于添加了 jqpram,参数,这个参数我在请求中查找了一段时间,最终放弃了通过手动来生成,原因是,给出的js代码全是密文,应该经过问卷星加密后的,目前暂时没办法读,链接附上,感兴趣的可以尝试一下。

image-20201211161346691

解决方案

​ 既然按照传统的爬虫,行不通,有需要批量的填写,怎么办呢?那直接使用原链接试一试(貌似也不算是正规的爬虫了)。方法如下

  • 首先,需要通过浏览器的开发者工具,获取当前需要填写的问卷的post请求链接,(跳转貌似很快,注意使用浏览器的暂停功能,防止链接被刷掉),(点击提交,再点击浏览器的红色按钮,暂停浏览器)

    image-20201211162140353

    image-20201211162748593

  • 得到 URL,填写post请求参数,格式如下

    • " 题目编号"+”$"+“题目选项(多选采用 | 分隔)”+“}"
    • 1$4}2$2}3$1|3|4}4$3}5$3}6$1}7$3}8$4}9$3}10$1}11$2}12$1|2|4}13$1|2|3|4}14$1|2|3|4}15$1|2|3|4
  • 最后就是愉快的发送请求了,采用最简单post请求方式即可

  • response = requests.post(url=post_url, data=data, headers=header) ,这样也可以根据需要填写,headers,和 cookie参数,但是好像没有也问题不大,(当然最好还是要有的)

  • 目前测试过,问卷星貌似不会封 ip,但是会限制一定时间的请求数量,最好请求一次后,sleep 一会再进行请求,一般100张的问卷需要半小时左右。

  • 当然,为了提高效率,可以采用多个 种子URL,同时进行请求,貌似也是可以的

​ 大概解决方案就是这样,当然,这不是最好的解决办法,而且,比较机械,本人能力有限,这大概时目前找到的可行的解决办法。

!!python写问卷星,只是权宜之计,好孩子还是不要学的

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值