用Python 脚本来模拟填乐调查问卷

学妹的作业是做个问卷调查,当然是在乐调查<www.lediaocha.com>上做的,为了完成作业也是各种空间微博求帮忙,有空就去暴力刷。

# 分析

以前做过Python豆瓣机器人(模拟登录,发广播,发帖,发豆邮,抢沙发)一样的思路!

打开http://www.lediaocha.com/pc/s/1y5gab就是一个调查的页面,很简洁干净,最关键的是没有验证码,这不就更简单了吗? 打chrome F12调试提交一次,获得post数据,如下: image alt text 通过观察,我们看到上面的就是题目及对应的选项答案,最后三项

auth:f9698546f33c1ab32b512fa82dc3ffcd
action:b34ce9c0ff
t:ce7a27cd28d9aebc27a5d00d93694ad2

第一个貌似认证相关的,第二个应该是对应提交的action.第三个是时间戳,每次打开该页面服务器生成一个t,最后我们提交的t如果能匹配的话,也就是通过,否则返回“非法访问”。

而这些参数各问题相关的参数,我们通过网页源码就能看到,这样子就好说了,我们正则获取就可以了。

# 生成post提交数据

通过上面分析我们只需生成提交的数据,然后用post方式提交成功就完成一次调查问卷的填写。

# 获取题目及答案

首先是正则获取题目及答案。这里可以参考小虾的Python与简单网络爬虫的编写

re.compile(r'name="(.+?)".+? value="(.+?)"').findall(self.html)

# 随机生成答案


import random
answer_list = ['1','2']
random.choice(answer_list)

就可以了。

# keys

auth, action, t的获取就一样的,很简单了。直接正则就行了。

auth = re.compile(r'name="auth" value="(.+?)" />').findall(self.html)[0]
action = re.compile(r'name="action" value="(.+?)" />').findall(self.html)[0]
t = re.compile(r'name="t" value="(.+?)" />').findall(self.html)[0]

# 提交数据

通过urllib2提交http post请求取可。

import urllib  
import urllib2  
  
def post(url, data):  
    req = urllib2.Request(url)  
    data = urllib.urlencode(data)  
    #enable cookie  
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())  
    response = opener.open(req, data)  
    return response.read()  
  
def main():  
    posturl = "http://www.xxx.com/login"  
    data = {'email':'myemail', 'password':'mypass',}  
    print post(posturl, data)  
  
if __name__ == '__main__':  
    main()  

最后完整的代码:

https://github.com/vi5i0n/pyscripts/blob/master/Lediaocha_robot.py

--EOF--


>看不到评论?GFW!!!