这里用Hadley Wickham开发的rvest包。再次给这位矜矜业业开发各种好用的R包的大神奉上膝盖。

查阅资料如下:

  1. rvest的github
  2. rvest自身的帮助文档
  3. rvest + CSS Selector 网页数据抓取的最佳选择-戴申 : 里面有提及如何快速获得html的位置。看完这篇,想想我之前看代码看半天分段真是逗比。。经测试,遨游浏览器,右键,审查元素可以得到类似结果。 戴申的blog 里面还有若干相关文章,国内RVEST资料基本就靠他的BLOG了,感激!

言归正传,拿了几个网页练手。包括 对拉勾网爬了一下虫,还尝试了对国外某黄页爬虫,对ebay用户评价爬虫分析其卖家卖的东西主要在哪个价格段(我查的那个卖家,卖8.99和39.99最多,鞋子类),做了一下文本挖掘,还有爬了一下股票数据,基金买入情况等等。

之所以放拉勾网为例子,因为这个大家都比较熟一点?其他的都有点小众=_=而且虽然我没有跳槽的心,但年初却是很多人跳槽的热点。另外, 因为之前听人说过,要了解一个公司的动态,有一个办法是去看这个公司放出来的招聘岗位,可以知道他们最近哪个业务线要扩张了,哪个业务线要跑人了,以及了解技术需求。

rvest基础语法:

library(rvest)
lagou<-"http://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?kd=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&spc=2&pl=&gj=&xl=&yx=&gx=&st=&labelWords=&lc
=&workAddress=&city=%E6%B7%B1%E5%9C%B3&requestId=&pn=3"
web<-html(lagou,encoding="UTF-8") #读取数据,规定编码
#之前我是用关键字搜索,阅读html代码,获得html_nodes里需要什么属性,不过许多浏览器有开发者工具,可以直接获得层级信息。如遨游
position<-web %>% html_nodes("li div.hot_pos_l a") %>% html_text()
#上面就是直接读取数据,获得位置信息
#不过在后面做其他网站时发现,有时候信息储存在同类数据里(如div没有class等等),建议是找一个大的分类,先获得表格信息,再做数据
list_lagou<-web %>% html_nodes("li.clearfix")
#这里正确找准正确的划分点很重要。有<li class="odd clearfix">,其实用li.clearfix一样可以取(对于空格二选一,如"li.odd"或者"li.clearfix")
#接下来的company/position照选即可,因为事先已经分好了list,所以每一个出多少心里有数。。

在讲完原理之后,现在开始尝试写代码

因为里面涉及太多的选取数据工作。为了避免出现太多变量,我最后是编了一个函数,输出数据库。

函数部分

#下面开始写代码,首先写一个函数getdata,会输出一个数据框
getdata<-function(page,urlwithoutpage){
url=paste0(urlwithoutpage,page) #这里输入拉勾网没有页码的url
web<-html(url,encoding="UTF-8") #读取数据,规定编码,access用
list_lagou<-web %>% html_nodes("li.clearfix") #获得一个清单,15个职位
title<-list_lagou %>% html_nodes("div.hot_pos_l div.mb10 a")%>%html_text()
company<-list_lagou %>% html_nodes("div.hot_pos_r div.mb10 a")%>%html_text()
link<-gsub("\\?source\\=search","",list_lagou %>% html_nodes("div.hot_pos_l div.mb10 a")%>%html_attr("href"))
#接下来的由于数据都存在span里,没有很好的划分。这个取数要复杂一些。我在这里,研究他们的表,先取15个完整list,然后用seq等序列取数
#之后要研究是否有更好的方法
#如果有table,可以直接用data.table取数更快。。。
temp<-list_lagou %>% html_nodes("div.hot_pos_l span")
city<-temp[seq(1,90,by=6)] %>% html_text()
salary<-gsub("月薪:","",temp[seq(2,90,by=6)]%>% html_text())
year<-gsub("经验:","",temp[seq(3,90,by=6)]%>% html_text())
degree<-gsub("最低学历:","",temp[seq(4,90,by=6)]%>%html_text())
benefit<-gsub("职位诱惑:","",temp[seq(5,90,by=6)]%>% html_text())
time<-temp[seq(6,90,by=6)]%>%html_text()
data.frame(title,company,city,salary,year,degree,benefit,time,link)
}

获取函数,这里先爬一页!

> url<-"http://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?kd=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&spc=2&pl=&gj=&xl=&yx=&gx=&st=&labelWords=&lc=&workAddress=&city=%E6%B7%B1%E5%9C%B3&requestId=&pn="
> final<-data.frame()
> for (i in 3){
+ final<-rbind(final,getdata(i,url))
+ } #定义个数,把上面的getdata得到的Data.frame合并

查看爬取结果

分析数据

关于这个数据有什么用呢…… 简单来说,我们可以用它来看这个网上有多少在招的,各公司招人的比例,以及薪资水平,做一点基础的数据分析。

虽然我现在不跳槽,不过了解一下市场状况也是不错的~譬如见下图,从目前这网上的平均薪资与工作年限的关系来看,数据分析岗至少在职位前五年属于薪资增长期,初始涨得快,后面涨得慢,但平均应有13%左右的增长?然后这网上目前没有什么高级岗位开出来(工作5-10年的岗位很少),反而是有些公司搞错分类,放了一堆数据录入的到数据分析栏目。

(等待……代码还需要完善,要设置间隔时间,要不然会被当掉!!!)

R爬虫实战1(学习)—基于RVEST包的更多相关文章

  1. R语言网络爬虫学习 基于rvest包

    R语言网络爬虫学习 基于rvest包 龙君蛋君:2015年3月26日 1.背景介绍: 前几天看到有人写了一篇用R爬虫的文章,感兴趣,于是自己学习了.好吧,其实我和那篇文章R语言爬虫初尝试-基于RVES ...

  2. R语言爬虫初尝试-基于RVEST包学习

    注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...

  3. 【数据分析 R语言实战】学习笔记 第四章 数据的图形描述

    4.1 R绘图概述 以下两个函数,可以分别展示二维,三维图形的示例: >demo(graphics) >demo(persp) R提供了多种绘图相关的命令,可分成三类: 高级绘图命令:在图 ...

  4. 【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现

    假设检验及R实现 7.1假设检验概述 对总体参数的具体数值所作的陈述,称为假设;再利用样本信息判断假设足否成立,这整个过程称为假设检验. 7.1.1理论依据 假设检验之所以可行,其理沦背景是小概率理论 ...

  5. 【数据分析 R语言实战】学习笔记 第三章 数据预处理 (下)

    3.3缺失值处理 R中缺失值以NA表示,判断数据是否存在缺失值的函数有两个,最基本的函数是is.na()它可以应用于向量.数据框等多种对象,返回逻辑值. > attach(data) The f ...

  6. 【数据分析 R语言实战】学习笔记 第十一章 对应分析

    11.2对应分析 在很多情况下,我们所关心的不仅仅是行或列变量本身,而是行变量和列变量的相互关系,这就是因子分析等方法无法解释的了.1970年法国统计学家J.P.Benzenci提出对应分析,也称关联 ...

  7. 【数据分析 R语言实战】学习笔记 第八章 方差分析与R实现

    方差分析泛应用于商业.经济.医学.农业等诸多领域的数量分析研究中.例如商业广告宣传方面,广告效果可能会受广告式.地区规模.播放时段.播放频率等多个因素的影响,通过方差分析研究众多因素中,哪些是主要的以 ...

  8. 【数据分析 R语言实战】学习笔记 第五章 数据的描述性分析(下)

    5.6 多组数据分析及R实现 5.6.1 多组数据的统计分析 > group=read.csv("C:/Program Files/RStudio/002582.csv") ...

  9. 【数据分析 R语言实战】学习笔记 第六章 参数估计与R实现(下)

    6.3两正态总体的区间估计 (1)两个总体的方差已知 在R中编写计算置信区间的函数twosample.ci()如下,输入参数为样本x, y,置信度α和两个样本的标准差. > twosample. ...

随机推荐

  1. Redis内存回收:LRU算法

    Redis技术交流群481804090 Redis:https://github.com/zwjlpeng/Redis_Deep_Read Redis中采用两种算法进行内存回收,引用计数算法以及LRU ...

  2. 软工网络15团队作业8——Beta阶段敏捷冲刺(Day4)

    提供当天站立式会议照片一张 每个人的工作 1.讨论项目每个成员的昨天进展 赵铭: 在知晓云上建立数据表 吴慧婷:做了背单词界面并学习了词库界面的设计. 陈敏: 我的词库-全部词汇功能/新建词汇功能全部 ...

  3. httpclient的get和post

    pom.xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&g ...

  4. Excel中用REPT函数制作图表

    本文从以下七个方面,阐述在Excel中用REPT函数制作图表: 一. 图形效果展示 二. REPT语法解释 三. REPT制作条形图 四. REPT制作漏斗图 五. REPT制作蝴蝶图 六. REPT ...

  5. 使用IPMI操作Dell服务器

    机房里有5台实验用的Dell R710服务器,为了低碳环保,我决定只在工作日白天开启它们,其余时间全部关闭.我选择在linux下用ipmitool结合计划任务来实现,这里只记录ipmitool工具的用 ...

  6. Caffe使用step by step:faster-rcnn目标检测matlab代码

    faster-rcnn是MSRA在物体检测最新的研究成果,该研究成果基于RCNN,fast rcnn以及SPPnet,对之前目标检测方法进行改进,faster-rcnn项目地址.首先,faster r ...

  7. Vivian's Problem UVA - 1323(梅林素数+状压二进制)

    借鉴:https://blog.csdn.net/miku23736748/article/details/52135932 https://blog.csdn.net/acm_cxlove/arti ...

  8. VDOM configuration

    VDOM configuration 来源 https://cookbook.fortinet.com/vdom-configuration/ Posted on January 6, 2015 by ...

  9. BZOJ1443 [JSOI2009]游戏Game 【博弈论 + 二分图匹配】

    题目链接 BZOJ1443 题解 既然是网格图,便可以二分染色 二分染色后发现,游戏路径是黑白交错的 让人想到匹配时的增广路 后手要赢[指移动的后手],必须在一个与起点同色的地方终止 容易想到完全匹配 ...

  10. BGP的那些安全痛点(转)

    0x00 BGP(RFC 1771. RFC 4271)定义 全称是Border Gateway Protocol, 对应中文是边界网关协议,最新版本是BGPv4. BGP是互联网上一个核心的互联网去 ...