python使用cookie登陆新浪微博用户信息
在上一篇博客python模拟新浪微博登陆之获取cookies中,已经实现了登陆新浪微博并把cookie保存了下来。接下来通过得到的cookie去访问新浪微博其他页面,并获取我们想要的信息。
顺便一提,我的软件是python2.7.10(64位),IDE是pycharm,win8.1系统环境。所用到的包是base64、rsa、binascii、re、requests。
这里,我首先通过访问自己新浪微博主页获取我的所有微博;
然后进入我的关注用户页面,获取我关注用户的用户ID、用户名;
最后分别进入各个用户的微博主页获取所有微博。
另外,python3的代码,请看:http://bgods.cn/blog/post/29/
###1.获取我的uid与用户名
以下是获取我的uid与用户名的详细代码,使用时需要cookies参数。
def get_myuid(cookies):url = 'http://weibo.com/'html = requests.get(url,cookies=cookies).content #用get请求加入cookies参数登陆微博主页a = html.find('[\'uid\']=')b = html[a:].find(';')myuid = html[a + len('[\'uid\']='): a + b][1:-1] #获取我的uida = html.find('[\'nick\']=')b = html[a:].find(';')myname = html[a + len('[\'nick\']='): a + b][1:-1] #获取我的用户名return myuid,myname
使用以下命令,可以将返回的两个字符串分别赋值给变量myuid、myname
myuid,myname = get_myuid(cookies)
###2.获取我关注用户的uid、用户名
以下是函数get_follow(myuid,cookies)的代码,可以获取我关注用户的uid、用户名。
def get_follow(myuid,cookies):'''获取微博关注用户的uid与用户名'''url = 'http://weibo.com/' + myuid + '/follow'html = requests.get(url,cookies=cookies).contentc = html.find('member_ul clearfix')-13html = html[c:]u = re.findall(r'[uid=]{4}([0-9]+)[&nick=]{6}(.*?)\\"',html)user_id = []uname = []for i in u:user_id.append(i[0]) #把uid储存到列表user_id中uname.append(i[1]) #把用户名储存到列表uname中return user_id,uname #返回两个列表
###3.获取微博
通过以下url可以直接进入访问用户的微博页面,其中uid是前面提到uid。通过改变uid可以访问不同用户的微博页面;把profile改为fans(follow)可以访问用户的粉丝(关注)页面。
url = 'http://weibo.com/'+uid+'/profile'
以下是get_weibo(uid,cookies,page)函数的代码,这里我使用的是普通的正则匹配、re模块。
def get_weibo(uid,cookies,page):'''获取我的前page页的微博'''url = 'http://weibo.com/'+uid+'/profile'my_weibo = []for p in range(1,page+1):#新浪微博每一页信息是异步加载的,分三次加载,而且提交的参数都不同for pb in range(-1,2):data = {'pagebar':str(pb),'pre_page':str(p),'page':str(p),}if p == 1:if pb == -1:html = requests.get(url,cookies=cookies).contentelse:html = requests.get(url,cookies=cookies,params=data).contentelse:html = requests.get(url,cookies=cookies,params=data).contenthlist = html.split('node-type=\\"feed_list_content\\"')[1:]for i in hlist:i = i.split('<\/div>')[0]s = re.findall('>(.*?)<',i)weibo = ''for j in s:weibo = weibo + j.strip('\\n /\\')if len(weibo) != 0:my_weibo.append(weibo) #如果提取的信息不为空,则保存到列表my_weibo中return my_weibo #返回一个微博信息列表
###4.获取微博并保存到文本
利用前面编写的Get_cookies(username,password)、get_myuid(cookies)、get_follow(myuid,cookies) 以及get_weibo(uid,cookies,page)四个函数,就可以获取自己以及关注用户的uid、用户名、微博信息。以下是代码
cookies = Get_cookies(username,password) #获取登陆后的cookies
myuid,myname = get_myuid(cookies) #获取我的uid与用户名
uid,uname = get_follow(myuid,cookies) #获取关注用户的uid与用户名s = open('user_weibo.txt','a')
for i in range(len(uid)):my_weibo = get_weibo(uid[i],cookies,3) #获取用户前三页的微博信息for j in my_weibo:s.write(uid[i]+' '+uname[i]+' '+j+'\n')print str(i+1)+'/'+str(len(uid)) #显示获取进度s.close()
print '所有用户获取完成'
以下是所获取的数据
至此,获取新浪微博信息完成。至于进一步获取关注用户的子用户的微博信息,这里就不做了。
基本思路:其实也很简单,只要再编写一个获取子用户的uid的函数就可以了,获取uid之后,再利用get_weibo(uid,cookies,page)函数就可以获取微博信息了;之后再循环利用编写的函数与get_weibo(uid,cookies,page)就可以获取无穷多的子用户微博信息。
我是分割线====
以下是完整代码:
#-*- encoding:utf-8 -*-import requests
import re
import base64,rsa,binasciiusername = '这里输入用户名' #用户名
password = '这里输入密码' #密码def Get_cookies(username,password):'''登陆新浪微博,获取登陆后的Cookie,返回到变量cookies中'''url = 'http://login.sina.com.cn/sso/prelogin.php?entry=sso&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&client=ssologin.js(v1.4.15)%'+usernamehtml = requests.get(url).contentservertime = re.findall('"servertime":(.*?),',html,re.S)[0]nonce = re.findall('"nonce":"(.*?)"',html,re.S)[0]pubkey = re.findall('"pubkey":"(.*?)"',html,re.S)[0]rsakv = re.findall('"rsakv":"(.*?)"',html,re.S)[0]username = base64.b64encode(username) #加密用户名rsaPublickey = int(pubkey, 16)key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) #拼接明文js加密文件中得到passwd = rsa.encrypt(message, key) #加密passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。login_url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.4)'data = {'entry': 'weibo','gateway': '1','from': '','savestate': '30','userticket': '1','ssosimplelogin': '1','vsnf': '1','vsnval': '','su': username,'service': 'miniblog','servertime': servertime,'nonce': nonce,'pwencode': 'rsa2','sp': passwd,'encoding': 'UTF-8','prelt': '115','rsakv' : rsakv,'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack','returntype': 'META'}html = requests.post(login_url,data=data).contenturlnew = re.findall('location.replace\(\'(.*?)\'',html,re.S)[0]html = requests.get(urlnew)cookies = html.cookiesreturn cookiesdef get_myuid(cookies):url = 'http://weibo.com/'html = requests.get(url,cookies=cookies).content #用get请求加入cookies参数登陆微博主页a = html.find('[\'uid\']=')b = html[a:].find(';')myuid = html[a + len('[\'uid\']='): a + b][1:-1] #获取我的uida = html.find('[\'nick\']=')b = html[a:].find(';')myname = html[a + len('[\'nick\']='): a + b][1:-1] #获取我的用户名return myuid,mynamedef get_weibo(uid,cookies,page):'''获取我的前page页的微博'''url = 'http://weibo.com/'+uid+'/profile'my_weibo = []for p in range(1,page+1):#新浪微博每一页信息是异步加载的,分三次加载for pb in range(-1,2):data = {'pagebar':str(pb),'pre_page':str(p),'page':str(p),}if p == 1:if pb == -1:html = requests.get(url,cookies=cookies).contentelse:html = requests.get(url,cookies=cookies,params=data).contentelse:html = requests.get(url,cookies=cookies,params=data).contenthlist = html.split('node-type=\\"feed_list_content\\"')[1:]for i in hlist:i = i.split('<\/div>')[0]s = re.findall('>(.*?)<',i)weibo = ''for j in s:weibo = weibo + j.strip('\\n /\\')if len(weibo) != 0:my_weibo.append(weibo)return my_weibodef get_follow(myuid,cookies):'''获取微博关注用户的uid与用户名'''url = 'http://weibo.com/' + myuid + '/follow'html = requests.get(url,cookies=cookies).contentc = html.find('member_ul clearfix')-13html = html[c:]u = re.findall(r'[uid=]{4}([0-9]+)[&nick=]{6}(.*?)\\"',html)user_id = []uname = []for i in u:user_id.append(i[0]) #把uid储存到列表user_id中uname.append(i[1]) #把用户名储存到列表uname中return user_id,uname#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cookies = Get_cookies(username,password) #获取登陆后的cookies
myuid,myname = get_myuid(cookies) #获取我的uid与用户名
uid,uname = get_follow(myuid,cookies) #获取关注用户的uid与用户名s = open('user_weibo.txt','a')
for i in range(len(uid)):my_weibo = get_weibo(uid[i],cookies,3) #获取用户前三页的微博信息for j in my_weibo:s.write(uid[i]+' '+uname[i]+' '+j+'\n')print str(i+1)+'/'+str(len(uid))s.close()
print '所有用户获取完成'
====================================================================
请看下一篇:python使用cookie登陆新浪微博用户信息
欢迎访问我的个人站点:http://bgods.cn/
python使用cookie登陆新浪微博用户信息相关推荐
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )
上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) -- 数据的持久化--使用MongoDB存储爬取的数据 最近项目有些忙,很多需求紧急上线,所以一直没能完善< 使用 ...
- python爬取微博用户正文_基于Python的新浪微博用户信息爬取与分析
基于 Python 的新浪微博用户信息爬取与分析 邓文萍 [摘 要] 摘要:本文设计并实现了一个微博用户信息爬取与分析系统 , 利用 Cookie 实现了用户的模拟登录 , 使用 Python 语言的 ...
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) —— 编写一个基本的 Spider 爬取微博用户信息
上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(一) -- 新建爬虫项目 在上一篇我们新建了一个 sina_scrapy 的项目,这一节我们开始正式编写爬虫的代码. 选择目标 ...
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) —— 数据的持久化——使用MongoDB存储爬取的数据
上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) -- 编写一个基本的 Spider 爬取微博用户信息 在上一篇博客中,我们已经新建了一个爬虫应用,并简单实现了爬取一位微 ...
- Scrapy爬取新浪微博用户信息、用户微博及其微博评论转发
项目介绍 新浪微博是国内主要的社交舆论平台,对社交媒体中的数据进行采集是舆论分析的方法之一. 本项目无需cookie,可以连续爬取一个或多个新浪微博用户信息.用户微博及其微博评论转发. 实例 选择爬取 ...
- python携带cookie登陆
python携带cookie登陆 1.获取cookie值 代码如下(示例): def get_cookie():browser = webdriver.Chrome()browser.get(&quo ...
- 爬取新浪微博用户信息及微博内容并进行可视化分析
参考博文:https://blog.csdn.net/asher117/article/details/82793091 主要代码如下图 from selenium import webdriver ...
- python爬取b站用户_用Python爬取bilibili全站用户信息
教你用Python爬取哔哩哔哩全站用户信息 运行 下载 git clone https://github.com/cexll/bili_user_Spider.git 复制代码 运行环境 Window ...
- 用Python爬取bilibili全站用户信息
教你用Python爬取哔哩哔哩全站用户信息 运行 下载 git clone https://github.com/cexll/bili_user_Spider.git 复制代码 运行环境 Window ...
- python爬取知乎用户信息泄露_scrapy实战--爬取知乎用户信息(上)
背景 使用Scrapy分布式爬取知乎所有用户个人信息! 项目地址 爬取知乎所有用户 大规模抓取静态网页Scrapy绝对是利器!当然也可以使用requests库来自己实现,但是要自己写过滤器等组件,既然 ...
最新文章
- 基于Spring cloud Ribbon和Eureka实现客户端负载均衡
- powershell如何编程C语言,如何用C语言执行powershell命令
- python中的静态方法如何调用_关于Python中如何使用静态、类、抽象方法的权威指南(译)...
- ebook_[EBOOK]十大Java性能问题
- 【机器视觉学习笔记】Hough变换直线检测(C++)
- C语言对stm32f103程序,STM32F103WIFI程序C语言
- IntelAI开发平台OpenVINO
- android app源码大全_Android秋招秘籍,看我如何搞定BAT,Vivo,爱奇艺
- 从职业方向,谈程序员如何突破成长瓶疾,我们该怎么去学习?
- 【深入理解JVM】运行时数据区域:java虚拟机栈
- 【技巧】安卓版按键精灵手机抓抓 取色取坐标 获取屏幕触点坐标
- 司徒正美:为什么类 React 框架层出不穷?
- 论文阅读:LinkNet: Exploiting Encoder Representations forEfficient Semantic Segmentation
- 设计模式之美总结(结构型篇)
- HTML语言中代表网页标题的标签是,html标题标记 在html中,标题标签一共有几级?
- 零基础入门python好学么
- 网站可行性报告范文_鄂州编写可行性报告公司2020范文格式
- bzoj 1233 干草堆tower 优先队列优化dp
- 【笔记】封神榜游戏设计VR
- Golang入门笔记(14)—— 错误处理