微博模拟登陆后发文字微博以及自动关注用户

import requestsimport base64import timeimport rsaimport binasciiimport urllib.parseimport re,urllibfrom bs4 import BeautifulSoupclass WeiBo():    def __init__(self):        self.session = requests.session()        self.headers = {            ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36‘        }        self.proxies = {}

    def get_secer_data(self, su):        prelogin_url = ‘https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&client=ssologin.js(v1.4.19)&_=%s‘ % (        su, str(int(time.time() * 1000)))        pre_data_res = self.session.get(prelogin_url, headers=self.headers, proxies=self.proxies)        sever_data = eval(pre_data_res.content.decode("utf-8").replace("sinaSSOController.preloginCallBack", ‘‘))        return sever_data

    def get_su(self, username):        username_quote = urllib.parse.quote_plus(username)        username_base64 = base64.b64encode(username_quote.encode("utf-8"))        return username_base64.decode("utf-8")

    def get_password(self, password, servertime, nonce, pubkey):        rsaPublickey = int(pubkey, 16)        key = rsa.PublicKey(rsaPublickey, 65537)        message = str(servertime) + ‘\t‘ + str(nonce) + ‘\n‘ + str(password)        message = message.encode("utf-8")        passwor = rsa.encrypt(message, key)        passwor = binascii.b2a_hex(passwor)        return passwor

    def login(self, su, sp, sever_data, nonce, rsakv, servertime):        data = {            ‘entry‘: ‘weibo‘,            ‘gateway‘: ‘1‘,            ‘from‘: ‘‘,            ‘savestate‘: ‘7‘,            ‘qrcode_flag‘: ‘false‘,            ‘useticket‘: ‘1‘,            ‘pagerefer‘: ‘https://passport.weibo.com/visitor/visitor?entry=miniblog&a=enter&url=https%3A%2F%2Fweibo.com%2F%3Fsudaref%3Dwww.baidu.com%26display%3D0%26retcode%3D6102&domain=.weibo.com&sudaref=https%3A%2F%2Flogin.sina.com.cn%2Fsso%2Flogin.php%3Furl%3Dhttps%253A%252F%252Fweibo.com%252F%26_rand%3D1576318124.3653%26gateway%3D1%26service%3Dminiblog%26entry%3Dminiblog%26useticket%3D1%26returntype%3DMETA%26sudaref%3Dhttps%253A%252F%252Fwww.baidu.com%252Flink%253Furl%253D1Gxs_A1v8Lqn_zffSX5I3EMIqUQTJ3CoF4M7JWEeKni%2526wd%253D%2526eqid%253D936d55f70000e6ff000000045df4b4a9%26_client_version%3D0.6.28&ua=php-sso_sdk_client-0.6.28&_rand=1576318124.7105‘,            ‘vsnf‘: ‘1‘,            ‘su‘: su,            ‘service‘: ‘miniblog‘,            ‘servertime‘: servertime,            ‘nonce‘: nonce,            ‘pwencode‘: ‘rsa2‘,            ‘rsakv‘: rsakv,            ‘sp‘: sp,            ‘sr‘: ‘1366 * 768‘,            ‘encoding‘: ‘UTF-8‘,            ‘prelt‘: ‘35‘,            ‘url‘: ‘https://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack‘,            ‘returntype‘: ‘META‘        }        url = ‘https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.19)‘        login_page = self.session.post(url, data=data)        login_loop = (login_page.content.decode("GBK"))        pa = r‘location\.replace\([\‘"](.*?)[\‘"]\)‘        loop_url = re.findall(pa, login_loop)[0]        lodin_index = self.session.get(loop_url)        url1 = re.findall(pa, lodin_index.text)[0]        url = ‘https://weibo.com/ajaxlogin.php?‘        html1 = self.session.get(url1)        uuid_pa = r‘"uniqueid":"(.*?)"‘        html = self.session.get(url, headers=self.headers).text        uuid_res = re.findall(uuid_pa,html,re.S)[0]        return uuid_res    def get_uid(self,name):        url = ‘https://s.weibo.com/user?q=%s‘%name        html = self.session.get(url,headers = self.headers).text        soup = BeautifulSoup(html,‘lxml‘)        p1 = soup.find(name = ‘a‘,attrs={‘class‘:‘name‘})        x = p1.attrs[‘href‘]        pa = re.compile(‘\d+‘)        uid = re.findall(pa,x)[0]        time.sleep(0.5)        return uid    def fwb(self,username,password):        su = self.get_su(username)        sever_data = self.get_secer_data(su)        servertime = sever_data["servertime"]        nonce = sever_data["nonce"]        rsakv = sever_data["rsakv"]        pubkey = sever_data["pubkey"]        sp = self.get_password(password, servertime, nonce, pubkey)        uuid = self.login(su, sp, sever_data, nonce, rsakv, servertime)        text = input("请输入你想要的发送的文字:")        data = {        ‘location‘: ‘v6_content_home‘,        ‘text‘: ‘text‘,        ‘appkey‘:‘‘,        ‘style_type‘: ‘1‘,        ‘pic_id‘:‘‘,        ‘tid‘:‘‘,        ‘pdetail‘:‘‘,        ‘mid‘:‘‘,        ‘isReEdit‘: ‘false‘,        ‘rank‘: 0,        ‘rankid‘:‘‘,        ‘module‘: ‘stissue‘,        ‘pub_source‘: ‘main_‘,        ‘pub_type‘: ‘dialog‘,        ‘isPri‘: 0,        ‘_t‘: 0        }        headers = {            ‘Referer‘:‘https://weibo.com/u/%s‘%uuid+‘/home?topnav=1&wvr=6‘,            ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36‘        }        url2 = ‘https://weibo.com/u/%s‘%uuid+‘/home?topnav=1&wvr=6‘        time.sleep(0.5)        html = self.session.get(url2,headers = headers)        time.sleep(0.5)        url = ‘https://weibo.com/aj/mblog/add?ajwvr=6&__rnd=%s‘ %(int(time.time() * 1000))        fasong = self.session.post(url,data = data,headers = self.headers)        print(url)        print(fasong.status_code)        ‘‘‘ print("成功了哦")        else:            print("失败了")‘‘‘    def guanzhu(self,username,password):        su = self.get_su(username)        sever_data = self.get_secer_data(su)        servertime = sever_data["servertime"]        nonce = sever_data["nonce"]        rsakv = sever_data["rsakv"]        pubkey = sever_data["pubkey"]        sp = self.get_password(password, servertime, nonce, pubkey)        self.login(su, sp, sever_data, nonce, rsakv, servertime)        headerss = {            ‘Referer‘: ‘https://weibo.com/u/5272436964?is_hot=1‘,            ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36‘        }        name = input("请输入想要关注的人:")        uid = self.get_uid(name)        url1 =  ‘https://weibo.com/u/%s‘%uid        html1 = self.session.get(url1,headers = self.headers)        dat = {        ‘uid‘: uid,        ‘objectid‘:‘‘,        ‘f‘: ‘1‘,        ‘extra‘:‘‘,        ‘refer_sort‘:‘‘,        ‘refer_flag‘: ‘1005050001‘,        ‘location‘: ‘page_100505_home‘,        ‘oid‘: uid,        ‘wforce‘: ‘1‘,        ‘nogroup‘: ‘1‘,        ‘fnick‘: name,        ‘refer_lflag‘:‘‘,        ‘refer_from‘: ‘profile_headerv6‘,        ‘template‘: ‘7‘,        ‘special_focus‘: ‘1‘,        ‘isrecommend‘: ‘1‘,        ‘is_special‘: ‘0‘,        }        url3 = ‘https://weibo.com/aj/f/followed?ajwvr=6&__rnd=%s‘%(int(time.time()*1000))        htmls = self.session.post(url3,data=dat,headers = headerss)        print(htmls.text)        if htmls.status_code ==200:            print(‘true‘)    def shiyan(self,username,password):        su = self.get_su(username)        sever_data = self.get_secer_data(su)        servertime = sever_data["servertime"]        nonce = sever_data["nonce"]        rsakv = sever_data["rsakv"]        pubkey = sever_data["pubkey"]        sp = self.get_password(password, servertime, nonce, pubkey)        uuid = self.login(su, sp, sever_data, nonce, rsakv, servertime)微博模拟登陆后发文字微博以及自动关注用户                               -BY Huyer                               ——2019 12 21

原文地址:https://www.cnblogs.com/huyer/p/12078628.html

时间: 2024-08-06 10:02:55

微博模拟登陆后发文字微博以及自动关注用户的相关文章

Python模拟登陆万能法-微博|知乎

Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入requests,最终用requests进行网站的抓取.优点就是不但规避了"selenium"其本身抓取速度慢的问题

腾讯微博模拟登陆+数据抓取(java实现)

不多说,贴出相关代码. 参数实体: package token.def; import java.io.Serializable; import java.util.Properties; public class TLoginParams implements Serializable { private static final long serialVersionUID = 6120319409538285515L; private String saltUin; private Stri

Python模拟登陆万能法

此文转自:https://zhuanlan.zhihu.com/p/28587931   转录只是为了方便学习,感谢他的分享 Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入reque

微博第三方登陆请求授权出现错误码:21322(重定向地址不匹配)的解决方法

https://hostcoz.com/151.html 主题自带了微博登陆接口,很简单的去新浪微博开放平台创建了网页应用,然后把APP ID和 AppSecret填好后,以为大功告成后,轻车熟路地点击使用微博登陆,映入我眼前的是: 用微博帐号登录出错了!对第三方应用进行授权时出现错误,请您联系第三方应用的开发者:XXX 或者稍后再试. 错误码:21322重定向地址不匹配 遇到错误就去看了下新浪开放平台的接口说明 错误码为 redirect_uri_mismatch ,是因为没有设置回调地址.

python-微博模拟登陆

微博的的模拟登陆是比较坑的,看了网上很多大神的帖子,自己又看了微博的登陆时的json数据:1.发现登陆时在输入账号时用chrome可以看到会有一个prelogin之类的网址,网址后面会有大串的随机数.我测试了下,发现在没有随机数的情况下的网址也能得到所需要的severtime.nonce.等几个数据.2.通过chrome查看json数据就可以看到用户名和密码的加密方式,再找了网上大神的资料就可以得到用户名su.和密码sp.再把数据post 上去就可以得到一个重定向的微博登陆网址.3.将这个网址用

Python——新浪微博爬虫之模拟登陆

在编写微博爬虫的过程中,免不了要进行模拟登录,因为新浪微博不登陆只能访问少量的微博信息. 然而,由于新浪微博的反爬虫功能在不断更新,例如改变了密码的加密算法(RSA),以前的一些模拟登陆方式已经不适用了.所以一开始试了好几种方法,均不能成功.后来受http://www.jb51.net/article/46053.htm启发,已经实现了. 目前,亲测能用的步骤是:①通过预登录,使用GET方法,获得登录所需的servertime, nonce, pubkey, rsakv:②使用encode64加

Python爬虫者的福音!一个神库,汇总了数十个主流网站的模拟登陆方法

网络上有形形×××的网站,不同类型的网站爬虫策略不同,难易程度也不一样.从是否需要登陆这方面来说,一些简单网站不需要登陆就可以爬,比如之前爬过的猫眼电影.东方财富网等.有一些网站需要先登陆才能爬,比如知乎.微信等.这类网站在模拟登陆时需要处理验证码.js 加密参数这些问题,爬取难度会大很多.费很大力气登陆进去后才能爬取想要的内容,很花时间. 是不是一定要自己动手去实现每一个网站的模拟登陆方法呢,从效率上来讲,其实大可不必,已经有前人替我们造好轮子了. 最近发现一个神库,汇总了数十个主流网站的模拟

Scrapy模拟登陆

1. 为什么需要模拟登陆? #获取cookie,能够爬取登陆后的页面 2. 回顾: requests是如何模拟登陆的? #1.直接携带cookies请求页面 #2.找接口发送post请求存储cookie 3. selenium是如何模拟登陆的? #找到对应的input标签,输入文字点击登录 4. 那么对于scrapy来说,也是有两个方法模拟登陆 # 1.直接携带cookie # 2.找到发送post请求的url地址,带上信息,发送请求 1. scrapy模拟登陆之携带cookie 应用场景: 1

模拟登陆、Cookie传递

---恢复内容开始--- 上个月月底把模拟登陆的问题解决了,现在有时间就正好记录并复习一下. 主要使用httpclient 来进行模拟登陆 首先做一个登陆布局  一直以来都是简单拖几个控件 没有啥特效  这次我想使用一点 Material Design设计风格    查了一下 TextInputLayout这个控件  还不错 TextInputLayout 来自于 Android Design Support Library    可以让edittext的hint在用户输入的时候  自动跳到上方