测试开发Python培训:抓取新浪微博抓取数据-技术篇
测试开发Python培训:抓取新浪微博抓取数据-技术篇
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。在poptest的selenium的课程中,我们在培训的课程里讲python的语言,也是通过项目实战的方式进行讲解,前期分享了个新浪微博的登陆功能,这次在通过抓取新浪微博数据进一步讲解脚本。(大家对课程感兴趣,请加qq:564202718)
微博有发布微博功能,微博发布后需要验证内容,那么如何验证微博发布数据的正确性,首先要获取微博上的数据,下面我们就用爬虫技术来实现抓取数据,在Poptest课堂上我们用另外一个商业项目来做的案例实现,在这里为了大家都能学习到我用微博来举例。 报名学习课程请加qq:564202718
# import 这边需要注意的是只有一个rsa这个模块是需要install的,其他的都是内置
import
re , urllib.parse , urllib.request , http.cookiejar , base64 , binascii , rsa
# 以下4行代码说简单点就是让你接下来的所有get和post请求都带上已经获取的cookie,因为稍大些的网站的登陆验证全靠cookie
cj
=
http.cookiejar.LWPCookieJar()
cookie_support
=
urllib.request.HTTPCookieProcessor(cj)
opener
=
urllib.request.build_opener(cookie_support , urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
# 封装一个用于get的函数,新浪微博这边get出来的内容编码都是-8,所以把utf-8写死在里边了,真实项目中建议根据内容实际编码来决定
def
getData(url) :
request
=
urllib.request.Request(url)
response
=
urllib.request.urlopen(request)
text
=
response.read().decode(
'utf-8'
)
return
text
# 封装一个用于post的函数,验证密码和用户名都是post的,所以这个postData在本demo中专门用于验证用户名和密码
def
postData(url , data) :
# headers需要我们自己来模拟
headers
=
{
'User-Agent'
:
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'
}
# 这里的urlencode用于把一个请求对象用'&'来接来字符串化,接着就是编码成utf-8
data
=
urllib.parse.urlencode(data).encode(
'utf-8'
)
request
=
urllib.request.Request(url , data , headers)
response
=
urllib.request.urlopen(request)
text
=
response.read().decode(
'gbk'
)
return
text
def
login_weibo(nick , pwd) :
#==========================获取servertime , pcid , pubkey , rsakv===========================
# 预登陆请求,获取到若干参数
prelogin_url
=
'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.15)&_=1400822309846'
%
nick
preLogin
=
getData(prelogin_url)
# 下面获取的四个值都是接下来要使用的
servertime
=
re.findall(
'"servertime":(.*?),'
, preLogin)[
0
]
pubkey
=
re.findall(
'"pubkey":"(.*?)",'
, preLogin)[
0
]
rsakv
=
re.findall(
'"rsakv":"(.*?)",'
, preLogin)[
0
]
nonce
=
re.findall(
'"nonce":"(.*?)",'
, preLogin)[
0
]
#===============对用户名和密码加密================
# 好,你已经来到登陆新浪微博最难的一部分了,如果这部分没有大神出来指点一下,那就真是太难了,我也不想多说什么,反正就是各种加密,最后形成了加密后的su和sp
su
=
base64.b64encode(bytes(urllib.request.quote(nick) , encoding
=
'utf-8'
))
rsaPublickey
=
int
(pubkey ,
16
)
key
=
rsa.PublicKey(rsaPublickey ,
65537
)
# 稍微说一下的是在我网上搜到的文章中,有些文章里并没有对拼接起来的字符串进行bytes,这是python3的新方法好像是。rsa.encrypt需要一个字节参数,这一点和之前不一样。其实上面的base64.b64encode也一样
message
=
bytes(
str
(servertime)
+
'\t'
+
str
(nonce)
+
'\n'
+
str
(pwd) , encoding
=
'utf-8'
)
sp
=
binascii.b2a_hex(rsa.encrypt(message , key))
#=======================登录=======================
#param就是激动人心的登陆post参数,这个参数用到了若干个上面第一步获取到的数据,可说的不多
param
=
{
'entry'
:
'weibo'
,
'gateway'
:
1
,
'from'
: '
' , '
savestate
' : 7 , '
useticket
' : 1 , '
pagerefer
' : '
http:
/
/
login.sina.com.cn
/
sso
/
logout.php?entry
=
miniblog&r
=
http
%
3A
%
2F
%
2Fweibo
.com
%
2Flogout
.php
%
3Fbackurl
%
3D
' , '
vsnf
' : 1 , '
su
' : su , '
service
' : '
miniblog
' , '
servertime
' : servertime , '
nonce
' : nonce , '
pwencode
' : '
rsa2
' , '
rsakv
' : rsakv , '
sp
' : sp , '
sr
' : '
1680
*
1050
' ,
'encoding'
:
'UTF-8'
,
'prelt'
:
961
,
'url'
:
'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack'
}
# 这里就是使用postData的唯一一处,也很简单
s
=
postData(
'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)'
, param)
# 好了,当你的代码执行到这里时,已经完成了大部分了,可是有很多爬虫童鞋跟我一样还就栽在了这里,假如你跳过这里直接去执行获取粉丝的这几行代码你就会发现你获取的到还是让你登陆的页面,真郁闷啊,我就栽在这里长达一天啊
# 好了,我们还是继续。这个urll是登陆之后新浪返回的一段脚本中定义的一个进一步登陆的url,之前还都是获取参数和验证之类的,这一步才是真正的登陆,所以你还需要再一次把这个urll获取到并用get登陆即可
urll
=
re.findall(
"location.replace\(\'(.*?)\'\);"
, s)[
0
]
getData(urll)
#======================获取粉丝====================
# 如果你没有跳过刚才那个urll来到这里的话,那么恭喜你!你成功了,接下来就是你在新浪微博里畅爬的时候了,获取到任何你想获取到的数据了!
# 可以尝试着获取你自己的微博主页看看,你就会发现那是一个多大几百kb的文件了
text
=
getData(
'http://weibo.com/527891819/home?wvr=5&lf=reg'
)
fp
=
open
(
'yeah.txt'
,
'w'
, encoding
=
'utf-8'
)
fp.write(text)
fp.close()
login_weibo(
'你的微博邮箱'
,
'你的微博密码'
)
测试开发Python培训:抓取新浪微博抓取数据-技术篇的更多相关文章
- 测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇
测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇 在前面我分享了几个新浪微博的自动化脚本的实现,下面我们继续实现新的需求,功能需求如下: 1,登陆微博 2,抓取评论页内容3,用正则表 ...
- 测试开发Python培训:模拟登录新浪微博-技术篇
测试开发Python培训:模拟登录新浪微博-技术篇 一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技 ...
- 测试开发Python培训:自动发布新浪微博-技术篇
测试开发Python培训:自动发布新浪微博-技术篇 在前面我们教大家如何登陆,大家需要先看自动登陆新浪微博(http://www.cnblogs.com/laoli0201/articles/48 ...
- 测试开发Python培训:实现屌丝的图片收藏愿望(小插曲)
测试开发Python培训:实现屌丝的图片收藏愿望(小插曲) 男学员在学习python的自动化过程中对于爬虫很感兴趣,有些学员就想能收藏一些图片,供自己欣赏.作为讲师只能是满足愿望,帮助大家实现对美的追 ...
- 测试开发Python培训:实现屌丝的黄色图片收藏愿望(小插曲)
男学员在学习python的自动化过程中对于爬虫很感兴趣,有些学员就想能收藏一些情色图片,供自己欣赏.作为讲师只能是满足愿望,帮助大家实现对美的追求,http://wanimal.lofter.com/ ...
- 《自动化平台测试开发-Python测试开发实战》新书出版了
首先 第一本书,当初在百度阅读初步写了个电子版,刚一上线不久即收到了数百位读者朋友阅读收藏购买,于是顺利成章就出版了纸质书. <软件自动化测试开发>认真看过的读者应该都知道,介绍的主要是自 ...
- 测试开发【提测平台】分享9-DBUntils优化数据连接&实现应用搜索和分页功能
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 从本期开始知识点讲以思维导图的形式给出,内容点会按照讲解-应用-展示的形式体现,这样会更清晰些. DBUntils连接池 在项目中链接数据 ...
- 《自动化平台测试开发-Python测试开发实战》第2次印刷
书籍货源比较紧张.紧张啊,如此短的时间,已经第2次印刷.第2次印刷. 第2次印刷. 同时该书已确认与台湾出版社合作翻译成繁体版,甚至有可能与国外出版社合作翻译成英文版. 2018年7月 第1次印刷 2 ...
- Linux下开发python django程序(模板设置和载入数据)
1.添加templates文件夹 2.修改settings.py文件 import os #引用 os模块 BASE_DIR = os.path.dirname(os.path.dirname(os. ...
随机推荐
- Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用
前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...
- C++测试利器--google test开源测试框架
资料 偶然发现了google的测试框架gtest,马上试了下,效果挺不错,特别是对于写c++的人来说,方便很多.以前自己写c++的模块,通常是写好了模块后再另外定义些函数,然后在函数里面写测试用例来测 ...
- java生成二维码
具体代码如下,作为一个新手,期待与你一起交流: import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.Buf ...
- NSKeyedArchiver/NSKeyedUnarchiver归档应用(缓存实现)
NSKeyedUnarchiver : 从二进制流读取对象; NSKeyedArchiver :把对象写到二进制流中去. 要实现对数据模型的归档,需要我们实现NScoding协议,(NScoping) ...
- WebSocket浅析(一):实现群聊功能
首先WebSocket打破了传统的web请求响应模式,实现管道式的实时通信,并且可以持续连接. 相对于传统 HTTP 每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket 是类似 So ...
- 每天一个linux命令30)--chgrp命令
在Linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理.可以使用chgrp 指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以. chgrp 命令就是change gr ...
- Servlet探秘
学习servlet,最重要的就是理解servlet下面四个点: 1.了解Servlet API的常用接口和类 2.掌握Servlet的生命周期 3.掌握Servlet的部署和配置 4.会 ...
- 技术分享,学术报告presentation 常用的承接句
前言 现在即使是搞技术,做科研的,也需要在不同的场合,用ppt来做分享,做汇报,做总结. 如果国际会议,研讨会,或者在外企,国外工作,英文的presentation就更加必不可少.英语的提升需要大家从 ...
- 设置查询对话框的F7
1.定义自己的处理类public class MyQueryProcessor extends FMDefaultQueryProcessor { @Override public void proc ...
- 1623: [Usaco2008 Open]Cow Cars 奶牛飞车
1623: [Usaco2008 Open]Cow Cars 奶牛飞车 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 291 Solved: 201[S ...