安装RSelenium/Rwebdriver/rdom包

install.packages("RSelenium")
# 直接从CRAN下载RSelenium包
install.packages("devtools")
library(devtools)
install_github(repo = "Rwebdriver", username = "crubba")
# 从github下载Rwebdriver包
install_github("cpsievert/rdom")
# 从github下载rdom包

启动Selenium服务器

  • 用RSelenium、Rwebdriver包抓取表格数据时,需在控制台输入java -jar D:\R\library\Rwebdriver\selenium-server-standalone-3.7.1.jar以启动Selenium服务器,配合plantomjs或其他浏览器,有建立-断开连接、打开-结束会话的过程

  • 而用rdom包时,其通过调用plantomjs浏览器,模拟真实浏览器渲染和解析DOM,因此只需要下载plantomjs无头浏览器,并将存放路径添加到系统变量


案例一:北京天气数据

  • 页面准备
library(dplyr)
library(xml2)
# 管道操作符/网页转码函数
weather.url <- "https://www.aqistudy.cn/historydata/monthdata.php?city=北京" %>% url_escape(reserved = "][!$&'()*+,;=:/?@#")
# url_escape()是xml2包的函数,参数reserved用来指定网址中不需要转码的字符,这里要保留除“北京”之外的任何标点符号如][!$&'()*+,;=:/?@#等
# 也可通过在线平台(http://tool.oschina.net/encode?type=4)进行转码,再将转码后的网址复制过来
  • RSelenium包
library(RSelenium)
remDr <- remoteDriver(browserName = "phantomjs")
remDr$open()
# 用无头浏览器模拟访问,创建一个remoteDriver对象并打开
remDr$navigate(weather.url)
# 访问指定页面library(XML)
table <- remDr$getPageSource()[[1]] %>% htmlParse(encoding = "UTF-8") %>% readHTMLTable(header = FALSE, which = 1)
# 法一:用XML包的函数获取内容-解析结构-抓取表格(同rvest)
library(rvest)
table <- remDr$getPageSource()[[1]] %>% read_html(encoding = "UTF-8") %>% html_table(header = FALSE) %>% .[[1]]
# 法二:用rvest包的函数获取内容-解析结构-抓取表格(同XML)View(table)
write.table(table, row.names = FALSE, col.names = FALSE, sep = ",", "weather.csv")
# View()函数查看数据并导出到本地
remDr$close()
# 关闭remoteDriver对象
  • Rwebdriver包
library(Rwebdriver)
start_session(root = "http://localhost:4444/wd/hub/", browser = "phantomjs")
# 创建一个新的会话过程
post.url(weather.url)
# 访问指定页面library(XML)
table <- page_source() %>% htmlParse(encoding = "UTF-8") %>% readHTMLTable(header = FALSE, which = 1)
# 法一:用XML包的函数获取内容-解析结构-抓取表格(同rvest)
library(stringi)
library(rvest)
table <- page_source() %>% stri_conv(., from = "UTF-8") %>% read_html() %>% html_table() %>% .[[1]]
# 法二:用rvest包的函数获取内容-解析结构-抓取表格(同XML)。stri_conv()是stringi包的字符编码函数View(table)
write.table(table, row.names = FALSE, sep = ",", "weather.csv")
# View()函数查看数据并导出到本地
quit_session()
# 结束会话
  • rdom包
library(rdom)
library(XML)
table <- rdom(weather.url) %>% readHTMLTable(header = FALSE)
# rdom(url)与htmlParse(url)得到的文件类型相同,均为"HTMLInternalDocument" "HTMLInternalDocument" "XMLInternalDocument" "XMLAbstractDocument",进一步用readHTMLTable()提取表格
View(table)
write.table(table, row.names = FALSE, col.names = FALSE, sep = ",", "weather.csv")
# View()函数查看数据并导出到本地
  • 查看数据


案例二:lol选手排名表

  • 页面准备
lol.url <- "http://www.wanplus.com/lol/playerstats"
# 页面无需转码
  • RSelenium
library(RSelenium)
remDr <- remoteDriver(browserName = "phantomjs")
remDr$open()
# 用无头浏览器模拟访问,创建一个remoteDriver对象并打开
remDr$navigate(lol.url)
# 访问指定页面library(XML)
library(dplyr)
table <- remDr$getPageSource()[[1]] %>% htmlParse(encoding = "UTF-8") %>% readHTMLTable(header = FALSE, which = 1)
# 法一:用XML包的函数获取内容-解析结构-抓取表格(同rvest)
library(rvest)
table <- remDr$getPageSource()[[1]] %>% read_html(encoding = "UTF-8") %>% html_table(header = T) %>% .[[1]]
# 法二:用rvest包的函数获取内容-解析结构-抓取表格(同XML)colnames(table) <-c ("名次", "选手", "战队", "位置", "出场次数", "KDA", "参团率", "场均击杀", "单场最高击杀", "场均死亡", "单场最高死亡", "场均助攻")
# names(table) <- c("", "", ...)或colnames(table) <- c("", "", ...)赋列名
View(table)
write.table(table, row.names = FALSE, sep = ",", "lolplayer.csv")
# View()函数查看数据并导出到本地
remDr$close()
# 关闭remoteDriver对象
  • Rwebdriver
library(Rwebdriver)
start_session(root = "http://localhost:4444/wd/hub/", browser = "phantomjs")
# 创建一个新的会话过程
post.url(lol.url)
# 访问指定页面library(XML)
library(dplyr)
table <- page_source() %>% htmlParse(encoding = "UTF-8") %>% readHTMLTable(header = FALSE, which = 1)
# 法一:用XML包的函数获取内容-解析结构-抓取表格(同rvest)
library(stringi)
library(rvest)
table <- page_source() %>% stri_conv(from = "UTF-8") %>% read_html() %>% html_table() %>% .[[1]]
# 法二:用rvest包的函数获取内容-解析结构-抓取表格(同XML)。stri_conv()是stringi包的字符编码函数colnames(table) <- c("名次", "选手", "战队", "位置", "出场次数", "KDA", "参团率", "场均击杀", "单场最高击杀", "场均死亡", "单场最高死亡", "场均助攻")
# names(table) <- c("", "", ...)或colnames(table) <- c("", "", ...)赋列名
View(table)
write.table(table, row.names = FALSE, sep = ",", "lolplayer.csv")
# View()函数查看数据并导出到本地
quit_session()
# 结束会话
  • rdom包
library(rdom)
library(XML)
table <- rdom(lol.url) %>% readHTMLTable(header = FALSE, which = 1)
# rdom(url)与htmlParse(url)得到的文件类型相同,均为"HTMLInternalDocument" "HTMLInternalDocument" "XMLInternalDocument" "XMLAbstractDocument",进一步用readHTMLTable()提取表格
colnames(table) <- c("名次", "选手", "战队", "位置", "出场次数", "KDA", "参团率", "场均击杀", "单场最高击杀", "场均死亡", "单场最高死亡", "场均助攻")
# names(table) <- c("", "", ...)或colnames(table) <- c("", "", ...)赋列名
View(table)
write.table(table, row.names = FALSE, sep = ",", "lolplayer.csv")
# View()函数查看数据并导出到本地
  • 查看数据


参考资料:
这个包绝对值得你用心体验一次!
左手用R右手Python系列之——表格数据抓取之道

RSelenium/Rwebdriver/rdom包抓取表格数据相关推荐

  1. R语言爬虫系列(1)XML抓取表格数据

    使用XML抓取表格数据 install.packages("XML") trying URL 'https://cran.rstudio.com/bin/windows/contr ...

  2. python抓取表格数据_Python如何实现从PDF文件中爬取表格数据(代码示例)

    本篇文章给大家带来的内容是关于Python如何实现从PDF文件中爬取表格数据(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 本文将展示一个稍微不一样点的爬虫. 以往我们的 ...

  3. R语言:使用rvest包抓取新浪财经A股交易数据

    R语言网络爬虫工具中比较常用的包有RCurl.XML.rvest等,本文以新浪财经频道A股交易数据的抓取为例简单总结一下rvest包的用法. 首先介绍一下我们要抓取的对象,我们以"中信证券( ...

  4. Wireshark学习笔记——如何快速抓取HTTP数据包

    0.前言 在火狐浏览器和谷歌浏览器中可以非常方便的调试network(抓取HTTP数据包),但是在360系列浏览器(兼容模式或IE标准模式)中抓取HTTP数据包就不那么那么方便了.虽然也可使用Http ...

  5. Linux使用tcpdump抓取网络数据包示例

    tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式 tcpdump的参数众多,通过man tcpdump ...

  6. 用C++实现网络编程---抓取网络数据包的实现方法

    From: http://blog.csdn.net/zjl_1026_2001/article/details/2191311 做过网管或协议分析的人一般都熟悉sniffer这个工具,它可以捕捉流经 ...

  7. 爬虫抓取表格中的数据

    有时候因为某些需求需要爬取某个网页中某个表格里的数据,这时候如果这个页面只有这一个表格的时候,那么抓取就比较容易了,但是当这个页面中有大量的表格的时候,再使用之前的方法,就会发现虽然也能抓取到要的数据 ...

  8. linux-网络数据包抓取-tcpdump

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 用法格式: tcpdump [-i 网卡] [选项] '表达式' 选项说明如下: -i:interface 监听的网卡. -nn:表示以ip和port ...

  9. C# 开发的网络数据包抓取的的实现

    利用C# 开发的网络数据包抓取的的实现 利用套接字Socket  socket=new Socket(AddressFamily.InterNetwork, SocketType.Raw, Proto ...

最新文章

  1. java网页制作教程_JavaWeb程序设计任务教程
  2. MAVEN项目线上发布出现的问题之一
  3. boost::smart_ptr模块智能指针测试程序
  4. 6-3 逆序数据建立链表
  5. 关于“Xshell连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次”的问题...
  6. git 重新关联远程仓库地址
  7. vim正则表示式替换
  8. tkinter 弹出窗口 传值回到 主窗口
  9. 深入解读Linux内存管理系列(4)——Memblock管理机制
  10. L1-041__048
  11. QQ自动发消息源代码
  12. django 1.11 文档
  13. 错过等一年!物流与交通的先锋碰撞,点击进入这场大佬云集的学术盛宴
  14. 80题题目+AC代码汇总 ~ 南阳 NYOJ
  15. 路在脚下,何去何从?
  16. python设计贪吃蛇游戏论文_150行python代码实现贪吃蛇游戏
  17. 三国演义中的十大谎言 VS 程序员十大口头禅
  18. 爱上了我的司机 (6)
  19. 三、T100应付管理之采购应付-入库应付管理篇
  20. 抖音前端团队国际化是怎么做的?

热门文章

  1. 漏洞挖掘之资产收集(信息收集)
  2. 添加网络适配器(即网卡)
  3. 一个“男朋友一个月工资7500每个月非要存他妈那5000怎么办?”引发的舆论
  4. 服务器维护笑话,爆笑:天堂的破服务器
  5. 2022年2月13日
  6. TINA-TI仿真报错Format ‘%s‘ invalid or incompatible with argument
  7. java selenium回车键_使用Python和Selenium输入Enter / Return键?
  8. 三剑客grep sed awk
  9. 浅谈“孔乙己”的长衫
  10. 2021-07-22 一句话多个镜头拍摄