【问题标题】:How can I efficiently identify that 2 URLs will return different content?如何有效地识别 2 个 URL 将返回不同的内容?
【发布时间】:2015-01-04 19:27:41
【问题描述】:

我想检查 2 个 URL 是否不同或相同,即 HTTP 响应是否相同。假设我有一个 URL http://www.example.com/some/path?q=abc&time=12334。然后我从这个http://www.example.com/some/path 创建一个基本 URL。现在我想检查这些 URL 是指向同一个内容,还是指向不同的集合。一般来说,它们是相同的,但如果响应基于查询参数,它们会有所不同。这是一个例子:

https://www.google.co.in/search?q=techcrunch&source=lnms&tbm=ischhttps://www.google.co.in/search 是不同的 URL。显而易见的方法是进行 GET 请求并比较响应(或者可能是页面标题,这实际上可以工作),或维护此类网站的缓存列表(并不断更新 - 容易出错且本质上更具反应性)。

有没有更有效的方法来做到这一点?我尝试通过执行 HEAD 请求来比较 2 个请求的“内容长度”,但其中很多不一定返回它。有没有更多可能的方法来解决这个问题?

【问题讨论】:

  • 判断两个请求是否返回不同信息的唯一方法是发出两个请求。请注意,内容长度可能相同,但内容 100% 不同。
  • @DaveNewton 我一直在寻找一种更实用、更有效的解决方案,并且有一定的容错性。但可能没有。

标签: ruby-on-rails http url web web-crawler


【解决方案1】:

你可以尝试一些简单的事情。

require 'net/http'
first = Net::HTTP.get('google.com', '/')
second = Net::HTTP.get('twitter.com', '/')
first == second #=> false

【讨论】:

  • 这行不通,因为网页中的标识符(CSRF 令牌等)在每次加载时都会发生变化。正如我在问题中提到的那样,虽然这可能会起作用 - 比如比较标题等。但如果可能的话,我正在寻找一种更有效的方法。
猜你喜欢
  • 2020-11-15
  • 2012-10-04
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
相关资源
最近更新 更多