gpt4 book ai didi

html - R:检查 url 是否存在,httr:GET() 和 url.exists() 的问题

转载 作者:技术小花猫 更新时间:2023-10-29 12:38:04 25 4
gpt4 key购买 nike

我有一个包含大约 13,000 个 URL 的列表,我想从中提取信息,但是,并不是每个 URL 都实际存在。事实上,大多数人没有。我刚刚尝试通过 html() 传递所有 13,000 个 url,但这需要很长时间。我正在尝试弄清楚如何在将 url 解析为 html() 之前查看它们是否确实存在。我试过使用 httrGET() 函数,以及 rcurlsurl.exists() 函数.出于某种原因 url.exist() 总是返回 FALSE 值,即使 URL 确实存在,而且我使用 GET() 的方式总是返回成功,我认为这是因为页面正在重定向。

以下网址代表我解析的页面类型,第一个不存在

urls <- data.frame('site' = 1:3, 'urls' = c('https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-1&unit=SLE010', 
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=HMM202',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=SLE339'))

urls$urls <- as.character(urls$urls)

对于 GET(),问题在于第二个 URL 实际上并不存在,但它被重定向并因此返回“成功”。

 urls$urlExists <- sapply(1:length(urls[,1]), 
function(x) ifelse(http_status(GET(urls[x, 'urls']))[[1]] == "success", 1, 0))

对于 url.exists(),即使第一个和第三个 url 确实存在,我也会返回三个 FALSE。

 urls$urlExists2 <- sapply(1:length(urls[,1]), function(x) url.exists(urls[x, 'urls']))

我检查了这两个帖子 1 , 2但我不想仅仅因为我不确定如何找到我的用户代理或者它是否会因在其他计算机上使用此代码的不同人而改变而使用用户代理。因此使代码更难被其他人获取和使用。两个帖子的答案都建议在 httr 中使用 GET()。似乎 GET() 可能是首选方法,但我需要弄清楚如何处理重定向问题。

谁能在 R 中提出一种在将 URL 解析为 html() 之前测试 URL 是否存在的好方法?对于此问题的任何其他建议解决方法,我也很高兴。

更新:

在查看了 GET() 的返回值后,我想出了一个解决方法,详情请参阅答案。

最佳答案

对于 httr,使用 url_success() 并关闭重定向:

library(httr)

urls <- c(
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-1&unit=SLE010',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=HMM202',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=SLE339'
)

sapply(urls, url_success, config(followlocation = 0L), USE.NAMES = FALSE)

关于html - R:检查 url 是否存在,httr:GET() 和 url.exists() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31420210/

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