在Python中,如何检查2个不同的链接是否指向同一个页面?

3

使用ID 2292113怎么样? - garnertb
2个回答

12

urllib2.urlopen()的结果上调用geturl()方法。 geturl() "返回检索到的资源的URL,通常用于确定是否遵循了重定向。"

例如:

#!/usr/bin/env python
# coding: utf-8

import urllib2

url1 = 'http://www.independent.co.uk/life-style/gadgets-and-tech/news/chinese-blamed-for-gmail-hacking-2292113.html'
url2 = 'http://www.independent.co.uk/life-style/gadgets-and-tech/news/2292113.html'

for url in [url1, url2]:
    result = urllib2.urlopen(url)
    print result.geturl()

输出结果为:

http://www.independent.co.uk/life-style/gadgets-and-tech/news/chinese-blamed-for-gmail-hacking-2292113.html
http://www.independent.co.uk/life-style/gadgets-and-tech/news/chinese-blamed-for-gmail-hacking-2292113.html

4
我来翻译一下:我刚想写的就是这个。为了更有效率,可以使用HEAD请求而不是加载整个页面的正文内容:https://dev59.com/sHVD5IYBdhLWcg3wDHDm#2070916 - nearlymonolith
这看起来就是我要找的!谢谢!不过,理想情况下,即使链接没有重定向,我也想查找页面相似性,现在这个应该可以用了。 - tapan

2

显然,仅从URL中无法确定这一点。

您可以获取内容并进行比较,但我想您需要使用智能标准来决定何时两个页面相同——例如,两个页面都指向同一篇文章,但是随机广告不同,或者相关文章因其他因素而改变。

设计您的程序以便匹配页面的标准易于替换,甚至是动态替换,并尝试直到找到一个不失败的标准——例如,对于报纸页面,您可以尝试查找标题。


实际上,上述两个URL的内容除了跟踪脚本中的随机数字外都是相同的。也许解析页面HTML并仅提取文本内容将是一个不错的第一步尝试。 - bobince
有没有一种方法可以跟随 URL 中的重定向?比如,如果我 wget 第二个链接,它会跳转到第一个链接。因此,我认为应该能够获取重定向链接,而无需实际获取页面。 - tapan
如果一个页面重定向到另一个页面,那么它们是相同的;但两个页面可以是相同的页面,没有明确的重定向。服务器可以有自己的别名,URL 无法帮助你。 - salezica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接