学妹的作业是做个问卷调查,当然是在乐调查<www.lediaocha.com>上做的,为了完成作业也是各种空间微博求帮忙,有空就去暴力刷。
# 分析
以前做过Python豆瓣机器人(模拟登录,发广播,发帖,发豆邮,抢沙发)一样的思路!
打开http://www.lediaocha.com/pc/s/1y5gab就是一个调查的页面,很简洁干净,最关键的是没有验证码,这不就更简单了吗?
打chrome F12调试提交一次,获得post数据,如下:
通过观察,我们看到上面的就是题目及对应的选项答案,最后三项
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