R爬虫必备基础—rvest为什么不用于动态网页?

2020-08-13  本文已影响0人  Clariom

上一期R爬虫必备—httr+POST请求类爬虫(网易云课堂)主要介绍了httr包如何进行POST请求类爬虫,什么是POST?POST是一种HTTP 请求,根据 HTTP 标准,共有六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

image.png
在请求模式中,最常用的请求方法是GET和POST方法,在爬虫过程中至关重要。这两个方法都是从服务器请求一个资源,但是在正文的使用上有所不同。GET方法是网络请求最通用方法,可理解为直接请求。POST则有所区别,需要提交表单信息才能请求到信息

之前咱们写过R爬虫必备——rvest包的使用,它的网页请求方式就很简单,直接用read_html()即可获取网页,完全没有涉及这些请求方法。怎么看这个包更简单更方便,那为什么不用rvest进行爬取呢?

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

read_html

read_html函数其实直接调用的是xml2包中的read_html方法,rvest包作为请求器的脆弱性便在于此,它是一个I/0函数。通俗一点说就是文件导入导出的操纵函数,与read_csv、read_xlsx、read_table属于同类。在XML包中与之功能一致的函数是xmlParse/xmlTreeParse。xmlParse/xmlTreeParse函数也是仅仅作为RCurl请求包的解析函数使用的,很少有单独使用xmlParse请求并解析网页,它太脆弱了,尽管它是支持直接从url获取并解析网页的。当然,对于那些对网络请求没有过多限制的网页来说,可以直接使用read_html函数获取并解析网页。

html_nodes

html_nodes函数是rvest包中非常关键的函数,提供有两套网页解析语法:xpath、css,可以非常便利的提取自己想要的节点信息。在html_nodes函数中,最终的解析函数是xml2中的xml_find_all函数,它的功能类似于XML包中的XpathAapply函数或者getNodest函数。在html_nodes函数中,一切都是xpath,即便你提供的是css路径,也会先被转化为xpath之后再使用xml_find_all函数进行处理。

html_attrs

该函数直接调用的xml2包中的xml_attrs函数,就是从节点中批量提取属性值。

html_text

该函数调用的xml2包中的xml_text函数,提取节点文本。

httr+rvest与RCurl+XML两种工具搭配的比较

image.png

四种常规参数编码类型:application/x-www-form-urlencoded ;multipart/form-data;application/json;text/xml。

总结:rvest包的高级请求功能依托于httr(当然你可以直接使用httr来构造请求)。解析器依托于xml2包中的xml_find_all函数实现。解析语法有css和xpath可选,但是最终都会转换为xpath进行解析。借助magrittr包来做管道优化,实现代码简化与效率提升。

参考:https://cloud.tencent.com/developer/article/1092915

更多内容可关注公共号“YJY技能修炼”~~~

往期回顾
R爬虫在工作中的一点妙用
R爬虫必备基础——HTML和CSS初识
R爬虫必备基础——静态网页+动态网页
R爬虫必备——rvest包的使用
R爬虫必备基础——CSS+SelectorGadget
R爬虫必备基础—Chrome开发者工具(F12)
R爬虫必备基础—HTTP协议
R爬虫必备—httr+POST请求类爬虫(网易云课堂)

上一篇下一篇

猜你喜欢

热点阅读