R爬取動態網絡

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.
然後在永興下面幾個就可以運行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章