2020-8-7 16:01 阅读(3296) 评论(0)

从零开始学习RSelenium爬取网页

摘要: RSelenium 详解;RSelenium配置;RSelectnium爬虫


一、前言

在爬取房天下小区信息时,发现通过read_html直接打开网址会出现验证码,而通过网页菜单进入则可以正常打开。

为了解决这个问题,想到了用Rselenium来实现。

二、背景

       使用Rvest包抓取静态网页非常方便,但如果如果碰上动态网页,Rvest包则无法满足需求,例如:

1.    要抓取的内容非静态网页,而是jsjquery等查询结果;

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

四、使用seleniumrvest抓取数据

本文以抓取房天下小区信息为例。

重要提醒:本文仅用于单页面技术讲解,切勿大批量抓取或用于商业用途,由此带来的法律风险个人自负

第一步:启动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) #这个包用于操作网页,以便于获取jsjquery等数据

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爬取到了房天下网站的小区信息。




鲜花

握手

雷人

路过

鸡蛋

最新评论

在线笔记
公众号
微信公众号

爱数吧公众号

意见反馈
返回顶部
返回顶部