如何从网站获取所有有效的网址?

问题描述:

我正在做一个网页抓取项目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

该站点响应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)。