美文网首页
R语言网络爬虫(rvest和Rselenium)

R语言网络爬虫(rvest和Rselenium)

作者: 飘舞的鼻涕 | 来源:发表于2017-11-02 13:56 被阅读0次

以前一直以为 网络爬虫 是高大上的, 涉及到网页知识/编程代码/正则...等等一系列想想就头疼的物件儿,一次偶然的机会看到了rvest(向 hadley 大师傅献上最真诚的膝盖),一股如厕后的畅快感油然而生,原来爬数也可以 谈笑间,樯橹灰飞烟灭...废话不多说,请看大屏幕

注,有任何建议或疑问,请加 QQ: 1595218767 ,共同探讨学习
如R/python代码编程作图等方面需要帮忙,欢迎来店咨询 之恒科技, 挥动热情的小爪爪期待你哦

rvest

1. 安装

install.package('rvest')
# 想获取最新版,可以github安装
# install.packages("devtools")
devtools::install_github("hadley/rvest")

2. 基本架构及参数

2.1 网页内容读取

info1 <- read_html(url/pageSource)

2.2 节点解析

html_node(x,css/xpath) / html_nodes(x,css/xpath)
如果要解析的节点只有 一 个: html_node(x,css/xpath)
如果要解析的节点 有 多 个: html_nodes(x,css/xpath)


nodes1

2.3 html_node 之 css VS xpath

2.3.1 CSS选择器参考手册

CSS选择器参考手册传送门

2.3.2 xpath参考手册

xpath参考手册传送门
xpath使用总结传送门
在Chrome浏览器中,通过右击所需要查看的元素,单击“检查”,在开发者模式中,通过右击被蓝色覆盖(即被选中)的部分,单击Copy,单击Copy Xpath,即可得到Xpath

2.4 目标获取

2.4.1 html_text()
text1
read_html() %>% html_node(css='p.blog-summary') %>% html_text()
[1] 摘要:
[2] 本文简单介绍循环神经网络RNN的发展过程,....  

介于 p 节点 之间的 非html 语法的文本都会被提取

2.4.2 html_attr()
attr1
read_html() %>% html_node(css='span.name') %>% html_attr('href')
[1] '/u/3283d485c98a'

3. 爬虫案例

3.1 功能性讲解

3.1.1 html_nodes

如果想获取下图中 被选中的信息 则

node-src
上图目标value信息包含在 a class='title' /a 下,可以通过
如果class='title name',可以用 html_nodes('a.title.name')
web1 %>% html_nodes(css='a.title') %>% html_text()
node-res
3.1.2 html_attr

如果想获取下图中 被选中的信息 则


attr-src

可以通过下面语句来实现

web1 %>% html_nodes(css='a.title') %>% html_attr('href')
attr-res
3.1.3 html_table
library(magrittr)
Library(rvest)
url1 <- 'https://amjiuzi.github.io/2017/08/13/ggradar/'
read_html(url1) %>% html_table() %>% extract2(3) #提取第3张表
        type price price2 allowance YouHao
1     bought 4.122  4.109     4.139  4.122
2 considered 4.109  4.108     4.133  4.109
3 NoInterest 4.126  4.125     4.107  4.126

3.2. 案例分享

rvest包抓取招聘信息实例

Rselenium

Rselenium较rvest复杂,涉及rvest暂无法实现的动态抓取时可以配合rvest使用

Rselenium使用手册

1. 安装

1.1 安装JDK,配置环境变量

1.2 下载selenium-server-standalone-xxx.jar(windows os)

linux or mac os 请自行查阅安装配置 selenium server的方法

1.3 浏览器支持

firefox + geckoDriver
chrome + chromeDriver

切记,将Driver解压文件放至 firefox/chrome安装目录下(与 xx.exe同一文件夹就行)

这里有一个安装使用的简单教程 利用RSelenium抓取动态页面, 感谢[火车嘟嘟嘟]的无私贡献!

2. 基本架构及参数

2.1.启动 selenium server

java -jar xxx/selenium-server-standalone-xxx.jar

2.2.模拟启动浏览器

library(RSelenium)
remDr <- remoteDriver(remoteServerAddr='localhost',port=4444L,
                      browserName='chrome')
remDr$open(silent = TRUE)
Url='https://movie.douban.com/tag/#/'
remDr$navigate(url)

2.3.信息抓取

element1 <- remDr$findElements(using = 'css','') # html_node(css='')
element1 <- remDr$findElements(using = 'xpath','') # html_node(xpath='')
element1$getElementText() # html_text()
element1$getElementAttribute('href') # html_text()

2.4.事件模拟

element1 <- remDr$findElement(using = "xpath", "/html/body/div[3]/div[2]/div[2]")
element1$clickElement() # 单击事件
element1$sendKeysToElement(list('R cran')) # 填充文本
element1$sendKeysToElement(list('R cran',key ='enter')) # 填充文本并点击确定

2.5.模拟关闭浏览器

remDr$close() # 关闭浏览器

3. 动态抓取案例

3.1. 判断是否到了最后一页

user0 <- c()
rev0 <- c()
html0 <- c()
while (page.previous != page.current) {
  user1 <- unlist(lapply(remDr$findElements('css','a.user'),function(x) x$getElementText()[[1]]))
  rev1 <- remDr$findElements('xpath',"//*[@class='reviewText stacked']/span")
  html1 <- lapply(rev.info,function(x){x$getElementAttribute('outerHTML')[[1]]})
  
  user0    <- append(user0,user1)
  rev0    <- append(rev0,rev1)
  html0  <- append(html0,html1)
  
  page.previous <- remDr$findElement('css','em.current')$getElementText()[[1]] %>% as.numeric()
  next.btn <- remDr$findElement('css','a.next_page')
  next.btn$clickElement()
  Sys.sleep(3)
  page.current <- remDr$findElement('css','em.current')$getElementText()[[1]] %>% as.numeric()
}

3.2. 通过直接寻找页面最底部来破解异步加载

QQ: 1595218767

3.3. 通过点击"加载更多"来破解异步加载

QQ: 1595218767

Rselenium 和 rvest之间的衔接

xxxx

crawl之后的文本处理(stringr包)

library(stringr)
lapply(bas_info1[,3],
        function(x){Sys.sleep(2);
          read_html(x)%>%html_nodes(css="div.rating_self.clearfix")%>%
                     html_text() %>% str_trim() %>% # trim掉前后空格
                     str_replace_all('    ','')%>% # 替换夹杂在文本中的空格
               })

更多stringr的使用信息请参考
传送门

usful img2wd OCR

相关文章

  • R语言网络爬虫(rvest和Rselenium)

    以前一直以为 网络爬虫 是高大上的, 涉及到网页知识/编程代码/正则...等等一系列想想就头疼的物件儿,一次偶然的...

  • R语言 | 网页数据爬取rvest包学习

    从零开始学习rvest网络爬虫抓数据-Stone.Hou 大神 Hadley rvest in GitHub参考資...

  • R 爬虫-Rvest

    Rvest用R轻松抓网页数据 课程背景:本课程需要一点R语言基础,以及了解一点CSS选择器的知识,不过没有相关的知...

  • R语言爬虫入门-rvest教程

    安装包 查看rvest包的详细信息 包的用法: read_html() 读取html文档的函数,其输入可以是线上的...

  • R语言:rvest包学习爬虫--笔记

    | 参考:https://www.douban.com/note/618385613/,因为原文中没有转化,就自己...

  • R爬虫必备—httr+POST请求类爬虫(网易云课堂)

    在实际R爬虫过程中,针对不同的网页,采取的爬虫方法也会有所不同。对于静态网页,rvest包足够了。但是对于网页动态...

  • R语言网络爬虫经验

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞...

  • 2022-02-13 RSelenium使用

    RSelenium使用 近期在准备一门本科课程,内容主要和科技论文写作有关。原本这门课程的内容和R语言没有什么太大...

  • R语言:rvest抓取网页信息

    好久没有用R了,今天复习了下,用rvest写了个抓取 http://pubmed.cn 网站关键字搜索结果的脚本,...

  • R爬虫必备——rvest包的使用

    上一期R爬虫必备——静态网页+动态网页简单介绍了网页的类型。在实际R爬虫过程中,针对不同的网页,采取的爬虫方法也会...

网友评论

      本文标题:R语言网络爬虫(rvest和Rselenium)

      本文链接:https://www.haomeiwen.com/subject/zebopxtx.html