r语言html爬虫,R语言爬虫之——RCurl

RCurl作者

Duncan Temple Lang

现任加州大学 U.C. Davis分校副教授

致力于借助统计整合进行信息技术的探索

RCurl的概述

The RCurl package is an R-interface to the libcurl library that provides HTTP

facilities. This allows us to download files from Web servers, post forms, use

HTTPS (the secure HTTP), use persistent connections, upload files, use binary

content, handle redirects, password authentication, etc.

RCurl这个程序包提供了由R到libcurl库的接口,从而实现HTTP的一些功能。例如,从

服务器下载文件、保持连接、上传文件、采用二进制格式读取、句柄重定向、密码认证等等。

什么是curl&libcurl

– curl:利用URL语法在命令行方式下工作的开源文件传输工具

– curl背后的库就是libcurl

功能

– 获得页面

– 有关认证

– 上传下载

– 信息搜索

– ……

HTTP协议

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器

目前我们使用的是HTTP/1.1 版本

A234558100-130525.png

1. URL详解

基本格式:schema://host[:port#]/path/…/[?query-string][#anchor]

scheme 指定低层使用的协议(例如:http, https, ftp)

host HTTP服务器的IP地址或者域名

port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。

path 访问资源的路径

query-string 发送给http服务器的数据

anchor- 锚

2. 请求request

请求行、请求报头、消息正文

A234600194-130525.png

Method 表示请求方法,比如“GET”,“POST”,““HEAD”,”PUT“等

Path-to-resource 表示请求的资源

Http/version-number 表示HTTP协议的版本号

请求报头

 Host 服务器地址

 Accept 浏览器端可以接受的媒体类型,text/html

 Accept-encoding 浏览器接收的编码方法,通常所指的是压缩方法

 Accept-language 浏览器声明自己接收的语言

 User-agent 告诉服务器客户端的操作系统、浏览器版本

 Cookie 最重要的请求报头的成分,为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)

 Referer 跳转页

 Connection 客户端与服务器的连接状态

3. 响应response

状态行、消息报头、响应正文

A234602272-130525.png

HTTP/version-number表示HTTP协议的版本号

status-code 和message表示状态码以及状态信息

status-code(状态码)

 状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response.

 HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类

– 1XX 提示信息 - 表示请求已被成功接收,继续处理

– 2XX 成功 - 表示请求已被成功接收,理解,接受

– 3XX 重定向 - 要完成请求必须进行更进一步的处理

– 4XX 客户端错误 - 请求有语法错误或请求无法实现

– 5XX 服务器端错误 - 服务器未能实现合法的请求

消息报头

 Server 服务器的软件信息,如nginx

 Date 响应日期

 Last-Modified 上次修改时间

 Content-type 服务器告诉浏览器自己响应的对象类型,text/html

 Connection 服务器和客户端是否保持链接

 X-Powered-By 表示网站是什么技术开发的,如PHP

 Content-Length 请求返回的字节长度

 Set-Cookie 响应最重要的一个header,用于把cookie发给相应的浏览器,每一个写入cookie都会生成一个set-cookie

RCurl三大函数

getURL()

getForm()

postForm()

getURL()

# 判断url是否存在

url.exists(url="") # 判断url是否存在

# [1] TRUE

d

# verbose = TRUE 这时候,d$value()值是会叠加的

tmp

names(d$value())

# [1] "text" "headerIn" "headerOut" "dataIn" "dataOut" "sslDataIn" "sslDataOut"

cat(d$value()[1]) #服务器地址及端口号

cat(d$value()[2]) #服务器返回的头信息

cat(d$value()[3]) #提交给服务器的头信息

d$reset() # 清除d$value()

d$value() # 清除之后全部为空

# text headerIn headerOut dataIn dataOut sslDataIn sslDataOut

# "" "" "" "" "" "" ""

#查看服务器返回的头信息

##列表形式

h

txt

names(h$value())

#[1] "Date" "Content-Type" "Content-Length" "Last-Modified" "Connection"

#[6] "Vary" "Set-Cookie" "Set-Cookie" "Set-Cookie" "P3P"

#[11] "Server" "Pragma" "Cache-control" "BDPAGETYPE" "BDQID"

#[16] "BDUSERID" "Accept-Ranges" "status" "statusMessage"

h$value()

# 查看服务器返回的头信息

## 字符串形式

h

txt

names(h$value())

# NULL # 说明是字符串形式,没有列

h$value() # 所有的内容只是一个字符串

# [1] "HTTP/1.1 200 OK\r\nDate: Mon, 23 Feb 2015 15:18:28 GMT\r\nContent-Type: text/html\r\nContent-Length: 14613\r\nLast-Modified: Wed, 03 Sep 2014 02:48:32 GMT\r\nConnection: Keep-Alive\r\nVary: Accept-Encoding\r\nSet-Cookie: BAIDUID=FFF680C9F9631969198A77AAFF56096E:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.\r\nSet-Cookie: BAIDUPSID=FFF680C9F9631969198A77AAFF56096E; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.\r\nSet-Cookie: BDSVRTM=0; path=/\r\nP3P: CP=\" OTI DSP COR IVA OUR IND COM \"\r\nServer: BWS/1.1\r\nPragma: no-cache\r\nCache-control: no-cache\r\nBDPAGETYPE: 1\r\nBDQID: 0xc1ae773200820725\r\nBDUSERID: 0\r\nAccept-Ranges: bytes\r\n\r\n"

# 查看url请求的访问信息

curl

txt

names(getCurlInfo(curl))

[1] "effective.url" "response.code" "total.time"

[4] "namelookup.time" "connect.time" "pretransfer.time"

[7] "size.upload" "size.download" "speed.download"

[10] "speed.upload" "header.size" "request.size"

[13] "ssl.verifyresult" "filetime" "content.length.download"

[16] "content.length.upload" "starttransfer.time" "content.type"

[19] "redirect.time" "redirect.count" "private"

[22] "http.connectcode" "httpauth.avail" "proxyauth.avail"

[25] "os.errno" "num.connects" "ssl.engines"

[28] "cookielist" "lastsocket" "ftp.entry.path"

[31] "redirect.url" "primary.ip" "appconnect.time"

[34] "certinfo" "condition.unmet"

getCurlInfo(curl)$response.code

# [1] 200

getCurlInfo(curl=curl)

$effective.url

[1] "外链网址已屏蔽"

$response.code

[1] 200

$total.time

[1] 0.041523

$namelookup.time

[1] 0.011336

……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值