什么,你还在用鼠标下文件?

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

繁尘的bio小本本的头像繁尘的bio小本本

相关推荐

关注我们
关注我们
购买服务
购买服务
返回顶部