R语言-爬虫rvest

爬虫就是批量自动将网页的内容抓取下来。用任何语言做爬虫必须要了解的就是网页语法,网页语言无非就是HTML,XML,JSON等,因为正是通过这些我们才能在网页中提取数据,过多的就不再描述,大家可以自行参考大量的资料,大多数语法都是树形结构,所以只要理解了,找到需要数据的位置并不是很难。

用R语言制作爬虫无非就是三个主要的包。XML,RCurl,rvest,这三个包都有不同的主要函数,是R语言最牛的网络爬虫包。

了解html

HTML框架简单说就是任何HTML网页文件中都会包含的基本代码内容。如果我们打算写一个页面,就一定要把框架代码写入后才能正式开始添加内容。框架代码如下:

<!DOCTYPE HTML><html> <head> </head> <body> </body> </html>
<!DOCTYPE HTML>

<html>
<head>
</head>
<body>
</body>
</html>

这七行代码是所有HTML页面所共有的,也就是HTML的框架了。可以发现也是很有规律的,比如<head>是开头,</head>是结尾,成对出现。

rvest 介绍及使用

官网连接如下
https://github.com/tidyverse/rvest

对于rvest的使用,主要掌握read_html、html_nodes、html_attr、html_text几个函数。
read_html函数获取获取网页信息;
html_nodes获取网页节点信息;
html_attr函数获取特定节点的属性值。
html_text():获取指定名称的网页元素、节点文本;

rvest是R语言一个用来做网页数据抓取的包,包的介绍就是“更容易地收割(抓取)网页”。其中html_nodes()函数查找标签的功能非常好用。

相关的函数:
read_html():读取html文档;
html_nodes():获取指定名称的网页元素、节点;
html_text():获取指定名称的网页元素、节点文本;
html_attrs(): 提取所有属性名称及内容;
html_attr(): 提取指定属性名称及内容;
html_tag():提取标签名称;
html_table():解析网页数据表的数据到R的数据框中;
html_session():利用cookie实现模拟登陆;
guess_encoding():返回文档的详细编码;
repair_encoding():用来修复html文档读入后乱码的问题。
html_session()用来在浏览器中模拟会话
jump_to()用来接收一个url用来连接的跳转
follow_link()用来接收一个表达式(例如a标签)进行连接的跳转
back()用来模拟浏览器后退按钮
forward()用来模拟浏览器前进按钮
submit_form()用来提交表单
str_trim() 删除字符串2端的空格,转义字符也能删掉。

例子

以爬取链家房的名称 https://hz.lianjia.com/ershoufang/pg/ 为例。
**目标:**我们想要爬取房名。
在这里插入图片描述

步骤
鼠标右键==》审查元素(或者检查),可以看到这些信息所位于的网页标签。
在这里插入图片描述
一步一步解析我们要爬取的内容的位置,因为是树结构,直接看。
内容位于title里面。class="title"表示网页元素div的类为title,用“.”表示类.title a(如果遇到< div id=“idName”>就需要用#,即:#idName)

可以理解为class名为title下的a标签,直接定位到房名。

# 完整代码
lianjia <- read_html("https://hz.lianjia.com/ershoufang/pg/",encoding = "UTF-8")
# 获得节点信息 : CSS 或者 xml 方式
# https://www.w3school.com.cn/cssref/css_selectors.asp
# https://www.w3school.com.cn/xpath/xpath_syntax.asp
pinfen <- lianjia %>% html_nodes('.title a')%>%
  html_text()
pinfen
pinfen <- lianjia %>% html_nodes('.sellListContent .title a')%>%
  html_text()
pinfen
# 问题:为什么两个 pinfen内容差一个呢?答案如下图。

在这里插入图片描述
在这里插入图片描述
答案:因为如果上层只定义title的话,可能匹配到另外的类,所以为了增加准确性可以再加一个上层类sellListContent

这次的例子是爬取了1页的房名,如果想爬取30页的呢?我们查看网址信息:

https://hz.lianjia.com/ershoufang/pg2/
https://hz.lianjia.com/ershoufang/pg3/
https://hz.lianjia.com/ershoufang/pg4/
https://hz.lianjia.com/ershoufang/pg30/

https://hz.lianjia.com/ershoufang/pgxxx/

所以,如上,我们只需要写个循环就可以获得所有页的房名信息。

**注意:**我们这里教程是爬取静态网页的信息,如果是动态网页的话,就需要其它包来爬取,敬请期待~

【末尾福利】
这里强烈推荐一个插件:SelectorGadget
https://huajiakeji.com/web-development/2019-08/957.html

相信爬虫的爱好者们都经历过这样一个爬虫前期的准备过程,那就是用浏览器的审查元素进行爬取目标的定位。每次我们都要浪费部分时间去寻找定位点和xpath,这样既不很方便,也不高效,那么如何提高爬虫中这部分工作的效率呢?它就是:SelectorGadget 插件

  • 5
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值