从零开始学习RSelenium爬取网页
一、前言 在爬取房天下小区信息时,发现通过read_html直接打开网址会出现验证码,而通过网页菜单进入则可以正常打开。 为了解决这个问题,想到了用Rselenium来实现。 二、背景 使用Rvest包抓取静态网页非常方便,但如果如果碰上动态网页,Rvest包则无法满足需求,例如: 1.
要抓取的内容非静态网页,而是js、jquery等查询结果; 2.
网站控制了页面的入口,只能从网站内进入,直接通过网址进入则会出现验证码、需登录等提示从而导致无法抓取页面内容; 3.
需要翻页的时候。(部分翻页也可以通过Rvest包实现) 三、准备 1.
Java开发环境下载及安装。Selenium
Server是一个JAVA程序,需要JAVA的开发环境。 下载地址:https://www.oracle.com/java/technologies/javase-jdk14-downloads.html。 建议安装到默认路径,然后配置环境变量, 方法见:https://jingyan.baidu.com/article/48206aea070004606bd6b31d.html。 2.
Selenium
Server下载。(不需安装) 下载地址:http://selenium-release.storage.googleapis.com/index.html 。 选择最新版本,本文使用的是 selenium-server-standalone-3.9.1.jar 。 3.
Chrome浏览器下载及安装。 下载地址:https://www.google.cn/chrome/ 。 4.
ChromeDriver下载。 下载地址:http://npm.taobao.org/mirrors/chromedriver/2.33/ 。 解压后将ChromeDriver.exe(最新版本)放在Chrome的安装路径下,和chrome.exe放在同一个目录下面。 5.
环境变量配置 将chrome.exe所在文件路径(如 C:\Program Files (x86)\Google\Chrome\Application) 添加进环境变量中。 环境变量配置方法见:https://jingyan.baidu.com/article/db55b6099d1e0d4ba30a2fc0.html。 上述RSelenium+Chrome爬虫所需的软件已经整理好,也可以通过下述链接免费下载。 链接: https://pan.baidu.com/s/1GS-9EkVbIT_SOHzbAGFkOQ 提取码: vpks 四、使用selenium及rvest抓取数据 本文以抓取房天下小区信息为例。 【重要提醒:本文仅用于单页面技术讲解,切勿大批量抓取或用于商业用途,由此带来的法律风险个人自负】 第一步:启动selenium
server 1. 在刚才下载的seleniumn server文件(selenium-server-standalone-3.9.1.jar)所在的文件夹, Shift+鼠标右键,选择“在此处打开命令窗口”。 2.
在命令窗口中输入java -jar selenium-server-standalone-3.9.1.jar 注意jar包文件名使用自己真实下载的版本。 3.
最小化命令窗口(切勿关闭)。 第二步:在R中引用Rselenium包和Rvest包 install.packages("RSelenium") library(RSelenium) #这个包用于操作网页,以便于获取js、jquery等数据 install.packages("rvest") library(rvest) 第三步:连接selenium
server、打开浏览器、访问网址、爬取数据 explorer <-
RSelenium::remoteDriver(remoteServerAddr = "127.0.0.1" #本地
, port = 4444
, browserName = "chrome")#连接Server explorer$open() #打开浏览器 explorer$navigate("https://cd.esf.fang.com/")
#打开网页 #因为网站控制不能直接打开找小区的页面,所以在上面打开二手房页面后再打开找小区页面即可,不用模拟点击页面 explorer$navigate("https://cd.esf.fang.com/housing/")
#打开网页 #获取到对应元素 webElem <- explorer$findElement(using =
"class", "houseList") web<-read_html(webElem$getElementAttribute("outerHTML")[[1]])
#读取打开的网页 nodes<-html_nodes(web,".plotTit") #读取小区名称及链接 xiaoqu_name<-html_text(nodes) #获取小区名称 xiaoqu_url<-html_attr(nodes,"href") #获取小区链接 nodes<-html_nodes(web,".priceAverage") #读取均价 price<-html_text(nodes) #获取均价 price2<-trimws(price,which=c("both","left","right"),whitespace
= "[\t\r\n]") #去除均价内容汇总的空格 xiaoqu_list<-data.frame(xiaoqu_name,xiaoqu_url,price2)
#构建成数据帧,也就是一张表 setwd("E:/房天下数据爬取") #设置工作目录 write.csv(xiaoqu_list,"xiaoqu_list.csv") #导出爬取到的数据 这样就成功利用RSelenium+rvest爬取到了房天下网站的小区信息。 |
最新评论