R语言做生信

R成精系列-Mac os用R+Docker部署Rselenium

2018-12-09  本文已影响10人  果果哥哥BBQ

最近在用R做爬虫的时候遇到了部分网页无法爬取。于是转投Selenium的怀抱。本文就简要介绍利用mac 下的docker搭建Selenium环境,实现爬虫应用。
先简单介绍用的工具:

下载Docker安装Docker

  1. Mac 下载安装Docker desktop版本还是比较简单,到Dorker mac下载地址注册一个账号,下载docker dmg直接安装即可,这也是最简单的方法。
  2. 安装成功后,打开docker。 docker

    看到docker就在运行了。接下来打开终端工具进行操作会比较方便。


    docker运行状态

搭建Selenium环境

搭建Selenium环境主要分为三个步骤:
1 .启动docker
打开docker程序后,进入终端输入docker version即可查看docker版本,说明docker已经运行。网上有许多docker相关的教程,这里就不再赘述。

  1. 拉取Selenium镜像,我们这里拉取两个镜像1个Selenium hub镜像,1个Selenium chrome-node。Selenium镜像有许多,更多的请参考Selenium镜像列表
docker pull selenium/hub
docker pull selenium/node-chrome

经过一段时间的下载,镜像就下载成功了,下载成功后就可以基于镜像启动容器。

  1. 基于Selenium镜像,启动Selenium容器,启动一个selenium hub,一个chrome-node。
#单主机
docker run -d -p 4444:4444 --name selenium-hub selenium/hub
docker run -d --link selenium-hub:hub -v /dev/shm:/dev/shm selenium/node-chrome

启动一个hub,docker启动命令如下:docker run -d -p 4444:4444 --name selenium-hub selenium/hub.

做一些简单的说明:

启动完hub后,我们启动一个node,启动node命令如下:
docker run -P -d --link selenium_hub:hub selenium/node-chrome做一些简单的说明:

启动了selenium/hubselenium/node后,我们运行docker ps - a有如下信息:


这是selenium就启动了。
浏览器输入localhost:4444.可以查看Selenium Grid Hub的版本,也表示其运行正常。
屏幕快照 2018-12-09 下午5.57.12.png

启动R安装Rselenium包

install.packages("RSelenium")

爬取页面

library(RSelenium)
remDr<-remoteDriver(port=4444L, browserName = "chrome")
remDr$open(silent = TRUE)#打开浏览器
[1] "Connecting to remote server"
$acceptInsecureCerts
[1] FALSE
$acceptSslCerts
[1] FALSE
$applicationCacheEnabled
[1] FALSE
$browserConnectionEnabled
[1] FALSE
$browserName
[1] "chrome"
$chrome
$chrome$chromedriverVersion
[1] "2.44.609551 (5d576e9a44fe4c5b6a07e568f1ebc753f1214634)"
$chrome$userDataDir
[1] "/tmp/.org.chromium.Chromium.YhY2Yo"
$cssSelectorsEnabled
[1] TRUE
$databaseEnabled
[1] FALSE
$`goog:chromeOptions`
$`goog:chromeOptions`$debuggerAddress
[1] "localhost:35767"
$handlesAlerts
[1] TRUE
$hasTouchScreen
[1] FALSE
$javascriptEnabled
[1] TRUE
$locationContextEnabled
[1] TRUE
$mobileEmulationEnabled
[1] FALSE
$nativeEvents
[1] TRUE
$networkConnectionEnabled
[1] FALSE
$pageLoadStrategy
[1] "normal"
$platform
[1] "Linux"
$rotatable
[1] FALSE
$setWindowRect
[1] TRUE
$takesHeapSnapshot
[1] TRUE
$takesScreenshot
[1] TRUE
$unexpectedAlertBehaviour
[1] "ignore"
$version
[1] "70.0.3538.110"
$webStorageEnabled
[1] TRUE
$webdriver.remote.sessionid
[1] "d823c1c5d795381ab346daa2a32c7e87"
$id
[1] "d823c1c5d795381ab346daa2a32c7e87"
remDr$navigate("https://www.baidu.com")#爬取百度
remDr$getTitle()#获取title
remDr$screenshot(display = TRUE)#截图
屏幕快照 2018-12-09 下午6.24.48.png

结尾

用完后关闭、清除容器、关闭docker。

#清除(关闭全部容器) :
docker kill $(docker ps -a -q)  
docker stop $(docker ps -a -q)
#删除全部容器:
docker rm $(docker ps -a -q)

参考

RSelenium Docker安装参考文档
Docker官方网站

sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS  10.14.1

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets 
[6] methods   base     

other attached packages:
[1] RSelenium_1.7.4

loaded via a namespace (and not attached):
 [1] httr_1.3.1       compiler_3.5.1   R6_2.3.0        
 [4] assertthat_0.2.0 tools_3.5.1      wdman_0.2.4     
 [7] binman_0.1.1     curl_3.2         yaml_2.2.0      
[10] Rcpp_1.0.0       jsonlite_1.5     caTools_1.17.1.1
[13] openssl_1.0.2    bitops_1.0-6     semver_0.2.0    
[16] XML_3.98-1.16   
上一篇 下一篇

猜你喜欢

热点阅读