python爬虫模拟登录知乎时遇到的验证码错误问题
import urllib,urllib2,cookielib
import os,re,time
_url_zhihu='http://www.zhihu.com'
_url_email_login=_url_zhihu+'/login/email'
_captcha_site=_url_zhihu+'/captcha.gif'
_header={'Host':'www.zhihu.com',
'Origin':'http://www.zhihu.com',
'Pragma':'no-cache',
'Referer':'http://www.zhihu.com/',
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36',
'X-Requested-With':'XMLHttpRequest','Accept':'*/*',
'Accept-Language':'zh-CN,zh;q=0.8,en;q=0.6',
'Cache-Control':'no-cache',
'Connection':'keep-alive',
'Content-Length':'111'}
def getXSRF(data):
'''
从返回的文件中使用正则表达式解析出_xsrf
可以考虑使用BeautifulSoup
'''
cer = re.compile('name=\"_xsrf\" value=\"(.*)\"', flags = 0)
strlist = cer.findall(data)
return strlist[0]
def get_xsrf_opener(head):
'''
接受header字典,并返回构造好的opener和解析出的_xsrf
'''
cookie=cookielib.CookieJar()
handler=urllib2.HTTPCookieProcessor(cookie)
opener=urllib2.build_opener(handler)
response=opener.open(_url_zhihu)
xsrf=getXSRF(response.read())
with open('xsrf','w') as f:
f.write(xsrf)
header=[]
for key,value in head.items():
elme=(key,value)
header.append(elme)
opener.addheaders=header
return xsrf,opener
def get_captcha_url():
return _captcha_site+str(int(time.time())*1000)
def get_captcha(url):
request=urllib2.Request(url)
response=urllib2.urlopen(url)
with open('captcha.gif','wb') as f:
f.write(response.read())
def login(opener,xsrf='',email='',password='',captcha='',rememberme='true'):
'''
用来登录知乎的程序,包括返回的xsrf,email,password
'''
values={'email':email,'password':password,'captcha':captcha,'rememberme':rememberme,'_xsrf':xsrf}
data=urllib.urlencode(values)
request=urllib2.Request(_url_email_login,data)
response=opener.open(request)
return response.read()
def _init():
'''
主程序
'''
email=raw_input('email: ')
password=raw_input('password: ')
xsrf,opener=get_xsrf_opener(_header)
get_captcha(_captcha_site)
captcha=raw_input('captcha:')
f=login(opener,xsrf,email,password,captcha)
print f
if __name__ == '__main__':
_init()
————————————————————————————————————————
运行后返回的信息{
"r": 1,
"errcode": 1991829,
"data": {"captcha":"\u9a8c\u8bc1\u7801\u9519\u8bef"},
"msg": "\u9a8c\u8bc1\u7801\u9519\u8bef"
}
信息提示是验证码错误,但是已经传入了验证码,为何还是不能通过(⊙_⊙)?,求Python大神给予指点O(∩_∩)O谢谢
相关阅读:
jquery 将json数组转化为array
请教js实现拖拽上传图片的实现思路
CKeditor 有百度地图的插件吗?
是否有相对可用的简体中文 Web Font?
授权用的 APPSecret 一般是什么算法生成的呢?
这是一个自执行函数吗
文本表单和图片一起进行ajax提交,表单是值,图片是对象,发送时有些问题
清除浮动的问题
jquery控制元素的缩放 这样写对不对
为什么我的sublime按crtl+s会自动 reindent lines,能不能关掉呢?
求与javascript url encode 函数对应的 php url decode 函数
rmbp13 接了一个 1080P 的显示器,字体超级模糊;求正确设置姿势。
intelli j idea 文件变成蓝色是什么意思?
如何在Web页面上实现一个Shell的效果
mac上nginx无法监听80端口
CasperJS的Hello-test.js运行错误
babel 转化es6代码会更改 class 大小写?
我在html中body加了class=“add-bg”,当响应到移动端,为什么背景色还是没有改变的,我用媒体查询控制它
关于nginx反向代理,只能访问首页?
socket 发送xml格式的数据