哪位大神能解释一下这个干嘛用的 xsrfValue = responseHtml.split

哪位大神能解释一下这个干嘛用的 xsrfValue = responseHtml.split,第1张

咋看之下,split看起来是分割字符串的(一般用法),分割后返回一个字符数组。

但这里却用一个对象来接收。split分割指定字符串时,若此字符串中包含特定字符

,如 \

则可能有转义 *** 作,

所以这里的目的是为转义,输出“。(字符串中 \“的结果是”,而不是本身\”,正则表达式用法)

这里split后的结果是去掉所有斜杠\。

1. 找到正确的登录链接,应该是:self.baseUrl + '/login/email'

2. 这个request.Request(self.baseUrl + '/#signin', postdata.encode('utf-8'))没用过不清楚,所以不知道有没有带上前两个请求的cookies。我是改成:

self.opener.open(self.baseUrl + '/login/email', postdata.encode('utf-8'))这样访问的。

通常登录403问题都是

1. 登录api不对,

2. 前后访问没有带cookies,导致token无效、验证码无效。

附上改后的,只会用requests的我,请勿喷啊~~~:

import cookielib,urllib2

import re,urllib,json

class ZhiHuSpider(object):

def __init__(self):

self.baseUrl = 'http://www.zhihu.com/'

self.captchaUrl = 'http://www.zhihu.com/captcha.gif?r='

self.cookies = cookielib.CookieJar()

self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))

# 获取网页xsrf值

def getXsrf(self):

html = None

html = self.opener.open(self.baseUrl).read().decode('utf-8')

xsrf_match = re.search(r'name="_xsrf" value="(.*?)"/>', html)

if xsrf_match:

return xsrf_match.group(1).strip()

# 将验证码保存在本地

def getCaptchaCode(self):

data = self.opener.open(self.captchaUrl).read()

fName = self.captchaUrl.split('/')[3].split('?')[0]

f = open(fName, 'wb')

f.write(data)

f.close()

print(u'验证码已保存在本地!请查看!')

# 模拟登录知乎

def login(self):

form = { '_xsrf': self.getXsrf(),

'email': 'email@faf.com',

'password': 'password' }

self.getCaptchaCode()

code = input(u'请输入验证码:')

form['captcha'] = code

postdata = urllib.urlencode(form)#parse.urlencode(form)

op = self.opener.open(self.baseUrl + '/login/email', postdata.encode('utf-8'))

#req = request.Request(self.baseUrl + '/#signin', postdata.encode('utf-8'))

a = op.read().decode()

a=json.loads(a)

print a,type(a)

print a['msg']

if __name__ == '__main__':

spider = ZhiHuSpider()

spider.login()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8342362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存