在R裏面配置selenium爬蟲環境


普通的爬蟲,其實什麼編程語言都差很少,由於都是網頁的html源代碼字符串的解析而已,可是不少網頁是具備防止爬蟲的功能,就是沒法直接獲取html源代碼字符串,須要經過JavaScript來互動。好比:
  • https://shuju.wdzj.com/

動態網頁
不管用戶點擊網頁的什麼內容,該網頁的url都不變化,所有的內容都是數據庫實時更新出來。因此咱們的代碼也須要跟這個網頁進行交互,模擬JavaScript進程。
老實說,python寫爬蟲,真的是很爽,太多系統性的工具了:
  • re庫(正則提取)
  • requests庫(網頁數據抓取)
  • 谷歌瀏覽器(對網頁進行分析)
  • BeautifulSoup庫(網頁標籤和內容提取)
  • selenium庫+PhantomJS(得到渲染後的頁面)
可是,我沒有時間去系統性學習python了,並且python爬蟲原本就是另一個大的學習方向。 不過我注意到,selenium庫多是有R的對應版本。

首先下載Selenium Server (Grid)

Selenium是一個用於測試網頁應用的開源軟件。(經過代碼操做瀏覽器,模擬人類鼠標和鍵盤瀏覽瀏覽器操做)
  • 它提供了瀏覽器中的點擊,滾動,滑動,及文字輸入等驅動程序。這樣,利用Selenium便可以經過腳本程序來替代人工進行測試一個開發軟件的各類功能。在處理爬蟲任務中,常常遇到須要輸入文字,進行下拉菜單選擇,以及鼠標點擊等情景。
  • Selenium Server容許你在不一樣的瀏覽器上打開網址,對網頁進行操做,並爬取網頁元素的獨立JAVA程序。在處理爬蟲任務中,常常遇到須要輸入文字,進行下拉菜單選擇,以及鼠標點擊等情景。 經過Selenium Server咱們能夠對網頁進行操做,而後爬取操做後的數據,從而進行爬取動態頁面。
官網:https://www.selenium.dev/downloads/
是一個java程序,最新版(2020-05-21 )下載連接以下:
  • https://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.59.jar
無論你的電腦是Windows仍是macOS,理論上都是須要本身搞定java運行環境的哈。

而後配置chrome + chromeDriver

谷歌瀏覽器下載安裝很簡單,無論你的電腦是Windows仍是macOS都是正常的軟件安裝步驟而已。
打開谷歌瀏覽器,輸入:chrome://version/ 就能夠看到你的谷歌瀏覽器安裝文件夾路徑,而後下載chromeDriver文件拷貝到谷歌瀏覽器安裝文件夾路徑,以下:
    
cd /Applications/Google\ Chrome.app/Contents/MacOS/
(base) jmzengdeMacBook-Pro:MacOS jmzeng$ ls -lh 
-rwxrwxr-x  1 jmzeng  admin   207K May  2 06:39 Google Chrome
-rwxr-xr-x@ 1 jmzeng  admin    10M May 21 09:19 chromedriver
這兩個文件很是重要,若是是蘋果電腦,有一個權限設置也很重要:
    
  xattr  -d  com .apple .quarantine  chromedriver
就在chromeDriver文件所在目錄運行哦!
chromeDriver文件的下載連接是:
  • https://chromedriver.storage.googleapis.com/index.html?path=2.29/

接着開啓Selenium Server (Grid)

前面下載了 selenium-server-standalone-3.141.59.jar,是java文件,因此調用你電腦配置好的java環境便可使用它啦,下面的命令
    
java  -jar  selenium-server-standalone-3 .141 .59 .jar
日誌以下:
    
09 :27 :52.106  INFO  [GridLauncherV3.parse]  -  Selenium  server  version: 3 .141 .59revisione82be7d358
09 :27 :52.174  INFO  [GridLauncherV3.lambda$buildLaunchers$3]  -  Launching  a  standalone  Selenium  Server  onport 4444
2020 -05-21 09 :27 :52.205 :INFO ::mainLogging  initialized @ 274ms to org.seleniumhq.jetty9.util.log.StdErrLog
09: 27: 52.350 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
09: 27: 52.416 INFO [SeleniumServer.boot] - Selenium Server is up and running on port  4444

最後寫R爬蟲

代碼很簡單,以下:
    
library(RSelenium)
library(rvest)
library(stringr)

################調用R包#########################################
library(rvest)         # 爲了read_html函數
library(RSelenium)     # 爲了使用JavaScript進行網頁抓取

###############鏈接Server並打開瀏覽器############################
remDr <- remoteDriver(remoteServerAddr =  "127.0.0.1" 
                      , port =  4444
                      , browserName =  "chrome") #鏈接Server
remDr$open()  #打開瀏覽器
remDr$navigate( "https://shuju.wdzj.com/"#打開網頁
固然了,RSelenium用法確定不止一次啦。一大波學習連接:
  • https://ropensci.org/tutorials/rselenium_tutorial/
  • http://thatdatatho.com/2019/01/22/tutorial-web-scraping-rselenium/

須要區分靜態網頁和動態網頁

靜態網頁:https://phantomjs.org/api/webpage/property/cookies.html
動態網頁:https://shuju.wdzj.com/

文末友情宣傳

強烈建議你推薦咱們生信技能樹給身邊的 博士後以及年輕生物學PI,幫助他們多一點數據認知,讓科研更上一個臺階:
推薦 閱讀







本文分享自微信公衆號 - 生信技能樹(biotrainee)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。html

相關文章
相關標籤/搜索