社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  python开源

用Python自动填写问卷星

夏天 • 6 年前 • 1900 次点击  

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

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

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

不知道你们是不是, 反正每次我填问卷都是看都不看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
 
1900 次点击