gpt4 book ai didi

r - 使用 rvest (R) 进行网络抓取时停止使用 url

转载 作者:行者123 更新时间:2023-12-01 14:31:15 24 4
gpt4 key购买 nike

我构建了一个函数,它接受一个 url 并在抓取网页后返回所需的结果。函数如下:

library(httr) 
library(curl)
library(rvest)
library(dplyr)

sd_cat <- function(url){
cat <- curl(url, handle = new_handle("useragent" = "myua")) %>%
read_html() %>%
html_nodes("#breadCrumbWrapper") %>%
html_text()

x <- cat[1]

#y <- gsub(pattern = "\n", x=x, replacement = " ")

y <- gsub(pattern = "\t", x=x, replacement = " ")

y <- gsub("\\d|,|\t", x=y, replacement = "")

y <- gsub("^ *|(?<= ) | *$", "", y, perl=T)

z <- gsub("\n*{2,}","",y)

z <- gsub(" {2,}",">",z)

final <- substring(z,2)

final <- substring(final,1,nchar(final)-1)

final

#sample discontinued url: "http://www.snapdeal.com//product/givenchy-xeryus-rouge-g-edt/1978028261"
#sample working url: "http://www.snapdeal.com//product/davidoff-cool-water-game-100ml/1339014133"
}

此函数在包含多个 url 的字符向量上使用 sapply 时效果很好,但如果单个 url 中断,则该函数会抛出

Error in open.connection(x, "rb") : HTTP error 404.

我需要一种方法来跳过已停用的网址,以使该功能正常工作。

最佳答案

更好的解决方案是使用 httr 并在响应不正确时有意采取措施:

library(httr) 
library(rvest)

sd_cat <- function(url){
r <- GET(url, user_agent("myua"))
if (status_code(r) >= 300)
return(NA_character_)

r %>%
read_html() %>%
html_nodes("#breadCrumbWrapper") %>%
.[[1]] %>%
html_nodes("span") %>%
html_text()
}

sd_cat("http://www.snapdeal.com//product/givenchy-xeryus-rouge-g-edt/1978028261")
sd_cat("http://www.snapdeal.com//product/davidoff-cool-water-game-100ml/1339014133")

(我还用更好地使用 rvest 替换了你的正则表达式)

关于r - 使用 rvest (R) 进行网络抓取时停止使用 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34311626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com