RSelenium环境配置之非码农版
最近喜欢上了爬虫,所以特别想折腾下关于爬虫的事情。
但是个人是R的重度用户,对python之流完全无法直视,主要是因为自己实在愚笨,学不会python,所以重点还是放在R上面。
在R上面一般用得比较多的是rvest,这个是一种很简单的R下的爬虫框架,大多数人都拿它来爬虫极其简单的html页面,网上的介绍比较多,比如R语言爬虫初尝试-基于RVEST包学习,【数据获取】爬虫利器Rvest包等等,实在太多了,各位玩家如果有兴趣,可以自行去Bing一下。
另外一种R语言下的爬虫框架,大名鼎鼎的RCurl和XML,这才是R语言下的爬虫框架利器,网上关于这两者搭配用于爬虫程序的介绍一大把,炼数成金曾经出了一个系列的关于RCurl以及XML联合用于爬虫的视频课程,可惜国内基本只能在免费的情况下看到第一集,曾经的youtube上有完整的该系列课程视频,在可以FQ的年代我没有珍惜,现在只剩无尽的后悔...
以下是我对油管的情怀
难道老外可以免费学习而中国人只能掏出自己的MM?
当然以上要么就是比较简单的rvest,要么就是强大而学不会的RCurl和XML,那么有没有相对来说更符合我们平常浏览网页的爬虫框架呢?答案当然是肯定的...感谢强大的selenium!
说实在话,selenium最诱惑人的就是它能并且模拟浏览器的动作,网上有一大波,喔,不对,是一大把教程......
当然网上的教程绝大部分都是基于python的,对于我等R语言的用户来说,这真是只闻其好啊,不折腾岂不显得很无聊?
以上啪啦啪啦说了一大波,不对,一大堆废话,还是说说R语言如何配置selenium吧。
为了显示本人理科男的特质,还是按照one,two,three...的模式来吧:
1. selenium已经进化到第三代,也就是通俗地叫作为selenium3,所以不是selenium1(这个得搭配webdriver),也不是selenium2(这货就是selenium1+webdriver)
2. selenium原生支持的浏览器是firefox,注意不是chrome (当然国内用户是没资格用这货的,毕竟被墙的东西),不是ie和edge...这些东西后面还有得说
3. 很多牛逼的码农们,都极其鄙视windows系统,所以本人肯定属于被鄙视的,不过咱就一消费者,还怕鄙视么?qie...真心不好找selenium在windows下的配置方法,更不要说selenium在windows系统下在R语言中的配置了,但是咱不是有迎难而上的好气质么?本文只涉及windows系统,R语言,firefox浏览器,selenium3
4. Rselenium是一个好package,虽然说好的是selenium2,但是在selenium3下运行良好,关于Rselenium的入门和相关技术文档,请参看CRAN上的相关介绍
5. 要运行selenium,首先就得要一个selenium server,要成功运行一个selenium server,有两种方法:创建一个docker,运行类似于selenium-server-standalone-x.xx.x.jar这样的文件,docker其实类似于虚拟机(不对的话勿喷),在我的电脑上没有配置成功,而且下载浪费了无数的时间(差不多7-8个小时吧),那么唯一可以让我选择的就是最简单的运行selenium-server-standalone-x.xx.x.jar二进制文件
6. 虽然这些jar文件都托管在google上,不知为啥,国内用户还能顺利下载,至少本人没遇到问题
7. 下载上面的文件后(本人选择的是3.6.0版本),随意放在一个自定义的目录下,本人的目录是:C:\Selenium server standalone
8. shell下运行cmd命令,进到上述目录下,直接运行:java -jar selenium-server-standalone-x.xx.x.jar,啪啦啪啦出现一大串让人眼晕的代码
里面好像有好多错误啊...到底管不管呢?lz的英语能力有限,先不管了...其实这个跟selenium2以及selenium1运行成功的界面好像确实不一样了,唯一让人眼前一亮的就是最后的那句:Selenium Server is up and running
9. 注意保持这个界面运行,不要关闭之
10. 进入Rstudio,在你已经install了RSeleniun的情况下,直接 library(RSelenium),然后按照CRAN上的简要介绍开始一下
11. 你肯定会遇到各种错误的,第一个可能出现的 错误见下图
这啥玩意儿啊...?
其实selenium的错误报警真的很良心,copy这个错误,可以直接Bing它,更直接的做法是:直接复制这段错误中的两个链接,github或者releases,下载最新的geckodriver吧。因为本文只涉及firefox,所以这里也只讲到firefox的对应问题
简单解释下:
因为我们用的浏览器是firefox55,所以要用到geckodriver,更低版本的firefox怎么办?网上的答案很多,简单来说就是更低版本的firefox最好搭配selenium2,而不是selenium3,那么到底多低的firefox版本呢?没有测试,没有发言权
请仔细看看geckodriver的说明
12. 当我们安装了geckodriver之后,在你继续RSelenium的开胃菜之时,你可能会发现你运行成功了,然后...然后又出现下面的错误了
WHAT THE FUCK?
然后你又Bing...看了特么的一大堆英文之后,懵逼了...
为什么会报这个错误?怎么解决?
因为geckodriver必须放在跟firefox.exe同一个目录下,而且必须在windows的环境变量中配置它,见下图
切记:geckodriver.exe必须和firefox.exe放在同一目录下,当然你没得选,只能把geckodriver.exe放在firefox.exe的安装目录下,并且再次切记:在windows中系统环境变量中配置它,不知怎么配置环境变量?Bing!
13. 然后...然后我们可以开始愉快的selenium了
remoteDriver()创建一个server对象,然后把这个对象open(),会打开新的firefox窗口,然后开始你的selenium之旅吧
那么我们的shell窗口呢?
在你啪啦啪啦的selenium之旅时,那个shell窗口当然没闲着,它会随着你执行的每一步Debug...一大堆我等看不懂的东西出来,切记之三:不要在运行selenium的时候关闭它!
说在最后:
selenium之所以很爽,是因为它相当于模拟了一个浏览器,不再像我们使用rvest或者rcurl的时候等同于盲操
当然selenium更简单,对付动态页面等等更直观
有人更用selenium来实现了变态验证,有兴趣可以看看去,思路很好
另外python中关于selenium的介绍更多,可以拿来作为R的参考
对于非码农来说,写这么一篇文章真是折磨呀