最近因为有爬取动态网页的需要,但是不熟悉python,因此研究了一下R进行动态网页爬取。总结下来,主要困难还是在环境的配置,因为关于R的资料较少,因此不是很方便。
一般的静态网页,我们可以用rvest爬取,但是这种动态网页,用rvest只能爬取一个空白出来。
动态页面和静态页面最主要的区别就是当数据刷新的时候用了ajax技术,刷新时从数据库查询数据并重新渲染到前端页面,数据都存储在网络包中,爬取HTML是获取不到数据的
爬虫抓取静态网页和动态网页
首先我试了Rwebdriver包,参考:https://zhuanlan.zhihu.com/p/28108329
但是这个包无论怎么安装(devtools,本地加载),均不能成功。然后查了一下原因,看到这个包是2015-2016年的,且之后一直未更新;使用这个包的相关文章,也集中在17年左右。个人猜测是因为长时间不更新,导致和现有的R版本不兼容(本文R版本为3.6.2 (2019-12-12))。配置了很长时间,最后无奈放弃。
之后开始再次寻找R上面的爬虫,找到
- 无头浏览器方法。 圆子:R爬取动态网站
- Rseleium包
- Rcrawler包(全自动下载网页,但所需时间过长,因此被我放弃)
最后看下来,兼顾方便和效率,选择Rseleium进行爬取。
几个参考的资料:
https://blog.csdn.net/LEEBELOVED/article/details/89461304
windows下配置RSelenium及Selenium环境
selenium server运行时候报错---“端口被占用”,Windows平台如何查看端口占用情况
下面说说安装过程,其实主要是安装环境的搭建。
1、首先建议下载firefox浏览器,下载最新版本的。
2、firefox浏览器安装后需要将其安装路径加到系统环境变量。
参考:R语言RSelenium包爬取动态网页数据前期准备(环境配置)-连载NO.01_人工智能_STAY HUNGRY STAY FOOLISH-CSDN博客
windows系统如何设置添加环境变量-百度经验
3、java环境配置。注:我的电脑好像自己带有java jdk,大家可以检查一下自己的电脑有没有
参考:R语言RSelenium包爬取动态网页数据前期准备(环境配置)-连载NO.01_人工智能_STAY HUNGRY STAY FOOLISH-CSDN博客
4、seleium配置
去seleium官网(Downloads)或者找找镜像下载,然后选择最新版本的selenium-server-standalone-3.141.59.jar。下载,保存到电脑上。建议保存到C盘,自己建一个文件夹(我的是C:Seleium)
5、运行seleium。这步骤我弄了很久,原因是win 10的cmd命令行总是报错,如下:
C:Seleium>java -jar selenium-server-standalone-3.141.59.jar
后来弄清楚之后,可能有2个原因,一个是cmd没有在管理员模式下运行(记得cmd之后要右击,选择管理员模式运行!!)
还有一个是路径问题,路径要设置成C:Seleium!!!
设置方法:用 “CD /D C:Seleium”,然后用java -jar selenium-server-standalone-3.141.59.jar运行我们的seleium(类似于一个插件)。
设置CMD默认路径 - 暮良文王 - 博客园
最后可以看到seleium成功了。
还有一种方法:在保存文件夹下,按住shift,右击,出现,在此处打开pewershell窗口(有的人没有这个选项,百度解决方法)也同样运行java插件,应该也能看到成功了
有的人会出现端口4444 is busy,参考:
selenium server运行时候报错---“端口被占用”,Windows平台如何查看端口占用情况
6、R配置和爬取程序
股票、基金、期货、美股、港股、外汇、黄金、债券行情系统
# install.packages("Rseleium")
library(RCurl)# 抓取数据
library(XML)# 解析网页
librar(rvest)
library(RSelenium)
url_gp <- "http://quote.eastmoney.com/center/gridlist.html?st=ChangePercent&sortType=C&sortRule=-1#sh_a_board"
remdr <- remoteDriver(browserName ="firefox")
remdr$open()#打开firefox
remdr$navigate(url_gp)#打开url
m <- remdr$getPageSource()
webpage <- read_html(m[[1]][1])
data_temp <- html_table(webpage, fill = T)[[1]]#这里可以多选择几个基本上1,2,3,4都可以看看,表格就在这里
#data_temp即为我们的数据如下:
至此,我们终于成功爬取了一个动态网页。其实最后面不难,麻烦的是java的各个版本,windows的环境配置,如果有dos的使用经验,可能会容易些。