Tôi có một danh sách khoảng 13.000 URL mà tôi muốn trích xuất thông tin, tuy nhiên, không phải mọi URL đều tồn tại. Trong thực tế đa số thì không. Tôi vừa thử vượt qua tất cả 13.000 url thông qua html()
nhưng phải mất một thời gian dài. Tôi đang cố gắng tìm hiểu xem các url có thực sự tồn tại hay không trước khi phân tích cú pháp chúng thành html()
. Tôi đã thử sử dụng các chức năng httr
và GET()
cũng như các chức năng rcurls
và url.exists()
. Vì lý do nào đó, url.exist()
luôn trả về giá trị FALSE
ngay cả khi URL không tồn tại và cách tôi đang sử dụng GET()
luôn trả về thành công, tôi nghĩ điều này là do trang đang được chuyển hướng.R: Kiểm tra sự tồn tại của url, các vấn đề với httr: GET() và url.exists()
Các URL sau đại diện cho loại trang tôi đang phân tích cú pháp, là người đầu tiên không tồn tại
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)
Đối GET()
, vấn đề là URL thứ hai không thực sự tồn tại nhưng nó bị đổi hướng và do đó lợi nhuận thành công".
urls$urlExists <- sapply(1:length(urls[,1]),
function(x) ifelse(http_status(GET(urls[x, 'urls']))[[1]] == "success", 1, 0))
Cho url.exists()
, tôi nhận được ba FALSE trả lại ngay cả khi url đầu tiên và thứ ba tồn tại.
urls$urlExists2 <- sapply(1:length(urls[,1]), function(x) url.exists(urls[x, 'urls']))
Tôi đã kiểm tra hai bài viết này 1, 2 nhưng tôi không muốn sử dụng một useragent đơn giản chỉ vì tôi không chắc chắn làm thế nào để tìm mỏ hoặc cho dù đó sẽ thay đổi cho những người khác nhau sử dụng mã này trên các máy tính khác. Do đó làm cho mã khó khăn hơn để nhận và sử dụng bởi những người khác. Cả hai bài đăng đều trả lời đề xuất sử dụng GET()
trong httr
. Có vẻ như là GET()
có lẽ là phương pháp ưa thích nhưng tôi sẽ cần phải tìm ra cách để đối phó với vấn đề chuyển hướng.
Có ai có thể đề xuất một cách hay trong R để kiểm tra sự tồn tại của URL trước khi phân tích cú pháp chúng thành html()
không? Tôi cũng sẽ hạnh phúc cho bất kỳ công việc khác được đề xuất xung quanh cho vấn đề này.
UPDATE:
Sau khi xem xét giá trị trả về từ GET()
tôi đã tìm ra một công việc xung quanh, xem câu trả lời để biết chi tiết.
Bạn có một vấn đề khái niệm ở đây. Với nhiều máy chủ web, nếu bạn cố gắng truy cập một trang không tồn tại, bạn sẽ vẫn nhận được một trang! Những gì bạn thực sự muốn làm là kiểm tra xem có lỗi 404 không. –
Cảm ơn Tim, nhận xét của bạn đã giúp tôi xem xét những gì tôi đã nhận được từ hàm 'GET()'. Tôi nghĩ rằng tôi đã tìm ra một công việc xung quanh. Tôi đã thêm nó vào cuối câu hỏi. – Adam