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 抓取指定关键词的百度指数

    百度指数很多时候在我们做项目的时候会很有帮助,从搜索引擎的流量端给到我们一些帮助,比如:家具行业的销量跟"装修","新房","二手房"等关键 ...

  2. python爬取微博评论点赞数_python爬取点赞评论数

    马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 清歌终南 于 2018-3-24 22:35 编辑 看了小甲鱼老师的爬取网易云音乐热门评 ...

  3. python公众号留言功能_Python 爬取公众号文章、评论

    前段时间有个爬取公众号评论小需求,花了几天查了不少资料,实现方案有好几种,最后其中一种得以实现.参考 [Python爬虫]微信公众号历史文章和文章评论API分析 . 本人是 Python 小白,会忽略 ...

  4. python微信小程序爬虫_Python爬取微信小程序实战(通用)

    背景介绍 最近遇到一个需求,大致就是要获取某个小程序上的数据.心想小程序本质上就是移动端加壳的浏览器,所以想到用Python去获取数据.在网上学习了一下如何实现后,记录一下我的实现过程以及所踩过的小坑 ...

  5. python 微博自动点赞软件_Python微博工具人,每日一句英语自动发

    原标题:Python微博工具人,每日一句英语自动发 关注 来源 | 萝卜大杂烩(ID:luobodazahui) 如若转载请联系原公众号 最近在研究用 Python 来制作各个类别的机器人,今天先来分 ...

  6. python中max函数用法_Python中max函数用法实例分析

    Python中max函数用法实例分析 更新时间:2015年07月17日 15:45:09 作者:优雅先生 这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用 ...

  7. python大众点评霸王餐_python抓取大众点评商户信息

    数据说明: 本次爬取大众点评共8个字段信息,包括: 商户名字, 口味评分, 环境评分,服务评分,人均价格,评论数量,地址,商户星级 然后把数据存入excel表格 一 .首页部分 我们可以看到有很多分类 ...

  8. python爬去百度音乐_Python抓取百度音乐。

    今天挑战下百度音乐抓取,先用Chrome分析下请求的链接. 最关键的就是这个链接 http://play.baidu.com/data/music/songlink 请求这个带上songid就能返回给 ...

  9. python玩王者荣耀皮肤_python 抓取王者荣耀皮肤 代码2年了 依旧可以抓取高清 王者皮肤...

    #!/usr/bin/env python #-*- coding: utf-8 -*- """抓取王者荣耀皮肤""" importrequ ...

最新文章

  1. 用ASDM管理思科PIX防火墙
  2. Linux安装Redis服务
  3. Oracle的dbf文件迁移
  4. ajaxGet 获取封装
  5. ZoomIn插件制作(VS2010 + arcObject10.2 )全网应该是唯一的
  6. python 特殊字符作为分割行 调整非时间开头格式
  7. xlinux中实现mdev
  8. 最简单的YUV422转jpg的例程
  9. 【西祠日志】【19】【20】有人说,21天可以养一种习惯
  10. 北工大2009计算机系新生李洋,强势围观!初次入校,请您多多关照……
  11. zabbix如何监控ip地址_获取zabbix上所有主机的IP和主机名的实例代码
  12. 关于YOLOv7的分析
  13. 02-PDI(Kettle)导入与导出
  14. 如何快速有效提升网站的百度排名
  15. 顶点从观察空间变换到裁剪空间
  16. 斐讯K3刷OPENWRT(LEDE)-使用 KodExplorer 搭建私有云存储(nginx+php7)学习记录
  17. C语言数据结构——遍历二叉树
  18. ExceptionHandler异常处理
  19. 【ffmpeg教程】【无损快速转换】两行代码 快速无损转换mkv flv视频文件 第一期
  20. 突然35岁:捡点我的职业生涯(转)

热门文章

  1. ffmpeg4教程2:采集桌面声音保存为pcm
  2. 清华大学计算机学院曹伦郗,四川文理第一名填报北大 来看看高分学霸们最后选了啥专业_四川在线...
  3. Excel函数组合(一) - VLOOKUP和MATCH组合
  4. 基于基于粒子群优化算法的微电网调度(Matlab代码实现)
  5. 四舍五入保留一位小数
  6. python 实现回合制游戏
  7. 时隙式Aloha通信分析,泊松分布
  8. 变频电源滤波电容的作用是怎样的
  9. PMP 考试 、PMP 备考方案
  10. android 动画延时执行,Android Animation --ScaleAnimation