R爬取動態網絡
曾經以爲R只用rvest就可以走天下,結果越來越不行,很多R語言書,都是隻介紹R這個一語言,但是往往很多情況下,解決不了問題,今天,在JavaScript的幫助下,我們可以爬取動態網站。比如中國隱含保險監督管理委員會的這個文章:http://www.cbirc.gov.cn/cn/view/pages/ItemDetail.html?docId=843851&itemId=928&generaltype=0&tdsourcetag=s_pctim_aiomsg
使用R的rvest就是不行,因爲這個網站是空的。
用代碼來測試一下:
library(rvest)
library(magrittr)
url <- 'http://www.cbirc.gov.cn/cn/view/pages/ItemDetail.html?docId=843851&itemId=928&generaltype=0&tdsourcetag=s_pctim_aiomsg'
web <- read_html(url)
data <- web %>% html_nodes("div[class='Section0']") %>% html_text()
上面就是一個標準的rvest爬網站的流程,從url建立,到read_html讀取,再到提取對應的節點。
但是,最後你在變量框就會看到,data是空的,什麼都沒有,也不是我們在節點部分選擇錯了,而是這個網站是動態的,必須經過渲染才捕捉到文本。
因此,我們的解決思路就是寫一個js文件,然後就是使用無頭瀏覽器渲染一下,再把渲染的網頁保存爲html格式的,然後再用rvest讀取。
下載無頭瀏覽器
下載方式有很多,直接百度就可以下載,也可以到github倉庫下載,基本上都可以,
這裏分享官方倉庫鏈接:https://phantomjs.org/download.html
還有一個就是我上傳到csdn,免費的,不要C幣:鏈接爲:
https://download.csdn.net/download/yuanzhoulvpi/12152109
下載好之後,就可以進行安裝,唯一要注意的,就是直接放到D盤或者更加簡單一點的位置(你的winsow10桌面看起來很簡單,但是比直接放在d盤要複雜的多)
我就是直接解壓到我的D盤。
這個軟件真的沒什麼複雜的,打開就是下面這樣的,如果你的和我一樣,那就說明安裝成功了。
至於需不需要將phantomjs添加到path環境變量裏面,這個因人而異,因爲我面向的都是很多編程小白,加到環境變量裏面簡直是要他們命,一切從簡單的來,反正,請注意,我的這個phantomjs-2.1.1-windows文件現在就在D盤的直接目錄下。
下面,全都在Rstudio裏面完成。
// scraper_dxy.js
// Create a webpage object
var page = require('webpage').create();
// Include the File System module for writing to files
var fs = require('fs');
// Specify source and path to output file
var url = 'http://www.cbirc.gov.cn/cn/view/pages/ItemDetail.html?docId=843851&itemId=928&generaltype=0&tdsourcetag=s_pctim_aiomsg'
var path = 'bjh.html'
page.open(url, function (status) {
var content = page.content;
fs.write(path,content,'w')
phantom.exit();
});
上面是一個代碼,請注意,接下來我們就要使用rstudio建立一個新的文件。
從左到右依次點擊,然後就有一個新的文本產生,這個時候雖然文本是空的,但是我們直接點擊保存,步驟如下:
請注意,我寫的文件名稱後面加了.js,注意到沒,.js。.js這樣就直接將文本轉換爲js文件了,也就是相當於我們新建了一個js文件而不是文本文件。
。這個時候,你發現圖標都變了,哈哈哈,這樣就說明你新建了一個js,然後我們在這裏放入上面的代碼。
看到我標記的紅線了嗎,就是在這個文件下,保存。其中不知道大家有沒有看到,在第10行代碼,單引號裏面的就是我們要爬的保監會的文章的鏈接,第11行代碼,就是我們將最後渲染的網頁保存到名字爲bjh.html裏面。
接下來我們就是要使用R來爬這個動態網站
system("D:/phantomjs-2.1.1-windows/bin/phantomjs my_bjh.js")
library(rvest)
library(magrittr)
web <- read_html("bjh.html")
aritcle <- web %>% html_nodes("div[class='selection0']") %>% html_text()
其中system("D:/phantomjs-2.1.1-windows/bin/phantomjs my_bjh.js")
就是重點,my_bjh.js就是我們剛纔建立的js文件。D:/phantomjs-2.1.1-windows/bin/phantomjs
就是phantomjs對應的位置。這行代碼一通天王蓋地虎,後,會出現一個結果:就是顯示爲0.
然後在永興下面幾個就可以運行了。