首页 » PHP教程 » php模仿微博技巧_Python 模拟微博登录亲测有效

php模仿微博技巧_Python 模拟微博登录亲测有效

访客 2024-11-21 0

扫一扫用手机浏览

文章目录 [+]

本日想做一个微博爬个人页面的工具,知足一些不可告人的秘密。
那么首先就要做那件必做之事!
仿照上岸……

代码是参考了:https://www.douban.com/note/201767245/,我对代码进行了优化,重构成了Python 3.6 版本,并且加入了大量注释方便大家学习。

php模仿微博技巧_Python 模拟微博登录亲测有效

PC 登录新浪微博时, 在客户端用JS预先对用户名、密码都进行了加密,而且在POST之前会GET 一组参数,这也将作为POST_DATA 的一部分。
这样,就不能用常日的那种大略方法来仿照POST 登录( 比如大家网 )。

php模仿微博技巧_Python 模拟微博登录亲测有效
(图片来自网络侵删)

在提交POST要求之前,须要GET 获取两个参数。
地址是:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)。

得到的数据中有 servertime 和 nonce 的值, 是随机的,其他值貌似没什么用。

def get_servertime(): url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939' # 返回出来的是一个Response工具,无法直接获取,text后,可以通过正则匹配到 # 大概长这样子的:sinaSSOController.preloginCallBack({\公众retcode\"大众:0,\"大众servertime\公众:1545606770, ...}) data = requests.request('GET', url).text p = re.compile('\((.)\)') try: json_data = p.search(data).group(1) data = json.loads(json_data) servertime = str(data['servertime']) nonce = data['nonce'] return servertime, nonce except: print('获取 severtime 失落败!') return None

通过 httpfox 不雅观察 POST 的数据,参数较繁芜,个中“su\公众 是加密后的username, sp 是加密后的password,servertime 和 nonce 是上一步得到的,其他参数是不变的。

username 经由了 BASE64 打算:

username = base64.encodestring( urllib.quote(username) )[:-1]

password 经由了三次SHA1 加密,且个中加入了 servertime 和 nonce 的值来滋扰。
即:两次SHA1加密后,将结果加上 servertime 和 nonce 的值,再SHA1 算一次。

def get_pwd(pwd, servertime, nonce): # 第一次打算,把稳Python3 的加密须要encode,利用bytes pwd1 = hashlib.sha1(pwd.encode()).hexdigest() # 利用pwd1的结果在打算第二次 pwd2 = hashlib.sha1(pwd1.encode()).hexdigest() # 利用第二次的结果再加上之前打算好的servertime和nonce值,hash一次 pwd3_ = pwd2 + servertime + nonce pwd3 = hashlib.sha1(pwd3_.encode()).hexdigest() return pwd3def get_user(username): # 将@符号转换成url中能够识别的字符 _username = urllib.request.quote(username) # Python3中的base64打算也是要字节 # base64出来后,末了有一个换行符,以是用了切片去了末了一个字符 username = base64.encodebytes(_username.encode())[:-1] return username

将参数组织好,POST要求。
这之后还没有登录成功,POST后得到的内容中包含一句:

location.replace(\"大众http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4%ED%CE%F3\"大众)

这是登录失落败时的结果,登录成功后结果与之类似,不过 retcode 的值是0。
接下来再要求这个URL,这样就成功登录到微博了。
记得要提前build 缓存。

作者简介:上海小胖,四大咨询的Tech Lead,MongoDB Professional得到者。
「Python专栏」专注Python领域的各种技能:爬虫、DevOps、人工智能、Web开拓等。
还有「大航海操持」,各种内推活动。

声明:本文为作者投稿,版权归其个人所有。

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0