R语言如何获取数据

这篇文章主要讲解了“R语言如何获取数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“R语言如何获取数据”吧!

十载专注成都网站制作,成都定制网站,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于成都定制网站,高端网页制作,对成都自拌料搅拌车等多个行业,拥有丰富的网站维护经验。

今天只分享数据获取的代码,为了显得项目规范性(其实就是装X),我第一次使用了Rstudio中的Create Projects菜单创建了本地项目仓库(以前写R代码太飘逸了,写的龙飞凤舞,完全不顾及别人能不能看懂,以后不可以这样了,因为工作中已经吃过很大亏了)。

R语言如何获取数据

因为是含有二级列表页,所以第一步的想法自然是先爬取年份链接,然后遍历链接抓取每一年份中的文档。

可能因为自己文科生思维的问题,不太习惯直接写双层for循环(因为看到会不适),所以遇到这种需要二次遍历的,我一般都会拆成两个小步骤去进行:

1、遍历年份对应的对应年政府工作报告主页链接:

## !/user/bin/env RStudio 1.1.423
## -*- coding: utf-8 -*-
## Pages_links Acquisition
## 加载必要的安装包:
library("rvest")
library("stringr")
library("Rwordseg")
library("wordcloud2")
library("dplyr")
#主网址
url <- "http://www.gov.cn/guowuyuan/baogao.htm"
#提取二级链接
txt<-read_html(url) %>%     html_nodes("#history_report") %>%     html_nodes("p") %>%     html_text()
#提取年份&链接信息:
Base <- read_html(url) %>% html_nodes("div.history_report") %>% html_nodes("a") Year  <- Base %>% html_text(trim = TRUE) %>% as.numeric() Links <- Base %>% html_nodes("a") %>% html_attr("href") %>% str_trim("both")
#合并成数据框:

Reports_links <- data.frame(  Year = Year,  Links = Links,  stringsAsFactors = FALSE )
#存放到本地目录中

if (!dir.exists("data")){  dir.create("data")  write.csv(  Reports_links,  "./data/Reports_links.csv",  row.names=FALSE  )   }

R语言如何获取数据

以上代码为了便于理解,我都拆成单句展示了,github中代码都会是封装好的模块化函数。

R语言如何获取数据

2、从每一个年份对应的链接中获取整个政府工作报告的文档文本:

#加载包

library("rvest")
library("dplyr")
library("magrittr")
library("doParallel")      
library("foreach")
#读取年份及对应链接

Links_data <- read.csv("./data/Reports_links.csv",stringsAsFactors = FALSE) %>% arrange(Year)
#创建文档提取函数:

Get_Corpus_Report <- function(i){  url = grep(i,Links_data$Year) %>% Links_data$Links[.]  read_html(url) %>%    html_nodes("td.p1,tr > td,div.pages_content") %>%    html_text("both") %>%    cat(file = sprintf("./data/Corpus/%d.txt",i))  }

以上需用到较为基础的CSS表达式配色rvest来提取文档,如果你还不太了解这块的内容,赶快通过菜单中的网络数据获取笔记来恶补。

没有构造循环,这里用了foreach包提供的多进程并行爬取方案来处理多循环问题(虽然这里的量级还体现不出来并行的优势,但是整体代码要比写循环简介、高效)

system.time({
 if (!dir.exists("./data/Corpus")){    dir.create("./data/Corpus")  }  cl<- makeCluster(4)        registerDoParallel(cl)      tryCatch({    foreach(      i= Links_data$Year,        .combine = c,      .packages = c("rvest","magrittr")    ) %dopar% Get_Corpus_Report(i)  },  error = function(e) {    print(e)  },  finally = stopCluster(cl)  ) })

R语言如何获取数据

R语言如何获取数据

感谢各位的阅读,以上就是“R语言如何获取数据”的内容了,经过本文的学习后,相信大家对R语言如何获取数据这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享标题:R语言如何获取数据
网址分享:http://pwwzsj.com/article/jdjpdh.html