Python模拟登录知乎,为啥403 forbidden了
1. 找到正确的登录链接,应该是:self.baseUrl + \u0026#39;/login/email\u0026#39;2. 这个request.Request(self.baseUrl + \u0026#39;/#signin\u0026#39;, postdata.encode(\u0026#39;utf-8\u0026#39;))没用过不清楚,所以不知道有没有带上前两个请求的cookies。我是改成:self.opener.open(self.baseUrl + \u0026#39;/login/email\u0026#39;, postdata.encode(\u0026#39;utf-8\u0026#39;))这样访问的。通常登录403问题都是:1. 登录api不对,2. 前后访问没有带cookies,导致token无效、验证码无效。附上改后的,只会用requests的我,请勿喷啊~~~:import cookielib,urllib2import re,urllib,jsonclass ZhiHuSpider(object): def __init__(self): self.baseUrl = \u0026#39;http://www.zhihu.com/\u0026#39; self.captchaUrl = \u0026#39;http://www.zhihu.com/captcha.gif?r=\u0026#39; 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(\u0026#39;utf-8\u0026#39;) xsrf_match = re.search(r\u0026#39;name="_xsrf" value="https://www.zhihu.com/api/v4/questions/38175940/(.*?)"/\u0026gt;\u0026#39;, html) if xsrf_match: return xsrf_match.group(1).strip() # 将验证码保存在本地 def getCaptchaCode(self): data = https://www.zhihu.com/api/v4/questions/38175940/self.opener.open(self.captchaUrl).read() fName = self.captchaUrl.split(/u0026#39;/u0026#39;).split(/u0026#39;?\u0026#39;) f = open(fName, \u0026#39;wb\u0026#39;) f.write(data) f.close() print(u\u0026#39;验证码已保存在本地!请查看!\u0026#39;) # 模拟登录 def login(self): form = { \u0026#39;_xsrf\u0026#39;: self.getXsrf(), \u0026#39;email\u0026#39;: \u0026#39;email@faf.com\u0026#39;, \u0026#39;password\u0026#39;: \u0026#39;password\u0026#39; } self.getCaptchaCode() code = input(u\u0026#39;请输入验证码:\u0026#39;) form = code postdata = urllib.urlencode(form)#parse.urlencode(form) op = self.opener.open(self.baseUrl + \u0026#39;/login/email\u0026#39;, postdata.encode(\u0026#39;utf-8\u0026#39;)) #req = request.Request(self.baseUrl + \u0026#39;/#signin\u0026#39;, postdata.encode(\u0026#39;utf-8\u0026#39;)) a = op.read().decode() a=json.loads(a) print a,type(a) print aif __name__ == \u0026#39;__main__\u0026#39;: spider = ZhiHuSpider() spider.login()
推荐阅读
- 怎样成为一名合格的Python程序员?
- python 爬虫,咋获得输入验证码之后的搜索结果
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- 零基础入门学习啥语言好
- QQ在pc端同时登录两个为啥不会发生ip地址冲突
- Python3.4和3.5区别大么
- python 中 def_():...... return _有啥作用
- 新互联网网站用Java还靠谱么对比Php,Python,Ruby的话
- 客栈通PMS咋操作和携程账号直连
