搜索
您的当前位置:首页正文

R语言数据抓取的相关问题

来源:二三娱乐

本文较功利,旨在快速解决问题

参考书籍:

人大经济论坛下载,中/英文

相关的库

XML、rvest、httr、Rselenium、rdom(神器)、 RCurl
辅助库:tidyverse

基本流程

  1. 首先尝试静态网页抓取(rvest)
  2. 如果搞不定,那就是javascript搞的鬼,可以用rdom解决之
  3. 先爬一个网页,找出规律,再构造通用架构。注意爬虫并不快...

静态网页

url <- 
Fuid=56254&pageNum=2"
#这个网页有济南的泉水数据,最后一个参数是js生成的换页参数
webpage <- read_html(url, encoding="utf-8")
#读取页面内容,编码这里不一定,视实际情况决定
data_html <- html_nodes(webpage, '.bt-neirong')
#在众多节点中返回我们要的那个(些)
x <- html_text(data_html)
#让它说人话

接下来我们可以用正则表达式愉快地提取内容了

Tips

这里介绍两个常用的技巧

  1. 用谷歌浏览器,按F12进入开发者模式阅读源码。
  2. 安装SelectorGadget,可以实现指哪打哪。(有时候也不好用)
    这里是为了找到html_nodes(webpage, '.bt-neirong')那个第二个参数。

问题

动态网页

环境变量简介

至于什么是环境变量,也就是一个程序快速启动的索引。我们不愿意在打开任何程序时都先进入它的工作路径,但是一般来说你不这样就打不开。于是我们把路径添加到环境变量里去,在执行命令时电脑会搜索当前工作环境以及系统变量指示的路径,这就可以高枕无忧了。

rdom

一切准备就绪后,安装rdom。只能从github上安装。

stopifnot(Sys.which("phantomjs") != "")
# 检测系统路径中是否含有phantomjs,若未下载,或已下载但未添加系统路径都会导致报错。什么也没发生就成功了。
devtools::install_github("cpsievert/rdom")
# 安装rdom
library(rdom)
library(XML)
library(tidyverse)
M <- list()
for (j in 1:164) {
  url <- 
  url <- paste(url, j, sep = '')
  x <- rdom(url) %>% readHTMLTable(header = T)
  #后面那个函数是XML里面的
  y <- x[[3]] %>% .[2:16, 1:3]
  M[[j]] <- y
}

程序跑的挺慢的,大约一个半小时才完成。现在列表中已经存好了泉水水位数据。
基本上这个套路可以解决绝大多数问题了,但是这毕竟是个功利的玩法。想打好内力还是得看书,学TCP/IP这里。

Top