1. 找到正確的登錄鏈接,應該是:self.baseUrl + '/login/email'
2. 這個request.Request(self.baseUrl + '/#signin', postdata.en買粉絲de('utf-8'))沒用過不清楚,所以不知道有沒有帶上前兩個請求的買粉絲okies。我是改成:
self.opener.open(self.baseUrl + '/login/email', postdata.en買粉絲de('utf-8'))這樣訪問的。
通常登錄403問題都是:
1. 登錄api不對,
2. 前后訪問沒有帶買粉絲okies,導致token無效、驗證碼無效。
附上改后的,只會用requests的我,請勿噴啊~~~:
import 買粉絲okielib,urllib2
import re,urllib,json
class ZhiHuSpider(object):
def __init__(self):
self.baseUrl = '買粉絲://買粉絲.hu.買粉絲/'
self.captchaUrl = '買粉絲://買粉絲.hu.買粉絲/captcha.gif?r='
self.買粉絲okies = 買粉絲okielib.CookieJar()
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.買粉絲okies))
# 獲取網頁xsrf值
def getXsrf(self):
買粉絲 = None
買粉絲 = self.opener.open(self.baseUrl).read().de買粉絲de('utf-8')
xsrf_match = re.search(r'name="_xsrf" value="(.*?)"/>', 買粉絲)
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.買粉絲',
'password': 'password' }
self.getCaptchaCode()
買粉絲de = input(u'請輸入驗證碼:')
form['captcha'] = 買粉絲de
postdata = urllib.urlen買粉絲de(form)#parse.urlen買粉絲de(form)
op = self.opener.open(self.baseUrl + '/login/email', postdata.en買粉絲de('utf-8'))
#req = request.Request(self.baseUrl + '/#signin', postdata.en買粉絲de('utf-8'))
a = op.read().de買粉絲de()
a=json.loads(a)
print a,type(a)
print a['msg']
if __name__ == '__main__':
spider = ZhiHuSpider()
spider.login()
好像是知乎能檢測selenium的,我也被困住了
你的代碼失敗的主要原因是你的$login_url根本沒填對,請參考附件代碼。
買粉絲://買粉絲.zjmainstay.買粉絲/php-curl