R爬虫总结 | RCurl/httr(请求)→XML/xml2/rvest(解析)
Posted 女王的code
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R爬虫总结 | RCurl/httr(请求)→XML/xml2/rvest(解析)相关的知识,希望对你有一定的参考价值。
总结
R爬虫总结:
RCurl/httr→XML/xml2/rvest
参考课程
Hellobi Live |R语言爬虫实战案例分享:网易云课堂、知乎live、今日头条、B站视频https://edu.hellobi.com/course/237
目录
一、R爬虫框架
二、网络请求:RCurl/httr包
主要用法
用RCurl/httr构造GET请求
用RCurl/httr构造POST请求
三、网页解析:XML/xml2/rvest包
解析的一般流程与包
解析html/XML文档
解析json文档
一、R爬虫框架
R中爬虫的实现方式有三种: 1、直接抓取HTML文档:即所有的数据已经全部插入到html文档中; 2、异步加载页面: (1)利用网站提供的API接口进行抓包; (2)利用selenium工具驱动浏览器,脚本渲染后数据全部插入到html文档,最后返回完整的html文档。
针对爬虫的主要流程(构造并发送请求——接收并解析响应——数据转换与本地存储),R主要提供了两套爬虫语法:
package | Rcurl+XML | httr+xml2/rvest |
---|---|---|
网络请求 | Rcurl | httr |
网页解析 | XML | xml2/rvest |
二、网络请求:RCurl/httr包
1. 主要用法
Rcurl | httr | |
---|---|---|
GET请求 | getURL/getFrom/getBinaryURL/writeBIN | writeBIN |
POST请求 | postFrom | POST |
2. 用RCurl/httr构造GET请求
# 请求url
url<-"https://www.hellobi.com/jobs/search"
# 请求报头参数 headers <- c(
"Referer"="https://www.hellobi.com/jobs/search",
"User-Agent"="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"
)
# 请求查询参数 params <- list(
"page" = 1
)
# 利用Rcurl构造 getForm(url,.params = params,.opts=list(httpheader=headers), curl=handle , .encoding="utf-8")
# 利用httr构造 GET(url, query = params, add_headers(.headers =header), handle=h)
3. 用RCurl/httr构造POST请求
# 请求url
URL<-"http://study.163.com/p/search/studycourse.json"
# 请求报头参数 headers <- c(
"Content-Type" = "application/json",
"edu-script-token" = "73d073acfeea4d89aeb3b9f4eb991497",
"Origin" = "http://study.163.com",
"User-Agent" = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"
)
# 请求查询参数 Payload=list(
"activityId" = 0,
"keyword" = "刘凯", "orderType" = 5,
"pageIndex" = 1,
"pageSize" = 20,
"priceType" = -1,
"searchTimeType" = -1
)
# 利用Rcurl构造 postForm(url,.opts = list(postfields=toJSON(Payload,auto_unbox=TRUE),httpheader=headers),curl=handle , .encoding="utf-8")
# 利用httr构造 POST(url,add_headers(.headers =headers),body =Payload, encode="json",verbose())
三、网页解析:XML/xml2/rvest包
1. 解析的一般流程与包
在R现有爬虫工具中,Xpath语法的支持度更广、更普遍,比较经典的解析包XML包只支持Xpath语法,而比较年轻的xml2包则增加了对css表达式的支持(内部是通过selectr包中转换函数将css表达式转化为Xpath之后再执行解析的),也可以说R语言现有的爬虫工具中,几乎没有公开的支持CSS表达式的包。
2. 解析HTML/XML文档
3. 解析json文档
jsonlite::fromJSON()
四、进阶建议
(一)关于如何进行反爬虫
1、在headers中更换随机User-Agent 2、更换随机IP(建立并维护IP代理池) 3、合理的设置时间延迟(放慢爬取速度) 4、携带Cookies登录 5、学习验证码识别 6、学习RSelenium浏览器驱动框架
(二)关于如何提高爬虫效率
1、学习正则表达式(解析效率+数据清洗) 2、尽量通过向量化函数,避免使用循环 3、并发及多进程(作为进阶的学习方向)
和我一起读书吧
以上是关于R爬虫总结 | RCurl/httr(请求)→XML/xml2/rvest(解析)的主要内容,如果未能解决你的问题,请参考以下文章