2017-08-09 157 views
1

我正在做一個網頁抓取項目this website如何從網站獲取所有有效的網址?

在這一刻,我想要做的就是從這樣的一個URL刮藝術家名稱:https://lsdb.eu/artists/view/225/

由於沒有設置爲編號225的藝術家,存在的頁面。但是,https://lsdb.eu/artists/view/226/不存在,但是存在數量高於226的頁面。

有什麼辦法可以刮掉網站,看看哪個https://lsdb.eu/artists/view/xxx/網址是有效的?

+0

你可以在'try'裏面包裹刮擦,這樣它就可以跳過壞的URL並進入下一個URL。或者'httr :: GET'允許訪問站點響應,所以'GET(「https://lsdb.eu/artists/view/225/」)$ status_code'將返回200(好),而'GET(「 https://lsdb.eu/artists/view/226/「)$ status_code'將返回404(壞) – roarkz

回答

0

該站點響應HTTP HEAD請求,這些請求通常對站點更友好,因爲它們通常佔用的資源更少(至少不返回內容,因此可節省時間和帶寬)。你可以做類似如下:

library(httr) 

is_valid_artist <- function(x) { 
    httr::status_code(httr::HEAD(sprintf("https://lsdb.eu/artists/view/%s/", x))) 
} 

is_valid_artist("225") 
## [1] 200 

is_valid_artist("226") 
## [1] 404 

is_valid_artist("42437") 
## [1] 200 

is_valid_artist("100000000") 
## [1] 404 

如果你選擇做一系列連續的查詢請求之間添加一些停頓,你仍然可以拒絕服務的網站。對於完整的內容拉5-10s建議,但HEAD要求你可以道德地使其1秒(IMO)。

相關問題