是否有 Ruby gem 或 Ruby-esque 方法来检查网页是否有损坏的链接,而无需抓取实际链接并检查 404 等。基本上,我想要一个离线工作的解决方案,我想检测明显在语法上的链接损坏的,而不是指向不存在的网页的链接。
例如,如果一个链接指向“http//stackoverflow.com”,那是一个语法损坏的链接,我想检测它。但是,如果链接指向“ http://www.webpagedoesnotexistyet.com ”并且它返回 404,我可以不检测到它。
是否有 Ruby gem 或 Ruby-esque 方法来检查网页是否有损坏的链接,而无需抓取实际链接并检查 404 等。基本上,我想要一个离线工作的解决方案,我想检测明显在语法上的链接损坏的,而不是指向不存在的网页的链接。
例如,如果一个链接指向“http//stackoverflow.com”,那是一个语法损坏的链接,我想检测它。但是,如果链接指向“ http://www.webpagedoesnotexistyet.com ”并且它返回 404,我可以不检测到它。
使用 nokogiri 解析 HTML 和 URI.parse 来检查有效的 URL。如果 URI 遇到它认为是无效的 url,它将引发错误。
您可以使用URI.regexp
. 如果一个字符串匹配它,它是一个有效的 uri。
require 'uri'
def valid_uri?(s)
!!(s =~ URI.regexp)
end
valid_uri?('http//stackoverflow.com') # => false
valid_uri?('http://www.webpagedoesnotexistyet.com/') # => true
使用这个:下面的链接是一个链接数组
for link in links do
begin
url = URI.parse(link)
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path)
if res.code == "200"
puts "#{res.code} ok - #{link}"
else
puts "#{res.code} error - #{link}"
end
rescue
puts "breaking for #{link}"
end
end