logo资料库

使用Python登录CSDN(最新验证可用).pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
使用使用Python登录登录CSDN(最新验证可用) (最新验证可用) 作为一个爬虫菜鸟,今天在网上看到使用Python来模拟登录的博客,就在CSDN上试了试,结果处处碰壁。由于CSDN更新了登陆验证方式,网上的一些方法已经不 能使用,试了很久终于是模拟登陆成功了,但是频繁登陆会导致账号异常。 谷歌浏览器查看登录请求 谷歌浏览器查看登录请求 网址:https://passport.csdn.net/login?code=public,输入账号密码登陆,查看NetWork,如下所示。其中的doLogin就是对应着登陆请求,可以看见其中的请求URL 同样可以看见请求时所提交的数据,这里不是Form Data而是Request PayLoad,这两个的区别可以在百度中查阅,在具体请求时需要区分。 Python模拟登陆 模拟登陆 找到了请求URL和对应的参数就开始用Python模拟登陆,代码如下: # coding:utf-8 import requests from bs4 import BeautifulSoup import re import urllib class CsdnHelper: csdn_login_url = 'https://passport.csdn.net/v1/register/pc/login/doLogin' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'content - type': 'application / json;charset = UTF - 8' } blog_url = 'http://write.blog.csdn.net/postlist/' def __init__(self): self._session = requests.session() self._session.headers = CsdnHelper.headers def login(self, username, password): '''从页面获取参数,准备提交表单''' payloadData = { 'loginType': "1", } res = requests.post(CsdnHelper.csdn_login_url, json=payloadData, headers=CsdnHelper.headers) if 'UserNick' in res.cookies: nick = res.cookies['UserNick'] print(urllib.unquote(nick)) else: raise Exception('登录失败') if __name__ == '__main__': csdn_helper = CsdnHelper() username = '***' password = '***.' csdn_helper.login(username, password) 一顿操作猛如虎,,点击运行,结果就是GG: {"msg":"页面过期","code":"1015","message":"系统繁忙,请稍候再试","status":false} 在一顿百度之后,只有一篇博客上提到是由于CSDN在登陆之前加了一个验证,,于是再回去看控制台请求的记录,发现在登陆前会有一个Check,如下所示。
看到这个,于是就猜测是否是要在登陆请求之前先对这个URL请求通过验证再来登陆呢,那么就创建一个全局的Session来模拟登陆: # coding:utf-8 import requests from bs4 import BeautifulSoup import re import urllib class CsdnHelper: """登录CSDN和列出所有文章的类""" csdn_check_url = 'https://passport.csdn.net/v1/api/riskControl/checkHVC' csdn_login_url = 'https://passport.csdn.net/v1/register/pc/login/doLogin' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'content - type': 'application / json;charset = UTF - 8' } blog_url = 'http://write.blog.csdn.net/postlist/' def __init__(self): self._session = requests.session() self._session.headers = CsdnHelper.headers def login(self, username, password): payloadData = { #登陆里里面的payload数据 } checkData = { #check里面的payload数据 } self._session.post(CsdnHelper.csdn_check_url, json=checkData, headers= CsdnHelper.headers) res = self._session.post(CsdnHelper.csdn_login_url, json=payloadData, headers=CsdnHelper.headers) if 'UserNick' in res.cookies: nick = res.cookies['UserNick'] print(urllib.unquote(nick)) else: raise Exception('登录失败') if __name__ == '__main__': csdn_helper = CsdnHelper() username = '*****' password = '*****.' csdn_helper.login(username, password) 最终登陆成功: 作者:LMRzero
分享到:
收藏