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 MySQLdb

class 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(']*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('

#获取并过滤出评论内容。存在pagecont数组

pagecont={}

pagecontent = re.findall(r'

)',page)

for t in range(0,len(pagecontent)):

a = pagecontent[t].split("")

b = a[len(a)-1]

c = re.sub(r"",'[表情]',b) #去掉图片表情

d = re.sub(r"",'',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 MySQLdb

class OutboxAnalysis:

def getMost(self,num):#查看评论最多的前num个人

conn = MySQLdb.connect(host='localhost',user='root',passwd='root',db='weiboanalysis',charset='utf8')

curs = conn.cursor()

sql="""

select uid,uname,count(uname) as count

from outbox

group by uname

order by count(uname) desc

limit %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):#查看某用户评论

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"""%choice

print "输入无效"

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就能方便得下载安装某模块啦~

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

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

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

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

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

  2. python爬取微博恶评_Python爬取新浪微博评论数据,了解一下?

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

  3. python 豆瓣评论删除_Python抓取豆瓣《白夜追凶》的评论并且分词

    最近网剧<白夜追凶>在很多朋友的推荐下,开启了追剧模式,自从琅琊榜过后没有看过国产剧了,此剧确实是良心剧呀!一直追下去,十一最后两天闲来无事就抓取豆瓣的评论看一下 相关代码提交到githu ...

  4. python类百度百科_Python抓取百度百科数据

    抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分数据.本实例抓取百度百科python词条页面以及python相关词条页面的标题和简介. 分析目标:分析要抓取的url的格式,限定抓取范围.分析要抓 ...

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

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

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

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

  7. python爬取微博数据存入数据库_Python爬取新浪微博评论数据,写入csv文件中

    因为新浪微博网页版爬虫比较困难,故采取用手机网页端爬取的方式 操作步骤如下: 1. 网页版登陆新浪微博 2.打开m.weibo.cn 3.查找自己感兴趣的话题,获取对应的数据接口链接 4.获取cook ...

  8. python音乐的数据抓取与分析_python抓取网易云音乐热评做词图数据分析

    最近就有一部"怀旧"题材的电影,未播先火,那就是刘若英的处女作--<后来的我们>.青春,爱情,梦想,一直是"怀旧"题材的核心要素,虽然电影现在还未上 ...

  9. python足球大数据分析_Python 抓取欧洲足球联赛数据进行大数据分析

    摘要: 背景 Web Scraping 在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤 数据的采集和获取 数据的清洗,抽取,变形和装载 数据的分析,探索和预测 数据的展 ...

  10. python获取网页图片_python抓取网页中的图片示例

    python抓取网页中的图片示例 代码如下: #coding:utf8 import re import urllib def getHTML(url): page = urllib.urlopen( ...

最新文章

  1. spring 基于XML的申明式AspectJ通知的执行顺序
  2. B1059 C语言竞赛
  3. 大跌眼镜!杭州一程序员年薪 30 万,竟靠偷车厘子缓解压力?
  4. 计算机批量管理,如何将计算机电脑批量加入域
  5. java中使用递归方法删除_删除和拷贝文件递归方法(Java实现)
  6. C++数字是否为质数的函数的简单有效实现(附完整源码)
  7. 蚂蚁王旭:开源协作如何提升业界的安全?
  8. 网络:WiFi6和WiFi5的区别介绍
  9. c++ socket学习(1.6)
  10. 剑指Offer - 面试题59 - II. 队列的最大值(deque模拟单调栈)
  11. 大话 JavaScript 动画
  12. python文件下载学习
  13. 网易互娱的数据库选型和 TiDB 应用实践
  14. 神经网络发展的三个阶段,人工神经网络的发展
  15. 计算机移动监控,AI技术和5G技术赋能移动监控领域,加速移动监控产品的迭代...
  16. 各种机械键盘轴的区别,到底什么轴好
  17. 南京财经的计算机科学与技术,2021年南京财经大学计算机科学与技术(081200)考研专业目录_硕士研究生考试范围 - 学途吧...
  18. Android5.0+win8双系统平板PK苹果ipad
  19. CNN结构的演变+几种典型的网络介绍+CNN设计准则
  20. python爬取论坛付费内容_Python进阶量化交易专栏场外篇20-爬虫抓取股票论坛帖子...

热门文章

  1. DevExpress DXperience 的本地化(汉化)方法
  2. java工程师的关键绩效指标_绩效考核表(JAVA高级工程师)
  3. CMM3下的应用及改进
  4. 分享超实用的web网页开发框架
  5. 推荐20个值得收藏的前端开源项目
  6. 前端项目部署到服务器
  7. lg2用计算机怎么算,lg计算器(log计算器在线)
  8. 预付费客户抄表管理系统的应用
  9. linux发行版本中 图形方式的运行级,在大多数 Linux 发行版本中,图形方式的运行级定义为?...
  10. win10程序员计算器面板按钮介绍