R爬虫必备——rvest包的使用

上一期R爬虫必备——静态网页+动态网页简单介绍了网页的类型。在实际R爬虫过程中,针对不同的网页,采取的爬虫方法也会有所不同。通常情况下,R爬虫涉及的R包主要有3个:rvest、Rcurl和httr。

  1. rvest抓取静态网页数据****

所谓静态网页,就是你打开一个目标网页,在网页里可以直接看到想要抓取的数据,点击鼠标右键查看源代码后发现在HTML结构中可以在本地找到刚刚在网页里的目标数据,这就是静态网页。对于这样的网页,rvest可以提供一套较为完整的数据抓取方案,配上一些小工具,就可以快速实现爬虫。

  1. Rcurl/httr包实现对网页动态加载数据的抓取

对于网页动态加载的数据,继续使用rvest可能就不合适了。这时R提供了其他选择来实现相应的抓取目的。RCurl功能强大,但对初学者来说稍微有点难度。httr包相当于RCurl的精简版,相对轻巧易上手,功能虽不如RCurl那么齐全,但对于用户而言绝对友好。

今天呢,主要从最简单的静态网页抓取R包——rvest开始,这款R包抓取静态网页的逻辑非常清楚,初学者可以很快理解和上手。下面简单看一下rvest数据抓取的几个核心函数:

read_html():下载并解析网页
html_nodes():定位并获取节点信息
html_text():提取节点文本信息
html_attr():提取节点属性信息

rvest的这些函数如何使用呢?下面我们来简单看个案例——rvest包爬取链家网二手房信息,包括房子名字,房子具体信息(房型、面积、楼层等信息),房子地址,房子总价,房子每平方米单价等信息。

image

简单点,只为演示作用, 仅爬取第一页:http://hz.lianjia.com/ershoufang/pg1。具体代码如下:

#加载所需的包:
library("rvest")
library("stringr")
web <- read_html("http://hz.lianjia.com/ershoufang/pg1", encoding = "UTF-8")
#提取房名信息:
house_name <- web%>%html_nodes("div.info div.title a")%>%html_text()
#提取房子详情链接:
house_link <- web%>%html_nodes("div.info div.title a")%>%html_attrs("href")
#提取房名基本信息并消除空格
house_basic_inf <- web%>%html_nodes(".houseInfo")%>%html_text()
house_basic_inf <- str_replace_all(house_basic_inf," ","")
#提取二手房地址信息
house_address <- web%>%html_nodes(".positionInfo a")%>%html_text()
house_address <-house_address[seq(1,60,2)]
#提取二手房总价信息
house_totalprice <- web%>%html_nodes(".totalPrice")%>%html_text()
#提取二手房单价信息
house_unitprice <- web%>%html_nodes(".unitPrice span")%>%html_text()
#创建数据框存储以上信息
house<-data.frame(house_name,house_basic_inf,house_address,house_totalprice,house_unitprice)
#将数据写入csv文档
write.csv(house, file="../house.csv")

整个代码的逻辑关系是这样:read_html()获取整个网页信息;html_nodes()用来定位到相应节点;html_text()用于获取节点的文本内容;html_attrs()用于获取节点的属性值信息。如:

#read_html获取整个网页  
web <- read_html("http://hz.lianjia.com/ershoufang/pg1", encoding = "UTF-8")
#html_node获取包含房子名称的节点 
tmp <- html_nodes(web,"div.info div.title a")
#html_text获取该节点的文本信息
house_name <- html_text(tmp)
#html_attrs获取该节点的href属性信息
house_link <- html_attr(tmp,"href")  

为方便,信息的提取过程用“%>%”管道符加以连接,书写如下:

web <- read_html("http://hz.lianjia.com/ershoufang/pg1", encoding = "UTF-8")
house_name <- web%>%html_nodes("div.info div.title a")%>%html_text()
house_link <- web%>%html_nodes("div.info div.title a")%>%html_attr("href")

read_html()获取整个网页信息

如:web <- read_html("http://hz.lianjia.com/ershoufang/pg1", encoding = "UTF-8"),返回的就是网页源码信息。

web <- read_html("http://hz.lianjia.com/ershoufang/pg1", encoding = "UTF-8")
web
#{xml_document}
#
#[1] \n\n< ...
#[2] \n
                    
                    

你可能感兴趣的:(R爬虫必备——rvest包的使用)