推荐星级:
- 1
- 2
- 3
- 4
- 5
基于Python的微博爬虫系统研究
资料介绍
随着大数据时代到来,爬虫的需求呈爆炸式增长,以新浪微博为代表的一系列社交应用蕴含着巨大的数据资源。以新浪微博为研究对象,利用Python语言实现模拟登陆和网页解析技术,将获取的用户信息存为文档进行分析。文章分析了新浪微博模拟登陆时的加密方法,研究了验证码识别的实现方法,对挖掘的数据使用TF-IDF算法进行分析,提出了新的微博数据挖掘方向,论述了爬虫的国内外研究现状及开发难题。
部分文件列表
文件名 | 大小 |
基于Python的微博爬虫系统研究.pdf | 2M |
部分页面预览
(完整内容请下载后查看)总第 19 卷 216 期
2017 年 8 月
大 众 科 技
Popular Science & Technology
Vol.19 No.8
August 2017
基于 Python的微博爬虫系统研究
陈政伊 袁云静 贺月锦 武瑞轩
(北华航天工业学院计算机与遥感信息技术学院,河北 廊坊 065000)
【摘 要】随着大数据时代到来,爬虫的需求呈爆炸式增长,以新浪微博为代表的一系列社交应用蕴含着巨大的数据资源。
以新浪微博为研究对象,利用 Python 语言实现模拟登陆和网页解析技术,将获取的用户信息存为文档进行分析。文章分析了新
浪微博模拟登陆时的加密方法,研究了验证码识别的实现方法,对 挖掘的数据使用 TF-IDF 算法进行分析,提 出了新的微博数据
挖掘方向,论述了爬虫的国内外研究现状及开发难题。
【关键词】大数据;新浪微博;数据挖掘;Python 爬虫;模拟登陆
【中图分类号】TP393
【文献标识码】A
【文章编号】1008-1151(2017)08-0008-04
Python-based analysis of Microblog data mining
Abstract:With the coming of the age of Big Data,the need of Crawler growing explosively.The Social Network are influencing
everyone’s life,The Sina Microblog represented by a series of social application containing a large number of data resources.The Sina
Microblog is the main study object,taking advantage of Python to realize the simulated landing and web page parsing,saving the
downloaded data to analyze.The prode into the encode method during the simulated landing and how to realize the technology of
recognizing the verified code,then making use of TF-IDF to further analyze the mined data.Putting forward the new direction of Sina
Microblog data mining,discussing the research status of Crawler and the problems in the exploit process.
Key words:Big Data;Sina Microblog;data mining;Python crawler;simulated landing
本文主要探究了爬虫的模拟登陆、识别验证码、内容解
1 引言
析、数据分析、数据整合等方面。
新浪微博自 2009 年 8 月进入公众视野,根据新浪发布的
对于新浪微博最新的反爬虫设计进行了破解分析,同时
2016 年财报,截止 2016 年底,微博月活跃人数已达 3 亿。微
探究了如何解析、分析获取的数据。
博已成为青年人生活的一部分,其中蕴含的巨大信息量的意
2 爬虫研究现状与难题
义不言而喻。但是,与同类的国外社交网络社区如 Facebook,
Twitter 等相比,新浪微博推出的供研究人员使用的数据接口
网络爬虫是一种按照一定的规则,自动的抓取万维网信
尚不成熟,给数据分析工作带来了不小的压力。因此,许多
息的程序或者脚本,在机器学习和数据挖掘中,爬虫是最基
技术成熟的科研团队自行开发爬虫系统来获取研究数据,同
础的一块内容,目前已经有各种完善的爬虫框架,例如
时,新浪出于安全考虑也在不断升级反爬技术。而爬虫技术
Crawler4j、WebMagic、WebCollector、Scrapy、Nutch 等。
难题之一就是反封锁,多数时候,有价值的信息一定采用了
爬虫面临的最重要的有三方面问题:
严格的反爬措施,比如验证码、防火墙、访问频率限制……。
(1)法律道德风险:虽然爬虫抓取的各种网络信息都是
本文也将验证码作为一个重点探究对象,分析了新浪验证码
公开的,但将这些信息商用甚至可能侵害源网站利益,既不
识别的方法。
合理也不合法。目前我国关于网络信息安全方面的法律法规
Python 作为一个语法简洁的程序设计语言,对于爬虫开
几乎是空白。
发上有得天独厚的优势,在模拟浏览器行为登入网站时,
(2)访问速度限制:爬虫的爬取速度主要依赖于服务器
Python 相比于 Java,C#,C++等拥有更简洁抓取接口,当模
的出口宽带带宽和客户端的入口带宽,以及代码的质量,另
拟 session/cookie 的存储和设置时,Python 提供诸多优秀的第
外,大部分用户使用规模较大的网站都有反爬虫机制,其中
三方包譬如 Requests。在进行网页抓取后的处理工作时,
最基本的就是频率限制,通常在频繁访问时间隔一段时间,
Python 提供的 BeautifulSoup 库能用极简短的代码完成过滤
甚至使用一套高效、可用的 IP 机制。
html 标签,提取文本的工作。
【收稿日期】2017-07-03
【作者简介】陈政伊,北华航天工业学院计算机与遥感信息技术学院学生,研究方向为数据挖掘,web 开发,机器学习。
- 8 -
(
3
)验证码:验证码的作用是用来区分机器人和人类。
近年来验证码已经从简单的字母数字发展到拖动滑块甚至
Google reCAPTCHA 这种以机器学习原理为基础开发的验
加密。
“request.pwencode="wsse";
的
password=sinaSSOEncoder.hex_sha1(""+sinaSSOEncoder.h
ex_sha1(sinaSSOEncoder.hex_sha1(password))+me.servertime+
证码模块,有时验证码的识别甚至比爬虫本身开发难度更大[4]
3 爬虫开发与研究内容
3.1 模拟登陆
。
me.nonce)
;
request.sp=password;”
3.1.3 验证码识别
验证码识别是新浪爬虫开发的一个难点,也是新浪近两
年新增的安全防御方式。在第一次客户端发送 GET 请求时,
客户端同时发送一个用于请求验证码图片的 GET 请求,返回
本项目通过研究开发一款爬虫,探究了爬虫的模拟登陆、
识别验证码、内容解析、数据分析、数据整合等方面。
新浪微博的通行证入口登陆较之新浪 PC 端登陆入口具
有代码简洁易读等优点。在通行证入口登入时,需要经历三
一个 pin.php
使用 PyTesser 这个 python 的光学字符识别模块,这是一个结
Tesseract OCR 引擎来使用的并且输出一个文本文件的验证
码识别程序。
利用 split()函数对 url 进行筛选得到验证码图片的 url
的 url 链接,是一个.png 或.image 格式的图片。
个过程,如图 1:
合
,
使用 requests 下载验证码图片,之后使用 pytesser 模块进行识
别。获得 code 值连同 GET 获得的参数 pcid 加入 POSTDATA
数据字典。
图
1
微博模拟登陆过程图
● 根据用户输入的用户名 username 经过 base64 算法加
密得到参数 su
● 根据 su 得到一个 json 串,其中包含 rsakv
servername nonce pcid 等参数
,
pubkey,
,
,
● 将密码进行 RSA 算法加密得到参数 sp 加入到 json
POST 请求
串
图
2
模拟登陆成功图
中
3.1.1 用户名加密
观察 ssologin.js 页面,很容易找到关于用户名的编码方式。
var username=config.username||"";
username=sinaSSOEncoder.base64.encode(urlencode(usern
ame));
3.2 网页下载器
模拟登陆成功后,找到需要爬取的微博博主用户名,根
据分析博主的主页 url,如高了然的微博:“
gaoliaoran?is_search=0&visible=0&is_tag=0&profile_ftype=1&
page=1#feedtop”,马云的微博:“
spr_qdhz_bd_360ss_weibo_mr&is_hot=1”等,可发现其中 userid
即为微博博主的用户名,提 示 用 户 输 入用户名即 userid,爬虫
即开始下载该网页源代码,最后将下载的源代码提供给网页
解析器。
“
delete config.username;
var arrQuery={
entry:me.entry,callback:me.name+".preloginCallBack",su:us
ername,rsakt:"mod"};
”
3.1.2 密码加密
3.3 网页解析器
密码加密的相关过程也在 ssologin.js 页面的源码,源码中
可见当 loginType rsa 时,客户端将密码经过 rsa2 算法进行
编码,首先创建一个 rsa 公钥,公钥需要两个参数“pubkey
和“10001”,这 里 的“ pubkey”是 GET 请求获得的,“10001
js 加密文件中的内容。绝大多数情况新浪登陆时使用此种
加密方法。
“request.pwencode="rsa2";
为
本项目中网页解析器采用的是 beautifulsoup 来提取数据,
它可以使用 html 作为解析器也可以使用 lxml 作为解析器,所
以功能相对强大。
”
”
是
首先根据已下载 html 文件定义一个 beautifulsoup 对象
soup,此时文件已由解析器解析成一个 html 节点树,原网页
中审查元素了解所需段落在文件中的标签、属性等易于分辨
的特征,然后通过 soup 对象即可很容易的获得这些节点标签,
并得到其中的文字内容,本项目中该内容主要包括新浪微博
用户的昵称,性别,以及他的微博原文等。
request.rsakv=me.rsakv;
var RSAKey=new sinaSSOEncoder.RSAKey();
RSAKey.setPublic(me.rsaPubkey,"10001");
password=RSAKey.encrypt([me.servertime,me.nonce].join(
数据提取简单流程图描述如图
3 所示:
"\t")+"\n"+password)”
而当 loginType
为 wsse 时,客户端将密码经过 wsse 算法
- 9 -
全部评论(0)