测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇
测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇
在前面我分享了几个新浪微博的自动化脚本的实现,下面我们继续实现新的需求,功能需求如下:
1,登陆微博
2,抓取评论页内容
3,用正则表达式过滤出用户名,评论时间和评论内容
4,内容存入数据库
5,统计评论次数
# -*- 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('<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 MySQLdb class 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 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):<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()
上一层可以通过数据驱动模块,处理excel表,进行驱动,调用以上代码实现自动化测试。
测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇的更多相关文章
- 测试开发Python培训:抓取新浪微博抓取数据-技术篇
测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的se ...
- 测试开发Python培训:模拟登录新浪微博-技术篇
测试开发Python培训:模拟登录新浪微博-技术篇 一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技 ...
- 测试开发Python培训:自动发布新浪微博-技术篇
测试开发Python培训:自动发布新浪微博-技术篇 在前面我们教大家如何登陆,大家需要先看自动登陆新浪微博(http://www.cnblogs.com/laoli0201/articles/48 ...
- 测试开发Python培训:实现屌丝的图片收藏愿望(小插曲)
测试开发Python培训:实现屌丝的图片收藏愿望(小插曲) 男学员在学习python的自动化过程中对于爬虫很感兴趣,有些学员就想能收藏一些图片,供自己欣赏.作为讲师只能是满足愿望,帮助大家实现对美的追 ...
- python抓取新浪微博评论并分析
1,实现效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2xhbnphbw==/font/5a6L5L2T/fontsize/400/fill ...
- 一篇文章教会你使用Python定时抓取微博评论
[Part1--理论篇] 试想一个问题,如果我们要抓取某个微博大V微博的评论数据,应该怎么实现呢?最简单的做法就是找到微博评论数据接口,然后通过改变参数来获取最新数据并保存.首先从微博api寻找抓取评 ...
- Python爬虫抓取微博评论
第一步:引入库 import time import base64 import rsa import binascii import requests import re from PIL impo ...
- 测试开发Python培训:实现屌丝的黄色图片收藏愿望(小插曲)
男学员在学习python的自动化过程中对于爬虫很感兴趣,有些学员就想能收藏一些情色图片,供自己欣赏.作为讲师只能是满足愿望,帮助大家实现对美的追求,http://wanimal.lofter.com/ ...
- python(27) 抓取淘宝买家秀
selenium 是Web应用测试工具,可以利用selenium和python,以及chromedriver等工具实现一些动态加密网站的抓取.本文利用这些工具抓取淘宝内衣评价买家秀图片. 准备工作 下 ...
随机推荐
- Java Web(五) JSP详解(四大作用域九大内置对象等)
前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...
- Pro Git CN Plus
Git — The stupid content tracker, 傻瓜内容跟踪器.Linus 是这样给我们介绍 Git 的. Git 是用于 Linux 内核开发的版本控制工具.与常用的版本控制工具 ...
- Linux:- comm命令的妙用
参数://假设a集.b集.ab交集 # comm [options] textA textB options: 1.表示a集除去ab交集重叠那部分: 2.表示b集除去ab交集重叠那部分: 3.表示ab ...
- jprofiler安装图解 ( 7_1 )
环境: 1.sun jdk1.6.0 2.jprofiler_windows_6_0_2.exe 安装 1. jdk, 安装略... 2. jprofiler安装 一路next 到Enter lice ...
- Nginx错误页面优雅显示
一.Nginx错误页面优雅显示的原因? 当我们访问网站时,由于特殊的原因,经常会出现诸如403,404,503等错误,这极大的影响用户的访问体验,所以我们很有必要做一下错误页面的优雅显示,以提升用 ...
- C#实现分页组件
分页无论是前端和后端,基本都有广泛应用!下面通过一个小小案例完成这个分页效果: 参数含义:string urlFormat: 要传给服务器端的URL地址格式,方便在点超链接时进行相应的跳转 long ...
- FineUIMvc随笔(4)自定义回发参数与自定义回发
声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 不能忘却的回发 在上一篇文章中,我们对FineUIMvc中的回发进行了详细描述,目的是为了告诉大家: 1. FineUIMvc中 ...
- 在Signalr的Hub中写方法实现与安卓的数据交互
简介: 实现数据实时刷新:SignalR 后台服务:.NET/WebAPI 为了减轻web的压力,将接口中接收数据的方法写到SignalR的Hub中 在此放一小段代码给自己加深下印象,博主有点健忘.. ...
- React组件开发(一)初识React
*React不属于MVC.MVVM,只是单纯的V层. *React核心是组件(提高代码复用率.降低测试难度.代码复杂度). *自动dom操作,状态对应内容. *React核心js文件:react.js ...
- Java线程池ExecutorService
开篇前,我们先来看看不使用线程池的情况: new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override ...