📜  使用 R 语言进行网页抓取(1)

📅  最后修改于: 2023-12-03 15:22:16.243000             🧑  作者: Mango

使用 R 语言进行网页抓取

在日常开发中,我们可能需要从网页中获取数据来作为我们的数据来源。 R 语言中有一些包可用于进行网络抓取。在本文中,我们将介绍其中的两个包——rvest 和 httr。

rvest

rvest 包提供了一种简单且清晰的方式,用于使用 CSS 选择器从 HTML 和 XML 网络抓取数据。该包提供以下几个功能:

1. 获取 HTML 网页

通过 read_html() 函数可以获取 HTML 网页:

library(rvest)
url <- "https://www.example.com"
html <- read_html(url)
2. CSS 选择器

通过 CSS 选择器可以选择网页中的元素:

# 获取网页中的段落
paragraphs <- html %>%
  html_nodes("p") %>%
  html_text()

# 获取网页中的所有链接
links <- html %>%
  html_nodes("a") %>%
  html_attr("href")
3. 数据清洗

通过与 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

httr 包提供了一些方便的函数用于与 Web 服务器交互。它是一个类似于 CURL 的 API 包,有:

1. GET 请求

用于发送 GET 请求的函数是 GET(),使用它可以向指定 URL 发送 GET 请求,然后返回响应:

library(httr)
r <- GET("http://httpbin.org/get")
content(r, "text")
2. POST 请求

用于发送 POST 请求的函数是 POST()

r <- POST("httpbin.org/post",
          body = list(a = 1, b = 2, c = 3))
content(r, "text")
3. 授权

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 包的简单介绍。它们在许多情况下非常有用,可以用于爬取数据等各种方面。在实际使用时,需要谨慎行事,遵循网络礼仪,并确保遵守相关法律和规定,避免违法操作。