模拟登陆国内著名知识交流网站
Posted fuzzier
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟登陆国内著名知识交流网站相关的知识,希望对你有一定的参考价值。
之前看了很长时间的前端相关知识,怕python手生,写个模拟登陆恢复一下
zhihu网上的info有些是需要登陆后才能访问爬去的,所以不妨试一试
1 首先自己登陆,然后用fiddler进行抓包
发现登陆zhihu需要post以下data:
A?, 验证码哪去了,算了,没有更好。
下面就要编写代码了,稍等,先看一下zhihu的response
resp的类型是json格式,经过检查,msg的值就是我们的登录状态了,所以一会我们会打印出这个值证明是否登录。
2 下面就不多说了,直接上代码
#!/usr/bin/python # -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup import cookielib import json HomePage = \'https://www.zXXXu.com/\' # 主页网址 # = r\'zhihu_cookies.txt\' session = requests.session() cookie = cookielib.CookieJar() #这个方法可以暂存cookie \'\'\' session.cookies = cookielib.MozillaCookieJar(filename) #这个方法是将cookie放入文件中 try: session.cookies.load(filename=filename, ignore_discard=True, ignore_expirex=True) #gnore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入, except: print \'Cookie can not load!\' \'\'\' headers = {\'Connection\': \'keep-alive\', \'Accept\': \'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\', \'Accept-Language\': \'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3\', \'User-Agent\': \'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\', \'Accept-Encoding\': \'gzip, deflate, sdch\', \'Host\': \'www.zXXXu.com\', } def get_xsrf(): text = session.get(HomePage, headers=headers).text soup = BeautifulSoup(text, \'html.parser\') result = soup.find(\'div\', class_=\'view view-signin\').find(\'input\')[\'value\'] return result #获取验证码 def get_captcha(): pass def login_zhihu(phone, passwd): login_url = HomePage+\'/login/phone_num\' data = { \'_xsrf\': \'%s\' % get_xsrf(), \'password\': passwd, \'phone_num\': phone, \'captcha_type\': \'cn\' } result = session.post(login_url, data=data, headers=headers) print json.loads(result.text)[\'msg\'] # result的body是son格式,而\'msg\'的值是登录状态 return if __name__ == \'__main__\': phone = raw_input(\'Please input phone_num: \') passwd = raw_input(\'Please input password: \') url = HomePage + \'/settings/profile\' # 登录后才可以访问自己的profile login_zhihu(phone, passwd) resp_status = session.get(url, headers=headers, allow_redirects=False).status_code # 此处关闭了跳转的操作 print resp_status # 返回结果是访问状态码
里面有两点需要说明
2.1 cookie的处理,我用了一个cookiejar存储了cookie,大家这步也可以忽略。
2.2 headers一定要写全,之前改个UA就能登录了,现在需要都写上才可以,zhihu也是反爬上挣扎(我可是在这里辛辛苦苦试了很多遍才察觉出来,大家不要像我这么傻)
3 最后就是返回的结果了
最后最后给大家推荐一个jianshu的作者写的zhihu爬虫,它的里面包括处理验证码(我是真的很烦手动输入)链接地址
以上是关于模拟登陆国内著名知识交流网站的主要内容,如果未能解决你的问题,请参考以下文章