专栏首页机器学习AI算法工程python爬虫+R数据可视化 实例

python爬虫+R数据可视化 实例

Python 和 r语言这对黄金搭档,在数据获取,分析和可视化展示方面,各具特色,相互配合,当之无愧成为数据分析领域的两把利剑。该项目分为两个模块:

1,数据准备阶段 采用python网络爬虫,实现所需数据的抓取;

2,数据处理和数据可视化,采用r语言作为分析工具并作可视化展示。

第一,数据准备模块 数据来源选用笔者所在学校的内网(校内俗称OB),采用保存cookie模拟登录,以板块为单位,进行论坛帖子的抓取,并且根据发贴人的连接,再深入到发贴人的主页进行发贴人个人公开信息的抓取,最后以每一条帖子作为一条记录保存到文件,按照此逻辑笔者于2016年5月13日-2016年5月26日设置ubuntu下定时任务,按时抓取并保存获得数据。

以下进行详细分析: 首先需要载入的库:

进行模拟登录并保存cookie 需要有登录界面和论坛首页的url和保存cookie和错误日志文件

post_url = 'http://ourob.cn/bbs/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1'

url = 'http://ourob.cn/bbs/forum.php'

err_str = '' #保存error详情

filename = 'cookie_ob.txt'

模拟登录和生成cookie文件

cookie = cookielib.MozillaCookieJar(filename)

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

#post请求参数

postdata = urllib.urlencode({

'fastloginfield':'username',

'handlekey':'ls',

'username':'my user name',

'password':'my password',

'quickforward':'yes',

'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0',

'Connection':'keep-alive'

})

login_url = post_url

opener.open(login_url,postdata)

cookie.save(ignore_discard=True,ignore_expires=True)

尝试用cookie模拟登录论坛首页,并下载源码,提取所需字段信息

login_url = post_url

以下即可采用正则表达式,提取 今日发帖数,会员人数,在线人数 代码如下:

#正则获取列表页 user_num,topic_num,online_num

这种广度搜索爬虫都会涉及到需要补全链接的坑,所以本文采用定义补全链接函数,在需要的部分对该函数进行调用。

接下来,就是深入到各个板块下进行爬取,事先定义好了一个盛放各板块url的.py文件block_list,已经在开始部分导入,还需要增加翻页功能,如下:

后续的部分思路相对比较简单,但是涉及到提取字段,代码部分比较复杂,这里值得提一下的是:有的网站登录一段时间由于某些原因是会失效的(ob就是),但是究竟多久失效,这个没办法知道,所以为了避免因为登录失效而导致爬去失败或者数据丢失,干脆直接采用抓取页面前,均使用cookie重新登录,实现如下(提取字段部分不全):

if tag.em.span.has_attr('class') and tag.em.span.get('class')[0] == 'xi1':

最终得到的数据是这个样子的:

第二,数据处理和数据可视化 主要采用r语言读取数据,进行频数统计和图表展示 简单贴几段代码: 读取剪切板数据 并采用table()函数求频数

data3<-read.table("clipboard",header = T)

柱状图

p <- ggplot(data = tb3, aes(x=b_type,y=freq))
ggplot(data=data1,aes(x=time))+geom_line(aes(y=在线人数,colour="在线人数"))+geom_line(aes(y=今日发帖,colour="今日发帖"))

饼图

p<-ggplot(data=tb3,aes(x="",y=freq,fill=factor(b_type)))+geom_bar(stat="identity",width=1)

很显然,发帖数和在线人数呈现正相关关系,二者在23:30左右的时候急速下降,主要是由于校内这个时候断网,断电,大家也都该洗洗睡了~,一直到早上7:20左右,人数开始回升,从这也可以看出童鞋们起床时间还是很早滴(因为要上课…),在线人数全天除了后半夜基本保持在500以上,上图:

r语言版

发帖人数统计,呈现波动性很大,通过查询日历,显而易见,发帖数高的日期13,14,21,22均为周末,看来大家周末放松的方式之一还真是逛~O~B,再看16,17,18可想而知童鞋们都胶着在上课,作业中,无暇顾及玩ob了…

从板块角度来看,人们对不同板块有不同的热爱,但是结果上,分布很不均匀,基本上大家经常水的就那么几个,有些则是很久页无人问津…

从ob会员上来看,分布依然很不均匀,活跃的就是那么几个(我猜大部分比较活跃的都是版主有木有~~)

这里统计了一下,发帖数排名前十的,会员昵称,能找到你自己么??

那么还有一个问题,大家都是在几点比较容易发帖呢??用数据说话,接着看图…

结果就是发帖时间有两个高峰:一个是上午九点到十点,另一个是晚上七点到十点,也比较符合预期。 辛苦抓取了帖子作者的信息,我们来看一看,都是哪一级的学生经常浪迹ob,说实话,当我看到结果的时候,瞬间觉得我已经在沙滩上了。。。

来一张一目了然的~

喜欢发帖和出生月份有木有关系??,来看看…

当然还要精确到天…

最后,还有血型

难道是说A型血,更倾向于逛ob吗,道理在哪里??? 到此,全部结束

本文分享自微信公众号 - 大数据挖掘DT数据分析(datadw)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python模拟新浪微博登陆功能(新浪微博爬虫)

    有些网站设置了权限,只有在登录了之后才能爬取网站的内容,如何模拟登录,目前的方法主要是利用浏览器cookie模拟登录。 浏览器访问服务器的过程 在用户访问网页时...

    机器学习AI算法工程
  • 整站40万条房价数据并行抓取,可更换抓取城市

    这次的爬虫是关于房价信息的抓取,目的在于练习10万以上的数据处理及整站式抓取。 数据量的提升最直观的感觉便是对函数逻辑要求的提高,针对Python的特性,谨慎...

    机器学习AI算法工程
  • 判别模型、生成模型与朴素贝叶斯方法

    1、判别模型与生成模型 回归模型其实是判别模型,也就是根据特征值来求结果的概率。形式化表示为 ? ,在参数 ? 确定的情况下,求解条件概率 ? 。通俗的解...

    机器学习AI算法工程
  • csrf攻击原理和防御

    上面的代码意思大概是,如果有username的存在,那么说明用户已经登录成功,否则通过判断url中是否有login参数,如果有就进行登录,并写cookie。该代...

    theanarkh
  • cookie 和 session 原理

    cookie + session 是为了保存用户状态信息的。比如这个用户是否已经登陆,如果登陆了就给这个用户推送一些信息,比如他最近买一些东西、他的购物车、他最...

    多云转晴
  • 图像二值化方法汇总介绍

    ImageJ中图像二值化方法介绍 概述 二值图像分析在对象识别与模式匹配中有重要作用,同时也在机器人视觉中也是图像处理的关键步骤,选择不同图像二值化方法得到的结...

    OpenCV学堂
  • FPGA图像处理之高斯滤波算法理论篇

    对计算机视觉、多媒体应用、通信技术等领域来说,实时的数字图像处理是其中的重点学科之一。传统的前端数字信号处理(Digital SignalProcessing...

    FPGA开源工作室
  • 破解之美:利用ECB加密缺陷突破cookie加密

    密码学诞生于古人类社会,例如古希腊斯巴达的密码棒、欧洲中世纪时期的密码栏、阿伯提发明的密码盘等。古代的密码学是一门加密隐蔽的学科,而现代密码学定义为加密与解密,...

    FB客服
  • 【设计模式】—— 状态模式State

      模式意图   允许一个对象在内部改变它的状态,并根据不同的状态有不同的操作行为。   例如,水在固体、液体、气体是三种状态,但是展现在我们面前的确实不同的...

    用户1154259
  • python3 下列表与字典转换

    在写爬虫的时候,经常需要处理cookie,requests库里的cookie是dict,但是headers['cookie']却是一个key=value的字符串...

    黯然销魂掌

扫码关注云+社区

领取腾讯云代金券