R语言网页抓取入门-rvest包

R语言中的rvest包是极易掌握的网页抓取工具,只要进行适当的操作就可以入门网页抓取。
1.背景介绍
>install.packages("rvest") #安装rvest包
>library(rvest) #加载rvest包,该过程中会自动加载xml2包
rvest包中常用的函数有如下几个:
read_html()用于下载网页;html_nodes()用于获取网页上的指定节点信息或者元素,确定抓取范围;html_text()用于提取文本内容;html_attrs()用于获取链接。
这里将针对 研究生招生信息网国家政策 部分进行发布时间、标题和链接抓取。# http://yz.chsi.com.cn/kyzx/zcdh/ 点击打开链接

2.网页元素查看
点击右键,选择“检查元素”,即可对网页元素进行查看,如下所示

由图可以看出,我们所需要的信息在节点<div class="news_list">内,内容包括时间、链接和标题名称,所以下面提取信息是要定位好位置,以提取到真正要的信息。
3.具体操作
>Link<-'http://yz.chsi.com.cn/kyzx/zcdh/'#指定链接
>DLink<-read_html(Link) #将链接上的内容下载下来
接下来提取网页上的标题名称、发布时间以及链接

3.1提取发布时间
>time<-DLink%>%html_nodes('div.news_list li span')%>%html_text()
#%>%为管道函数,起到传递的作用。其中,DLink%>%html_nodes('div.news_list li span')起到定位时间位置的作用(见上图查看元素span),而html_text()则用来提取时间。
上述语句等同于t1<-html_nodes(DLink,'div.news_list li span'),time<-html_text(t1)

3.2提取标题
>titles<-DLink%>%html_nodes('div.news_list li a')%>%html_text()
#标题与链接在<a /a>中(见上图),利用html_text即可提取到标题,而利用html_attrs()可提取到链接

3.3提取链接
>websites<-DLink%>%html_nodes('div.news_list li a')%>%html_attrs()
#提取到的数据为列表格式([[]]),可通过str(websites)查看数据格式,且所需要的链接在位置2(href)处,故需要提取位置2的信息。

进行链接提取:
>websites1<-c(1:length(websites))#定义一个与列表数据记录数一致的向量,用与存储链接
>for(i in 1:length(websites)) #定义语句循环次数,直至所有链接提取完成
>{
>websites1[i]<-websites[[i]][2] #提取列表中位置2的信息,填充websites1
>}
得到websites1的数据如下所示,


每个链接都差了前缀'http://yz.chsi.com.cn',于是为所有40(视具体数据条数而定)个链接增加前缀;
>site<-rep('http://yz.chsi.com.cn',40) #定义site为含有40个'http://yz.chsi.com.cn'的向量,rep()为重复复制。


将site与websites1中的字符串合并
>websites2<-paste(site,websites1,sep="") #需指定sep="",否则会默认两字符串间有一个空格。


3.4将时间、标题和链接合并
>policy<-data.frame(time,titles,websites2)#将三者合并为数据框
接下来对数据框中的字段名称进行重命名
#>names(policy)<-c("时间","标题","链接")#对数据框的字段进行重命名
上述语句会出现无法运行的错误,具体原因未知(Error: unexpected input in "names(policy)<-c()),但是可以采用另外一种方式实现
>install.packages("reshape")
>library(reshape)
>rename(policy,c(time="时间",titles="标题",websites2="链接"))#此时即可实现数据框字段的重新命名

  • 9
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值