R爬虫实战1(学习)—基于RVEST包

这里用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年的岗位很少),反而是有些公司搞错分类,放了一堆数据录入的到数据分析栏目。

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

时间: 2024-08-08 17:42:44

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

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

R语言爬虫初尝试-基于RVEST包学习 Thursday, February 26, 2015 在学完coursera的getting and Cleaning data后,继续学习用R弄爬虫网络爬虫.主要用的还是Hadley Wickham开发的rvest包.再次给这位矜矜业业开发各种好用的R包的大神奉上膝盖 查阅资料如下: rvest的github rvest自身的帮助文档 rvest + CSS Selector 网页数据抓取的最佳选择-戴申: 里面有提及如何快速获得html的位置.看完这

《R语言实战》学习笔记seventh

由于在准备软考中级数据库系统工程师外加巩固SQL Server 2012,所以拖了好久一直没继续学R 下去 所以今天重开R 的战事 这次是关于基本统计分析的内容,即关于用于生成基本的描述性统计量和推断统计量的R 函数 首先,将着眼于定量变量的位置和尺度的衡量方式 然后将是生成类别型变量的频数表和列联表的方法(以及连带的卡方检验) 接下来将考察连续型和有序型变量相关系数的多种形式 最后转而通过参数检验(t检验)和非参数检验(Mann-Whitney U检验.Kruskal-Wallis检验)方法研

《R语言实战》学习笔记fourth

又拖了好久继续写R 语言的学习笔记了啊 这次到了基本数据管理了,众所周知数据准备是数据分析的最重要的前提 书本是从一个例子开始本章的内容的,例子是一个类似调查问卷的 然后把回答标为从1到5,再进行分析(这让我想到了自学SPSS 的时候啊) > manager <- c(1, 2, 3, 4, 5) > date <- c("10/24/08", "10/28/08", "10/1/08", "10/12/08&q

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

4.1 R绘图概述 以下两个函数,可以分别展示二维,三维图形的示例: >demo(graphics) >demo(persp) R提供了多种绘图相关的命令,可分成三类: 高级绘图命令:在图形设备上产生一个新的图区,它可能包括坐标轴.标签.标题等. 低级绘图命令:在一个己经存在的图形上加上更多的图形元素,如额外的点.线和标签. 交互式图形命令:允许交互式地用鼠标在一个已经存在的图形.上添加图形信息或者提取图形信息. 使用R语言作图,主要按照以下步骤进行: ①取原始数据,准备好绘图需要的变量. ②

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

假设检验及R实现 7.1假设检验概述 对总体参数的具体数值所作的陈述,称为假设;再利用样本信息判断假设足否成立,这整个过程称为假设检验. 7.1.1理论依据 假设检验之所以可行,其理沦背景是小概率理论.小概率事件在一次试验中儿乎是不可能发生的,但是它一以发生,我们就有理由拒绝原假设:反之,小概率事件没有发生,则认为原假设是合理的.这个小概率的标准由研究者事先确定,即以所谓的显著性水平α(0<α<1)作为小概率的界限,α的取值与实际问题的性质相关,通常我们取α=0.1, 0.05或0.01,假设

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

3.3缺失值处理 R中缺失值以NA表示,判断数据是否存在缺失值的函数有两个,最基本的函数是is.na()它可以应用于向量.数据框等多种对象,返回逻辑值. > attach(data) The following objects are masked fromdata (pos = 3): city, price, salary > data$salary=replace(salary,salary>5,NA) > is.na(salary) [1] FALSEFALSE TRUE

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

5.1R内置的分布 分布是描述一个样本数据最核心.最重要的方式.R内嵌了很多常用的统计分布,提供了四类函数:概率密度函数(density),累积分布函数(probability).分位数(quantile)和伪随机数(random).在R中分别用d,p,q,r表示这4个项目,后面接分布的英文名称或缩写. 5.2集中趋势的分析 5.2.1集中趋势的测度 描述统计分布集中趋势的指标主要是平均数.中位数.众数,也称为“平均指标”.这些指标的主要作用包括: 反映总体各单位变量分布的集中趋势和一般水平;

《R语言实战》学习笔记fifth

总算到了第5章-高级数据管理了啊 作为这本书第一部分-入门的收官之章,本章还是挺重要的呢 这章可以分为三个部分,第一部分:快速浏览R 中的多种数学.统计和字符处理函数,第二部分:如何编写函数来完成数据处理和分析任务,第三部分:了解数据的整合和概数方法,以及数据集的重塑和重构方法 > 学生姓名 <- c("John Davis", "Angela Williams", "Bullwinkle Moose", "David Jo

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

11.2对应分析 在很多情况下,我们所关心的不仅仅是行或列变量本身,而是行变量和列变量的相互关系,这就是因子分析等方法无法解释的了.1970年法国统计学家J.P.Benzenci提出对应分析,也称关联分析.R-Q型因子分析,其是一种多元相依变量统计分析技术.它通过分析由定性变量构成的交互汇总表,来揭示同一变量各类别之间的差异,以及不同变量各类别之间的对应关系,这是一种非常好的分析调查问卷的手段. 对应分析是一种视觉化的数据分析方法,其基木思想是将一个联列表的行和列中各元素的比例结构以点的形式在较