Py学习  »  python开源

用Python自动填写问卷星

夏天 • 5 年前 • 1741 次点击  

很长时间没有写爬虫相关的文章啦 这次来点干货,妈妈再也不用担心我求同学帮忙填问卷了 缘起 我想被强迫写论文的小伙伴有很多 被强迫用什么问卷调查法的小伙伴也有很多 被问卷折腾的死去活来的小伙伴当然也有很多

求爹爹告奶奶地在各大群请人帮忙填写问卷

一来别人看到这种消息的心情就和看到代购差不多 二来肯定也不会认真填写的啦

不知道你们是不是, 反正每次我填问卷都是看都不看abc 逃~ 所以我就想干脆写个小脚本来帮我填问卷好了 于是花了一个多小时搞定了

基本思路 做问卷调查的小伙伴基本上都用过:  

所以这次我就以这个平台为例子

首先是创建一个测试问卷 ?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NxYWNyaDI3OTg=,size_16,color_FFFFFF,t_70

然后随便点点,点击提交 看看都向服务器发送了什么样的包

哇 so easy,居然只是向一个地址发送了:

问卷id curlD 发送时间 t 开始答题时间 starttime 不知道什么鬼id rn 题目答案 submitdata 那模拟提交问卷的思路也就很清晰了

请求页面 就解析出什么鬼id(rn) 计算其他参数,如t、starttime 找到所有的问题,并随机做答,构造submitdata 发送请求 具体代码 更多Python课程资料请加python编程语言学习QQ群 515267276”, 即可免费获得精品课程资料哦! 最主要的就两个部分

找到什么鬼ID rn

def parse_post_url(resp): ''' 解析出提交问卷的url ''' # 找到rn rn = int(resp.html.search('rndnum="{}"')[0].split('.')[0]) # 提交问卷的时间 raw_t = round(time.time(), 3) t = int(str(raw_t).replace('.', '')) # 模拟开始答题时间 starttime = datetime.fromtimestamp( int(raw_t) - randint(1, 60 * 3)).strftime("%Y/%m/%d %H:%M:%S")

url = POST_URL_MAP.format(QUESTION_ID, t, starttime, rn)
return url

找到所有题目

def parse_post_data(resp): ''' 解析出问题和选项 返回post_data ''' post_data = {'submitdata': ""} questions = resp.html.find('fieldset', first=True).find('.div_question')

for i, q in enumerate(questions):
    title = q.find('.div_title_question_all', first=True).text
    choices = [t.text for t in q.find('label')]
    random_index = randint(0, len(choices) - 1)
    choice = choices[random_index]
    post_data['submitdata'] += '{}${}}}'.format(i+1, random_index+1)
    print(QUESTION_INFO.format(title, choices, choice))
    time.sleep(0.5)
# 去除最后一个不合法的`}`
post_data['submitdata'] = post_data['submitdata'][:-1]
return post_data

来看看效果吧 执行时

问卷星后台

?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NxYWNyaDI3OTg=,size_16,color_FFFFFF,t_70 ?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NxYWNyaDI3OTg=,size_16,color_FFFFFF,t_70

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/26846
 
1741 次点击