rvest包总结

阅读数:290

1、rvest介绍

网络爬虫是讲呈现在网页上以非结构格式(html)存储的数据转化为结构化数据的技术,该技术非常简单易用。

rvest是R用户使用率最多的爬虫包,它简洁的语法可以解决大部分的爬虫问题。

基本使用方法:

  1. 使用read_html读取网页;

  2. 通过CSS或Xpath获取所需要的节点并使用html_nodes读取节点内容;

  3. 结合stringr包对数据进行清理。

与Python的比较:

  • Python倾向于做大型爬虫,与R相比,语法相对复杂,因此Python爬虫的学习曲线会相对陡峭。

  • 对于那些时间宝贵,又想从网上获取数据的初学者而言,用R做爬虫是最好的选择:

  1. R语法相对直观,规则更加灵活;

  2. 对于数据量不大的用户来数(小于百万级),R也能够非常自如地处理;

  3. 先学习R爬虫,等熟悉爬虫的原理之后,在过渡到Python是很容易的。

rvest的项目主页:https://cran.r-project.org/web/packages/rvest/index.html

2、API介绍

读取与提取:

  • read_html( ) 读取html文档的函数

  • html_nodes( ) 选择提取文档中指定元素的部分

  • html_name( ) 提取标签名称;

  • html_text( ) 提取标签内的文本;

  • html_attr( ) 提取指定属性的内容;

  • html_attrs( ) 提取所有的属性名称及其内容;

  • html_table( ) 解析网页数据表的数据到R的数据框中;

  • html_form( ) 提取表单。

乱码处理:

  • guess_encoding( ) 用来探测文档的编码,方便我们在读入html文档时设置正确的编码格式

url <- "http://quote.eastmoney.com/stocklist.html"

x <- content(GET(url), "raw")

guess_encoding(x)

guess_encoding( )

用于探测网页的编码,遇到编码错误用这个解决

  • repair_encoding( ) 用来修复html文档读入后的乱码问题

行为模拟:

  • set_values( ) 修改表单

  • submit_form( ) 提交表单

  • html_session( ) 模拟HTML浏览器会话

  • jump_to( ) 得到相对或绝对链接

  • follow_link( ) 通过表达式找到当前页面下的链接

  • session_history( ) 历史记录导航工具

3、函数详解

—3.1 读取与提取

——3.1.1 read_html

函数定义:read_html(x, encoding = "", ..., options = c("RECOVER", "NOERROR", "NOBLANKS"))

参数列表:

  • x 可以是url,本地路径,包含html的字符串,或者来自httr的请求如果x是URL参数就传递给GET()

  • encoding 文档的编码形式,查看iconvlist()有完整列表,他如果不能正确确定encoding方式可以尝试stri_enc_detect

应用实例:

image

——3.1.2 html_nodes

函数定义:

  • html_nodes(x, css, xpath)

  • html_node(x, css, xpath)

html_node只输出一个元素。当给了一个节点列表时,html_node将返回一个长度相等的列表。

参数列表:

  • x 完整的文档(XMLInternalDocument),tags列表(XMLNodeSet),单一的tag(XMLInternalElementNode)

  • css, xpath 要收集的节点。css和xpath 两种selector方式可选(class用".", id用"#"与标签连接, 标签之间用空格, ">"指定的筛选条件的父级标签),可使用浏览器插件Selector Gadget辅助(chrome中的css viewer 和 xpath helper 也是神器)

应用实例:

image
image

——3.1.3 html_name

函数定义:html_name(x)

参数列表:x 完整的文档(XMLInternalDocument),标签列表(XMLNodeSet)或(XMLInternalElementNode)

应用实例:

image

——3.1.4 html_text

函数定义:html_text(x, trim = FALSE)

参数列表:

  • x 完整的文档(XMLInternalDocument),标签列表(XMLNodeSet)或(XMLInternalElementNode)

  • trim 如果TRUE则过滤前后的空格

应用实例:

image

——3.1.5 html_attr

函数定义:

  • html_attr(x, name, default = NA_character_)

  • html_attrs(x)

参数列表:

  • x 完整的文档(XMLInternalDocument),标签列表(XMLNodeSet)或(XMLInternalElementNode)

  • name 要提取的属性名

  • default 若任何一个节点的属性不存在则用这里设置的string参数

应用实例:

image

——3.1.6 html_table

函数定义:html_table(x, header = NA, trim = TRUE, fill = FALSE, dec = ".")

参数列表:

  • x 网页文档、节点集或单个节点

  • header 如果为TRUE则使用第一行为列名,若为NA,当有<th>标签时使用第一行为列名

  • trim 如果为TRUE则过滤每个单元格前后的空格

  • fill 如果TRUE,自动填充缺失为NA

  • dec 字符转换为10进制

应用实例:

image

——3.1.7 html_form

函数定义:html_form(x)

参数列表:x 网页文档、节点集或单个节点

应用实例:

image

—3.2 乱码处理

——3.2.1 guess_encoding

函数定义:guess_encoding(x)

参数列表:x 字符型向量

应用实例:

image
image

——3.2.2 repair_encoding

函数定义:repair_encoding(x, from = NULL)

参数列表:

  • x 字符型向量

  • from 字符的实际编码格式

应用实例:

image

—3.3 行为模拟

——3.3.1 set_values( ) 修改表单

函数定义:set_values(form, ...)

参数列表:

  • form 要修改的表单

  • ... 针对要修改控件的的名-值对

应用实例:

image

——3.3.2 submit_form

函数定义:submit_form(session, form, submit = NULL, ...)

参数列表:

  • session 要提交表单的会话

  • form 要提交的表单

  • submit 上传使用的button名,如果没有设置,默认为form第一个上传的button

  • ... GET()和POST()的附加参数

应用实例:

image
image

——3.3.3 html_session

函数定义:

  • html_session(url, …)

  • is.session(x)

参数列表:

  • url 开始session的地址

  • ... 这整个session的httr配置参数

  • x 欲测试是否是session的object

方法:

一个session结构可以响应httr和html方法的操作:可以访问请求的属性,以及可以使用html_nodes访问html。

应用实例:

image

——3.3.4 jump_to

函数定义:jump_to(x, url, ...)

参数列表:

  • x 一个会话

  • url 要访问的地址(相对或绝对)

应用实例:

image

——3.3.5 follow_link

函数定义:follow_link(x, i, css, xpath, ...)

参数列表:

  • x 一个会话

  • i 若为整型,则选择第i个链接;若为字符串,则选择包含该文本信息的第一个链接

  • css xpath 要选择的节点

  • ... 能应用到这个请求的任何httr配置

应用实例:

image

——3.3.6 session_history

函数定义:

  • session_history(x)

  • back(x)

参数列表:x 一个会话

应用实例:

image

4、补充知识

—4.1 包外API

  1. head( ) 检查数据

  2. as.numeric( ) 转化为数值型

  3. gsub( ) 移除" ", "\n", "\t"等

  4. as.factor( ) 转化为因子

  5. data.frame( ) 合并为数据框

  6. trycatch( ) 错误处理

  7. write.csv( ) 输出csv文件

  8. file.download( ) 下载网络文件

  9. read.table( ) 读取本地文件

  10. save( ) 保存变量到本地

  11. sapply( ) 向量化调用函数

  12. iconv( ) 转化编码格式

  13. rbind( ) 合并行

  14. paste( ) 连接字符串,多用来生成有规律的链接地址

—4.2 关联package

  1. stringr 字符串处理

  2. RSelenium 模拟网页操作,可抓取动态页面

  3. ggplot2 数据可视化

  4. magrittr 辅助rvest

—4.3 使用技巧

  1. 获取特定序位的html标签,用到了magrittr包里的extract2函数。下面两行代码都可以获得该网页中第一个<table>标签
  • ateam %>% html_nodes("table") %>% extract2(1) %>% html_nodes("img")

  • ateam %>% html_nodes("table") %>% [[(1) %>% html_nodes("img")

  1. %>%是管道操作符,意思是把左边的操作结果作为参数传递给右边的命令

  2. 需要换页的同类型页面的地址一般会有规律,找到规律后就可生成一系列地址

  3. 定位所需内容时,有时html_nodes+stringr更方便,不使用html_text

  4. 若爬取内容过多,可使用边爬边存或者分批处理等

米霖微信.PNG

添加我的微信吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 安装包 查看rvest包的详细信息 包的用法: read_html() 读取html文档的函数,其输入可以是线上的...
    LeoinUSA阅读 5,550评论 0 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,649评论 18 139
  • Java继承关系初始化顺序 父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父...
    第六象限阅读 2,152评论 0 9
  • 面试必背 会舍弃、总结概括——根据我这些年面试和看面试题搜集过来的知识点汇总而来 建议根据我的写的面试应对思路中的...
    luoyangzk阅读 6,753评论 6 173
  • 2018web前端最新面试题总结 一、Html/Css基础模块 基础部分 什么是HTML?答:​ HTML并不是...
    duans_阅读 4,667评论 3 27