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包
  1. 主要用法

  2. 用RCurl/httr构造GET请求

  3. 用RCurl/httr构造POST请求

三、网页解析:XML/xml2/rvest包
  1. 解析的一般流程与包

  2. 解析html/XML文档

  3. 解析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请求
 
   
   
 
  1. # 请求url

  2. url<-"https://www.hellobi.com/jobs/search"

  3. # 请求报头参数 headers <-  c(

  4.  "Referer"="https://www.hellobi.com/jobs/search",

  5.  "User-Agent"="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"

  6. )

  7. # 请求查询参数 params <-  list(

  8.  "page" =  1

  9. )

  10. # 利用Rcurl构造 getForm(url,.params = params,.opts=list(httpheader=headers), curl=handle , .encoding="utf-8")

  11. # 利用httr构造 GET(url, query = params, add_headers(.headers =header), handle=h)

3. 用RCurl/httr构造POST请求
 
   
   
 
  1. # 请求url

  2. URL<-"http://study.163.com/p/search/studycourse.json"

  3. # 请求报头参数 headers <-  c(

  4.  "Content-Type" = "application/json",

  5.  "edu-script-token" = "73d073acfeea4d89aeb3b9f4eb991497",

  6.  "Origin" = "http://study.163.com",

  7.  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"

  8. )

  9. # 请求查询参数 Payload=list(

  10.  "activityId" =  0,

  11.  "keyword" = "刘凯", "orderType" =  5,

  12.  "pageIndex" =  1,

  13.  "pageSize" =  20,

  14.  "priceType" =  -1,

  15.  "searchTimeType" =  -1

  16. )

  17. # 利用Rcurl构造 postForm(url,.opts =  list(postfields=toJSON(Payload,auto_unbox=TRUE),httpheader=headers),curl=handle , .encoding="utf-8")

  18. # 利用httr构造 POST(url,add_headers(.headers =headers),body =Payload, encode="json",verbose())

三、网页解析:XML/xml2/rvest包

1. 解析的一般流程与包

R爬虫总结 | RCurl/httr(请求)→XML/xml2/rvest(解析)

在R现有爬虫工具中,Xpath语法的支持度更广、更普遍,比较经典的解析包XML包只支持Xpath语法,而比较年轻的xml2包则增加了对css表达式的支持(内部是通过selectr包中转换函数将css表达式转化为Xpath之后再执行解析的),也可以说R语言现有的爬虫工具中,几乎没有公开的支持CSS表达式的包。

R爬虫总结 | RCurl/httr(请求)→XML/xml2/rvest(解析)

2. 解析HTML/XML文档

R爬虫总结 | RCurl/httr(请求)→XML/xml2/rvest(解析)

3. 解析json文档
 
   
   
 
  1. jsonlite::fromJSON()

四、进阶建议

(一)关于如何进行反爬虫

1、在headers中更换随机User-Agent 2、更换随机IP(建立并维护IP代理池) 3、合理的设置时间延迟(放慢爬取速度) 4、携带Cookies登录 5、学习验证码识别 6、学习RSelenium浏览器驱动框架

(二)关于如何提高爬虫效率

1、学习正则表达式(解析效率+数据清洗) 2、尽量通过向量化函数,避免使用循环 3、并发及多进程(作为进阶的学习方向)

和我一起读书吧

以上是关于R爬虫总结 | RCurl/httr(请求)→XML/xml2/rvest(解析)的主要内容,如果未能解决你的问题,请参考以下文章

爬虫笔记四

爬虫阶段总结

爬虫流程总结

python3.6爬虫总结-01

Python3爬虫请求库的使用requests

python爬虫之requests