1,实现效果


2,数据库


3。主要步骤

1,输入账号password,模拟新浪微博登陆

2,抓取评论页的内容

3。用正則表達式过滤出username,评论时间和评论内容

4,将得到的内容存入数据库

5,用SQL语句实现其它功能:比如统计评论次数等

4,具体步骤

# -*- coding: utf-8 -*-
import requests
import base64
import re
import urllib
import rsa
import json
import binascii
import MySQLdbclass Userlogin:def userlogin(self,username,password,pagecount):session = requests.Session()url_prelogin = 'http://login.sina.com.cn/sso/prelogin.php?

entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.5)&_=1364875106625' url_login = 'http://login.sina.com.cn/sso/login.php?

client=ssologin.js(v1.4.5)' #get servertime,nonce, pubkey,rsakv resp = session.get(url_prelogin) json_data = re.search('\((.*)\)', resp.content).group(1) data = json.loads(json_data) servertime = data['servertime'] nonce = data['nonce'] pubkey = data['pubkey'] rsakv = data['rsakv'] # calculate su su = base64.b64encode(urllib.quote(username)) #calculate sp rsaPublickey= int(pubkey,16) key = rsa.PublicKey(rsaPublickey,65537) message = str(servertime) +'\t' + str(nonce) + '\n' + str(password) sp = binascii.b2a_hex(rsa.encrypt(message,key)) postdata = { 'entry': 'weibo', 'gateway': '1', 'from': '', 'savestate': '7', 'userticket': '1', 'ssosimplelogin': '1', 'vsnf': '1', 'vsnval': '', 'su': su, 'service': 'miniblog', 'servertime': servertime, 'nonce': nonce, 'pwencode': 'rsa2', 'sp': sp, 'encoding': 'UTF-8', 'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', 'returntype': 'META', 'rsakv' : rsakv, } resp = session.post(url_login,data=postdata) # print resp.headers login_url = re.findall('replace\(\'(.*)\'\)',resp.content) # respo = session.get(login_url[0]) uid = re.findall('"uniqueid":"(\d+)",',respo.content)[0] url = "http://weibo.com/u/"+uid respo = session.get(url) # print respo.content #获取首页的内容html #以上为成功登陆微博 #获取数据库连接 conn = MySQLdb.connect(host='localhost',user='root',passwd='root',db='weiboanalysis',charset='utf8') curs = conn.cursor() curs.execute('delete from outbox') myheaders={} myheaders['set-cookie'] = resp.headers['set-cookie'] myheaders['Referer'] = 'http://weibo.com/comment/inbox?leftnav=1&wvr=5' # print myheaders #下面是開始抓取信息 for i in range(1,int(pagecount)+1): forwardUrl = """http://weibo.com/comment/inbox?

topnav=1&wvr=5&f=1&page=%d"""%i r = session.post(forwardUrl,headers=myheaders) page = r.content # print page #获取并过滤出用户名,存在pagename数组 pagename = re.findall('<a\s*title=[^>]*usercard[^>]*>',page) for n in range(0,len(pagename)): pagename[n] = pagename[n].split('\\"')[1] #获取并过滤出评论时间,存在pagetime数组 pagetime = re.findall('WB_time S_func2[^>]*>[^>]*>',page) for t in range(0,len(pagetime)): pagetime[t] = pagetime[t].split('>')[1].split('<')[0] #获取并过滤出评论内容。存在pagecont数组 pagecont={} pagecontent = re.findall(r'<p class=\\\"detail\\(.*?

)<\\\/p>',page) for t in range(0,len(pagecontent)): a = pagecontent[t].split("<\/a>") b = a[len(a)-1] c = re.sub(r"<img(.*?)>",'[表情]',b) #去掉图片表情 d = re.sub(r"<span(.*?)span>",'',c) pagecont[t] = re.sub(r"\\t|:|:",'',d) #去掉最后的/t和最前的冒号 for index in range(0,len(pagetime)): sql = """ insert into outbox(uname,time,text) values('%s','%s','%s')"""%(pagename[index],pagetime[index],pagecont[index]) curs.execute(sql) conn.commit() curs.close() conn.close()

从数据库获取评论并分析:

# -*- encoding:utf-8 -*-
__author__ = 'lanzao'
import MySQLdbclass OutboxAnalysis:def getMost(self,num):<span style="white-space:pre">        </span>#查看评论最多的前num个人conn =  MySQLdb.connect(host='localhost',user='root',passwd='root',db='weiboanalysis',charset='utf8')curs = conn.cursor()sql="""select uid,uname,count(uname) as countfrom outboxgroup by unameorder by count(uname) desclimit %d;"""% int(num)curs.execute(sql)conn.commit()print "******************评论次数排行榜************************"for item in curs.fetchall():print item[1]+" ",str(item[2])+"次"print "*******************************************************"curs.close()conn.close()def getUser(self,user):<span style="white-space:pre">  </span>#查看某用户评论conn =  MySQLdb.connect(host='localhost',user='root',passwd='root',db='weiboanalysis',charset='utf8')curs = conn.cursor()curs.execute("""select * from outbox where uname='%s'"""%user)print "*****************************************"for item in curs.fetchall():print item[1]+"   ",item[2]+"   ",item[3]print "*****************************************"curs.close()conn.close()

程序入口:

# -*- encoding:utf-8 -*-
__author__ = 'lanzao'from OutboxAnalysis import OutboxAnalysis
from UserLogin import Userlogin;def menu():print"""选择你想要的功能:0,退出1,查询评论数最多的人2,查询某用户的全部评论3,登陆微博并抓取评论"""
def menuChoice():choice = raw_input("输入你的选择(0/1/2/3):")while choice != '0':if choice == '3':username = raw_input("输入新浪微博账号:")password = raw_input("输入密码:")pagecount = raw_input("输入想要抓取评论的页数:")o = Userlogin()o.userlogin(username=username,password=password,pagecount=pagecount)print "抓取完成"choice = raw_input("输入你的选择(0/1/2/3):")elif choice == '1':num = raw_input("你想查看前几个人?请输入数字:")o = OutboxAnalysis()o.getMost(num)choice = raw_input("输入你的选择(0/1/2/3):")elif choice == '2':name = raw_input("你想查看谁的评论:")o = OutboxAnalysis()o.getUser(name)choice = raw_input("输入你的选择(0/1/2/3):")else:print """choice=%s"""%choiceprint "输入无效"choice = raw_input("输入你的选择(0/1/2/3):")menu()
menuChoice()

5。对应模块的安装

import requests
import base64
import re
import urllib
import rsa
import json
import binascii
import MySQLdb

推荐好用的Python的包管理工具:pip

安装PIP的教程网上非常多。装好后,直接在CMD的黑窗体里用命令pip install xxx就能方便得下载安装某模块啦~

本人新手菜鸟一仅仅,假设有什么地方没有写好或者写错的地方,欢迎各位红领巾批评指出。

全部代码基本都贴出来了,假设有什么疑惑,也非常欢迎一起讨论。共同进步

转载于:https://www.cnblogs.com/blfbuaa/p/7061244.html

python抓取新浪微博评论并分析相关推荐

  1. python微博评论抓取_python抓取新浪微博评论并分析

    1,实现效果 2,数据库 3.主要步骤 1,输入账号password,模拟新浪微博登陆 2,抓取评论页的内容 3.用正則表達式过滤出username,评论时间和评论内容 4,将得到的内容存入数据库 5 ...

  2. 分析网易云歌曲评论分析加密的JS并且解密,并使用Python抓取歌曲评论

    转载自分析网易云歌曲评论分析加密的JS并且解密,并使用Python抓取歌曲评论 - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn 原文无法显 ...

  3. python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?

    开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...

  4. 【数据分析大作业 爬虫+数据清洗+可视化分析】Python抓取视频评论并生成词云、情感指数柱状图、性别比例饼图及评论信息表格

    目录 一些将BV号转化为AV号的变量设置 词云屏蔽词设置 使用代理IP(直接从IP网站复制的) 爬虫的函数 将结果写入表格中 下面是主函数,首先看看能不能抓取到,还有一些变量设置 开始循环爬评论 对一 ...

  5. Python爬取新浪微博评论数据,了解一下?

    开发工具 **Python版本:**3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装 ...

  6. python每隔半个小时执行一次_一篇文章教你用Python抓取微博评论

    [Part1--理论篇] 试想一个问题,如果我们要抓取某个微博大V微博的评论数据,应该怎么实现呢?最简单的做法就是找到微博评论数据接口,然后通过改变参数来获取最新数据并保存.首先从微博api寻找抓取评 ...

  7. 一篇文章教会你使用Python抓取微博评论

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  8. python抓取经典评论_通过Python抓取天猫评论数据

    每日干货好文分享丨请点击+关注 对商业智能BI.数据分析挖掘.大数据.机器学习感兴趣的加微信tsbeidou,邀请你进入交流群. 欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析 ...

  9. Python干货:教你如何利用python抓取微博评论,利用python知道更多微博大V有趣搞笑评论!

    [Part1--理论篇] 试想一个问题,如果我们要去抓取某个微博大V微博的评论数据,应该怎样去实现呢?最简单的做法就是找到微博评论数据接口,然后通过改变参数来获取最新数据并保存.首先寻找从微博抓取评论 ...

最新文章

  1. qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)
  2. java dolayout,Component
  3. IFTTT 加入开源大家庭,已开源5个项目
  4. 请在请求中携带deviceid参数_日常工作中最容易犯的几个并发错误,你中了几个?...
  5. bilibili源码_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
  6. FreeMarker教程
  7. Cloud for Customer Silverlight UI部分源代码
  8. Autodesk Flame 2022 for Mac - 高级三维视觉特效合成软件
  9. 量子计算与量子信息_量子计算会破坏安全性吗?
  10. python编写一个弹球游戏_Python实战案例:用Python写一个弹球游戏,就是这么强
  11. Oracle学习 实战心得总结
  12. MVVM模式下,自定义用户控件不执行COMMAND的原因
  13. oracle跳出while循环,【shell编程】for循环、while循环、break跳出循环、continue结束本次循环和exit退出整个脚本...
  14. Spark 0.9.1 MLLib 机器学习库简介
  15. 3Dmax读取丢失的贴图的方法
  16. 实时数据处理简单分析
  17. 卸载系统应用动画气泡特效创建守护服务进程管理(ActivtyManager提供批量操作)桌面小控件AppWidget
  18. 国内页游移植手游产品排名:现状和未来
  19. paypal简单分享
  20. 大数据基础之Spark——Spark pregel详细过程,一看就懂

热门文章

  1. 在计算机上格式u盘启动,四大步,轻松让U盘启动电脑
  2. 监管发文:规范大学生群体消费贷款,避免陷入消费贷款陷阱
  3. c++ 编译添加dll_linux下编写C/C++代码须知———串讲
  4. 在ssd中显示map tensorflow代码_PyTorch 1.3重磅发布,又要和TensorFlow搞事情了
  5. 开发日记-20190828 关键词 读书笔记《Unix环境高级编程(第二版)》DAY 4
  6. android VectorDrawable使用笔记(二)
  7. 交通违章行为,和记分、处罚条款——不仅要扣分,还要罚钱哪,没有不罚钱的扣分!!!...
  8. 机器学习案例 特征组合——高帅富 冷启动——从微博等其他渠道搜集数据进行机器学习 用户年龄——线性分段处理...
  9. 无损压缩算法历史——熵编码是最早出现的,后来才有Lzx这些压缩算法
  10. 破解phpstorm,webstorm ,pycharm ,intellij IDEA