python获取验证码失败_python,python爬虫_python爬虫模拟登录知乎时遇到的验证码错误问题,python,python爬虫,网络 - phpStudy...

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格式的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值