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.
然后在永兴下面几个就可以运行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhoulvpi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值