在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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="链接"))#此时即可实现数据框字段的重新命名 |
请发表评论