在上一篇博客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登陆新浪微博用户信息相关推荐

  1. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) -- 数据的持久化--使用MongoDB存储爬取的数据 最近项目有些忙,很多需求紧急上线,所以一直没能完善< 使用 ...

  2. python爬取微博用户正文_基于Python的新浪微博用户信息爬取与分析

    基于 Python 的新浪微博用户信息爬取与分析 邓文萍 [摘 要] 摘要:本文设计并实现了一个微博用户信息爬取与分析系统 , 利用 Cookie 实现了用户的模拟登录 , 使用 Python 语言的 ...

  3. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) —— 编写一个基本的 Spider 爬取微博用户信息

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(一) -- 新建爬虫项目 在上一篇我们新建了一个 sina_scrapy 的项目,这一节我们开始正式编写爬虫的代码. 选择目标 ...

  4. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) —— 数据的持久化——使用MongoDB存储爬取的数据

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) -- 编写一个基本的 Spider 爬取微博用户信息 在上一篇博客中,我们已经新建了一个爬虫应用,并简单实现了爬取一位微 ...

  5. Scrapy爬取新浪微博用户信息、用户微博及其微博评论转发

    项目介绍 新浪微博是国内主要的社交舆论平台,对社交媒体中的数据进行采集是舆论分析的方法之一. 本项目无需cookie,可以连续爬取一个或多个新浪微博用户信息.用户微博及其微博评论转发. 实例 选择爬取 ...

  6. python携带cookie登陆

    python携带cookie登陆 1.获取cookie值 代码如下(示例): def get_cookie():browser = webdriver.Chrome()browser.get(&quo ...

  7. 爬取新浪微博用户信息及微博内容并进行可视化分析

    参考博文:https://blog.csdn.net/asher117/article/details/82793091 主要代码如下图 from selenium import webdriver ...

  8. python爬取b站用户_用Python爬取bilibili全站用户信息

    教你用Python爬取哔哩哔哩全站用户信息 运行 下载 git clone https://github.com/cexll/bili_user_Spider.git 复制代码 运行环境 Window ...

  9. 用Python爬取bilibili全站用户信息

    教你用Python爬取哔哩哔哩全站用户信息 运行 下载 git clone https://github.com/cexll/bili_user_Spider.git 复制代码 运行环境 Window ...

  10. python爬取知乎用户信息泄露_scrapy实战--爬取知乎用户信息(上)

    背景 使用Scrapy分布式爬取知乎所有用户个人信息! 项目地址 爬取知乎所有用户 大规模抓取静态网页Scrapy绝对是利器!当然也可以使用requests库来自己实现,但是要自己写过滤器等组件,既然 ...

最新文章

  1. 基于Spring cloud Ribbon和Eureka实现客户端负载均衡
  2. powershell如何编程C语言,如何用C语言执行powershell命令
  3. python中的静态方法如何调用_关于Python中如何使用静态、类、抽象方法的权威指南(译)...
  4. ebook_[EBOOK]十大Java性能问题
  5. 【机器视觉学习笔记】Hough变换直线检测(C++)
  6. C语言对stm32f103程序,STM32F103WIFI程序C语言
  7. IntelAI开发平台OpenVINO
  8. android app源码大全_Android秋招秘籍,看我如何搞定BAT,Vivo,爱奇艺
  9. 从职业方向,谈程序员如何突破成长瓶疾,我们该怎么去学习?
  10. 【深入理解JVM】运行时数据区域:java虚拟机栈
  11. 【技巧】安卓版按键精灵手机抓抓 取色取坐标 获取屏幕触点坐标
  12. 司徒正美:为什么类 React 框架层出不穷?
  13. 论文阅读:LinkNet: Exploiting Encoder Representations forEfficient Semantic Segmentation
  14. 设计模式之美总结(结构型篇)
  15. HTML语言中代表网页标题的标签是,html标题标记 在html中,标题标签一共有几级?
  16. 零基础入门python好学么
  17. 网站可行性报告范文_鄂州编写可行性报告公司2020范文格式
  18. bzoj 1233 干草堆tower 优先队列优化dp
  19. 【笔记】封神榜游戏设计VR
  20. Golang入门笔记(14)—— 错误处理

热门文章

  1. 好心情:抗抑郁药物的不良反应和处理措施
  2. C语言练习——基础篇
  3. 如何在win10官网下载系统
  4. glTexSubImage2D的使用详解
  5. win10电脑外接音响没声音怎么回事?win10电脑外接音响没声音的修复方法
  6. 在日软件工程师的远虑近忧
  7. sw如何缩放装配体_SolidWorks大装配体技巧
  8. 03筑基期——循环、嵌套循环、循环跳转、随机数(算法基础又篇)
  9. 焦作大学计算机专业分数线,焦作大学历年分数线 2021焦作大学录取分数线
  10. 此网站的安全证书有问题