today,在这个信息爆炸的互联网时代,不了解一点计算机语言都感觉看不懂这个美妙的世界了。
咳咳,今天就让我来为各位小伙伴们介绍一下如何用 R 写一个爬虫,自动从网页中下载资料。
1.以 nhance 数据库为例
先打开我们要下载文件的网址。
然后打开R,将一些重要的r包加载进去,并将网址赋值给url。
library(rvest)
library(xml2)
library(tidyverse)
#查看网页基本信息
url <- c("https://wwwn.cdc.gov/nchs/nhanes/search/datapage.aspx?Component=Questionnaire&CycleBeginYear=1999")
然后,按F12,出现这个网页编码页面,接着再按左上角这个按钮。
选择我们要下载的资料。
然后它就自动跳转到了这一行代码,说明下载地址就在这里,同时我们还可以发现接下来的几个文件前面的地址是一样的,只是最后一处有变化。
我们再点击鼠标右键,将selector 复制到剪切板。
我们可以看到整行代码是有规律的,所以我们只需要好好利用这个规律就可以使它自动下载文件了。
#GridView1 > tbody > tr:nth-child(1) > td:nth-child(3) > a
#GridView1 > tbody > tr:nth-child(44) > td:nth-child(3) > a
2.R代码
title_all <- read_html(url,encoding = 'utf-8') %>%
html_nodes("#GridView1 > tbody") %>%
html_text()
number <- str_count(title_all,'XPT')
number
#查看我们所在的页面共有多少个文件
#GridView1 > tbody > tr:nth-child(1) > td:nth-child(3) > a
#GridView1 > tbody > tr:nth-child(44) > td:nth-child(3) > a
#设置节点,并找到网页中的文件
node <- data.frame()
for(n in 1:number){
node <-rbind(node,paste0('#GridView1 > tbody > tr:nth-child(',n,') > td:nth-child(3) > a'))
}
colnames(node) <- 'nodes'
title <- data.frame()
for (i in 1:nrow(node)) {
title <- rbind(title,read_html(url,encoding = 'utf-8') %>%
html_nodes(node[i,]) %>%
html_text())
}
colnames(title) <- 'files'
View(title)
现在我们已经从nhance上找到了本页面的所有xpt格式的文件啦,并且可以看到每个文件的大小。
接着我们就可以开始快乐的下载了。
title_s <- separate(title,files,'filename',' ')
# 连接成网址
web <- data.frame()
for (i in 1:nrow(title_s)) {
web <- rbind(web,web=paste0("/Nchs/Nhanes/1999-2000/",title_s[i,],".XPT"))
}
colnames(web) <- 'web'
web_link <- data.frame()
for (i in 1:nrow(web)) {
web_link <- rbind(web_link,paste0('https://wwwn.cdc.gov',web[i,],sep = ''))
}
dir.create('./download_file')
setwd('./download_file')
for (i in 1:nrow(web_link)) {
download.file(web_link[i,],destfile = paste0(title_s[i,],'.XPT'))
}
3.结果展示
是不是非常有意思呢?
[参考资料]
[1] Hadley Wickham (2021). rvest: Easily Harvest (Scrape) Web Pages. R package version 1.0.1. https://CRAN.R-project.org/package=rvest
[2] Hadley Wickham, Jim Hester and Jeroen Ooms (2020). xml2: Parse XML. R package version 1.3.2. https://CRAN.R-project.org/package=xml2
[3] 《CSS实战手册》
关注公众号后台回复书名即可免费获得此书奥!
声明:来自繁尘的bio小本本,仅代表创作者观点。链接:https://eyangzhen.com/4395.html