ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

R语言网络数据爬虫之三个问题

2022-06-13 09:05:18  阅读:144  来源: 互联网

标签:语言 get 函数 爬虫 library RCurl 网络 请求


现在大家对爬虫的兴趣不断高涨,R和PYTHON是两个非常有力的爬虫工具。Python倾向于做大型爬虫,与R相比,语法相对复杂,因此Python爬虫的学习曲线会相对陡峭。对于那些时间宝贵,又想从网上获取数据的初学者而言,用R做爬虫是最好的选择,有三个原因:R语法相对直观,规则更加灵活;对于数据量不大的用户来数(小于百万级),R也能够非常自如地处理;先学习R爬虫,等熟悉爬虫的原理之后,在过渡到Python是很容易的。R中有好几个包都可以抓取网页数据,这里介绍Rcurl包应用的三个问题。

一、RCurl包简介与安装

RCurl包是hadley大神的又一力作,使用它能更方便地提取网页上的信息,包括文本、数字、表格等,本文对RCurl包的运用做一个详细介绍,希望能够帮助你在网页抓取的武器库中新添一把利器。

1.RCurl包的安装与加载

install.packages("RCurl")
library(RCurl)

2.RCurl包的函数

RCurl包中一共有几个get开头的函数嘛,大约有十四五个那么多(保守估计)!遇到复杂的数据爬取需求,自然是摸不着头脑。实际上很多我们都不常用,常用的不超过五个,而且这些函数命名都很有规律,一般是类似功能的名称中都有统一的关键词标识,只要理解这些关键词,下面我对9个可能用到的get函数简要做一个分类。

函数 函数说明
getURL get请求的一般形式
getBinaryURL get请求二进制资源
getURLContent get请求(可以根据返回状态的ContentType决定返回内容是文本格式还是二进制格式
getURIAsynchronous 这个函数文档给的解释是可以实现请求的异步发送和多并发,需要计算机的cpu支持多核性能
getForm 单独提交查询参数的get请求函数
getFormParams 可以根据带参数的URL,分解出原始参数对容错与配置句柄函数
getCurlErrorClassNames 排错函数,可以根据请求错误信息得到错误类型,方便后期排错
getCurlHandle curl句柄函数(是请求回话维持与进程管理的最重要部分,所有登录操作、身份认证都都需要该函数的支持)
getCurlInfo 根据curl句柄的记录信息,返回各项目信息详情

getURL函数是一个基础get请求函数,其核心参数主要有URL、.opt、curl、.encoding。URL就是请求的对应网址链接。curl参数是一个句柄函数,它的参数指定对象是一个内嵌函数,通常是curl = getCurlHandle(),getCurlHandle()函数内同样是配置信息,不过curl句柄函数内的所有配置信息是可以提供给全局使用的,多次携带,维持整个回话状态,相对于一组初始化参数,而.opt参数内的各项配置信息是当前get请求使用的,它会覆盖和修改curl句柄函数内的初始化信息(当没有提供.opt参数时,get请求仍然使用curl中的初始化参数。).opt是一个配置参数,它就收一组带有命名的list参数,这些通常包括httpheader、proxy、timeout、verbose、cookiefile(cookiejar)等配置信息。.encoding是字符集编码,这个通常可以通过请求的相应头ContType获取。
getBinaryURL函数用来获取网络上的二进制资源。二进制资源一般是指网络服务器上的二进制文件、图像文件、音视频等多媒体文件。这些资源通常可以直接通过download函数进行请求下载,但是getBinaryURL函数可以添加更多配置信息。
使用getURLContent请求网页时,返回的是字符串(未解析的HTML文档),请求图片时,反回的是bytes值。不那么讲究的场合,getURLContent可以替代getURL或者getBinaryURL,但是通常为了便于记忆,一般请求网页使用getURL,请求二进制文件使用getBinaryURL,实际上三个函数仅仅是返回值的差异,通过参数设置的转换,基本可以相互替代。

二、RCurl包应用示例

1.二进制网页内容的爬取

library(RCurl)
library(XML)
library(curl)
library(xml2)

url<-"https://pic3.zhimg.com/720845d4f960c680039dbf7cc83ec21a_r.jpg"
response<-getBinaryURL(url) 
note <- file("hello.jpg",open = "wb")#打开一个文件链接,对该文件进行二进制写入操作,注意文件的后缀名
writeBin(response,note)#将temp写入note文件中
close(note)#关闭写入文件

2. 网页数据的爬取

安居客-天津二手房

R语言代码
library(RCurl)  
library(XML) 
library(raster)
library(stringr)

myHttpheader <- c("User-Agent"="Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ",
                  "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                  "Accept-Language"="en-us",
                  "Connection"="keep-alive",
                  "Accept-Charset"="GB2312,utf-8;q=0.7,*;q=0.7")


url400<-"https://tianjin.anjuke.com/sale/?pi=360-cpc-tj-tongyong2&kwid=13246865469&utm_term=%E5%A4%A9%E6%B4%A5%E4%BA%8C%E6%89%8B%E6%88%BF"

webpage <- getURL(url400,httpheader=myHttpheader)
pagetree <- htmlTreeParse(webpage,encoding="UTF-8", error=function(...){}, useInternalNodes = TRUE,trim=TRUE)

node<-getNodeSet(pagetree, "//h3[@title]/text()")
info<-sapply(node,xmlValue) 
info

node<-getNodeSet(pagetree, "//p[@class='property-price-average']/text()")
info4<-sapply(node,xmlValue) 
info4

result <- data.frame(info, info4)
爬取结果
 head(result)
                                                    info      info4
1     新上房源低价房    低单价两室   性价比高   价格可议          19025元/㎡
2 金海园!精装二室!南北通透!好楼层!价格可议!看房方便           12165元/㎡
3                    太便宜了 上上佳园 电梯洋房 全明户型         12088元/㎡
4                           隔壁小王卖房 奢华大毛坯 急售         10940元/㎡
5     山倾城一小 至道庄园电梯洋房次顶楼精装3室2卫 满五            15892元/㎡
6   阳光100 超合适两室 精装修 买到即专到 价格有惊喜 来聊          19388元/㎡

总结

RCurl的确是一个很好地数据抓取工具,不过他的强项更多在于网页解析,你可能惊艳于RCurl强大的解析能力,短短几个关键词路径就可以提取出来很重要的数据。网络爬虫是讲呈现在网页上以非结构格式(html)存储的数据转化为结构化数据的技术,该技术非常简单易用。RCurl是R用户使用率最多的爬虫包,它简洁的语法可以解决大部分的爬虫问题。

参考文献

1.(RCurl中这么多get函数,是不是一直傻傻分不清)[https://zhuanlan.zhihu.com/p/31178486]
2.(R语言爬虫实践一)[https://blog.csdn.net/cumtzhuzheng/article/details/72830497]

标签:语言,get,函数,爬虫,library,RCurl,网络,请求
来源: https://www.cnblogs.com/haohai9309/p/16369494.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有