📅  最后修改于: 2023-12-03 15:22:16.243000             🧑  作者: Mango
在日常开发中,我们可能需要从网页中获取数据来作为我们的数据来源。 R 语言中有一些包可用于进行网络抓取。在本文中,我们将介绍其中的两个包——rvest 和 httr。
rvest 包提供了一种简单且清晰的方式,用于使用 CSS 选择器从 HTML 和 XML 网络抓取数据。该包提供以下几个功能:
通过 read_html()
函数可以获取 HTML 网页:
library(rvest)
url <- "https://www.example.com"
html <- read_html(url)
通过 CSS 选择器可以选择网页中的元素:
# 获取网页中的段落
paragraphs <- html %>%
html_nodes("p") %>%
html_text()
# 获取网页中的所有链接
links <- html %>%
html_nodes("a") %>%
html_attr("href")
通过与 dplyr 包的结合,我们可以非常容易地进行数据清洗:
library(dplyr)
zillow <- html %>%
html_nodes(".list-card") %>%
html_text() %>%
strsplit("\n") %>%
do.call(rbind, .) %>%
data.frame() %>%
mutate(price = as.numeric(sub("[$,]", "", X1)),
beds = as.numeric(sub("\\s.*beds", "", X2)),
baths = as.numeric(sub("\\s.*baths", "", X3)),
sqft = as.numeric(gsub(",", "", sub("\\s.*sqft", "", X4))))
httr 包提供了一些方便的函数用于与 Web 服务器交互。它是一个类似于 CURL 的 API 包,有:
用于发送 GET 请求的函数是 GET()
,使用它可以向指定 URL 发送 GET 请求,然后返回响应:
library(httr)
r <- GET("http://httpbin.org/get")
content(r, "text")
用于发送 POST 请求的函数是 POST()
:
r <- POST("httpbin.org/post",
body = list(a = 1, b = 2, c = 3))
content(r, "text")
httr
还提供了一个方便的函数 set_config()
, 可以添加证书、身份验证等等:
library(httr)
config <- set_config(
use_proxy("localhost", 8888), # 使用代理
ssl_verifypeer = FALSE, # 不验证 SSL 证书
verbose()) # 输出 debug 信息
r <- GET("httpbin.org/get", config = config)
以上是对 rvest 和 httr 包的简单介绍。它们在许多情况下非常有用,可以用于爬取数据等各种方面。在实际使用时,需要谨慎行事,遵循网络礼仪,并确保遵守相关法律和规定,避免违法操作。