python爬取微博用户关注和粉丝的公开基本信息(1)

该博客介绍了如何使用Python进行微博模拟登录,包括Base64和RSA加密用户名及密码,获取登录所需的nonce, pubkey, rsakv,以及利用requests库发送登录请求并保存cookie。随后,通过获取和解析网页内容,爬取并存储用户关注和粉丝的详细信息,包括用户名、性别、所在地和粉丝数。最后,利用matplotlib绘制了男女比例扇形图和用户粉丝数量分布柱状图。" 108803475,8401844,使用JavaScript找出2-10000之间的孪生素数,"['JavaScript', '编程', '算法']
摘要由CSDN通过智能技术生成

self.username = username

self.password = password

self.session = requests.session()

self.cookie_file = “Cookie.json”

self.nonce, self.pubkey, self.rsakv = “”, “”, “”

self.headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36’}

def save_cookie(self, cookie):

“”"

保存Cookie

:param cookie: Cookie值

:return:

“”"

with open(self.cookie_file, ‘w’) as f:

json.dump(requests.utils.dict_from_cookiejar(cookie), f)

def load_cookie(self):

“”"

导出Cookie

:return: Cookie

“”"

with open(self.cookie_file, ‘r’) as f:

cookie = requests.utils.cookiejar_from_dict(json.load(f))

return cookie

def pre_login(self):

“”"

预登录,获取nonce, pubkey, rsakv字段的值

:return:

“”"

url = ‘https://login.sina.com.cn/sso/prelogin.php?entry=weibo&su=&rsakt=mod&client=ssologin.js(v1.4.19)&_={}’.format(int(time.time() * 1000))

res = requests.get(url)

js = json.loads(res.text.replace(“sinaSSOController.preloginCallBack(”, “”).rstrip(“)”))

self.nonce, self.pubkey, self.rsakv = js[“nonce”], js[‘pubkey’], js[“rsakv”]

def sso_login(self, sp, su):

“”"

发送加密后的用户名和密码

:param sp: 加密后的用户名

:param su: 加密后的密码

:return:

“”"

data = {

‘encoding’: ‘UTF-8’,

‘entry’: ‘weibo’,

‘from’: ‘’,

‘gateway’: ‘1’,

‘nonce’: self.nonce,

‘pagerefer’: ‘https://login.sina.com.cn/crossdomain2.php?action=logout&r=https%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D%252F’,

‘prelt’: ‘22’,

‘pwencode’: ‘rsa2’,

‘qrcode_flag’: ‘false’,

‘returntype’: ‘META’,

‘rsakv’: self.rsakv,

‘savestate’: ‘7’,

‘servertime’: int(time.time()),

‘service’: ‘miniblog’,

‘sp’: sp,

‘sr’: ‘1920*1080’,

‘su’: su,

‘url’: ‘https://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack’,

‘useticket’: ‘1’,

‘vsnf’: ‘1’}

url = ‘https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.19)&_={}’.format(int(time.time() * 1000))

self.session.post(url, headers=self.headers, data=data)

def login(self):

“”"

模拟登录主函数

:return:

“”"

Base64加密用户名

def encode_username(usr):

return base64.b64encode(usr.encode(‘utf-8’))[:-1]

RSA加密密码

def encode_password(code_str):

pub_key = rsa.PublicKey(int(self.pubkey, 16), 65537)

crypto = rsa.encrypt(code_str.encode(‘utf8’), pub_key)

return binascii.b2a_hex(crypto) # 转换成16进制

获取nonce, pubkey, rsakv

self.pre_login()

加密用户名

su = encode_username(self.username)

加密密码

text = str(int(time.time())) + ‘\t’ + str(self.nonce) + ‘\n’ + str(self.password)

sp = encode_password(text)

发送参数,保存cookie

self.sso_login(sp, su)

self.save_cookie(self.session.cookies)

self.session.close()

def cookie_test(self):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值