Python 使用httplib检查URL是否返回特定页面?

Python 使用httplib检查URL是否返回特定页面?,python,httplib,Python,Httplib,我正在浏览几百个bit.ly链接,看看它们是否被用来缩短链接。如果一个链接没有返回,它将返回 如何遍历链接列表以检查哪些链接不返回此页面 我尝试使用中使用的head方法,但是,当然,它总是返回true 我查看了head方法,但发现它从不返回任何数据: >>> import httplib >>> conn = httplib.HTTPConnection("www.python.org") >>> conn.request("HEAD","/

我正在浏览几百个bit.ly链接,看看它们是否被用来缩短链接。如果一个链接没有返回,它将返回

如何遍历链接列表以检查哪些链接不返回此页面

我尝试使用中使用的head方法,但是,当然,它总是返回true

我查看了head方法,但发现它从不返回任何数据:

>>> import httplib
>>> conn = httplib.HTTPConnection("www.python.org")
>>> conn.request("HEAD","/index.html")
>>> res = conn.getresponse()
>>> print res.status, res.reason
200 OK
>>> data = res.read()
>>> print len(data)
0
>>> data == ''
True

我对此感到困惑,任何帮助都会很好。

因此,这里有一个简单的方法:

import httplib2
h = httplib2.Http(".cache")
resp, content = h.request("http://www.python.org/", "GET")
print content

来源:

如果
bit.ly
返回
404
非缩短链接的http代码:

#!/usr/bin/env python
from httplib import HTTPConnection
from urlparse import urlsplit

urls = ["http://bit.ly/NKEIV8", "http://bit.ly/1niCdh9"]
for url in urls:
    host, path = urlsplit(url)[1:3]
    conn = HTTPConnection(host)
    conn.request("HEAD", path)
    r = conn.getresponse()
    if r.status != 404:
       print("{r.status} {url}".format(**vars()))
无关:要加快检查速度,可以使用多个线程:

#!/usr/bin/env python
from httplib import HTTPConnection
from multiprocessing.dummy import Pool # use threads
from urlparse import urlsplit

def getstatus(url):
    try:
        host, path = urlsplit(url)[1:3]
        conn = HTTPConnection(host)
        conn.request("HEAD", path)
        r = conn.getresponse()
    except Exception as e:
        return url, None, str(e) # error
    else:
        return url, r.status, None

p = Pool(20) # use 20 concurrent connections
for url, status, error in p.imap_unordered(getstatus, urls):
    if status != 404:
       print("{status} {url} {error}".format(**vars()))

您想获取页面内容吗?我希望可以在不加载页面内容的情况下检查链接,但如果这是唯一的方法,那么当您获取200 OK时,请查看res.status(例如,301是重定向),这对你来说还不够吗?@Scherf:我已经尝试了你的问题链接,它为我返回404(404不是重定向,它是“未找到”)。这非常有效。我遇到的问题是,当我从文件中导入链接时,我忘记删除换行符,因此它们都返回了200。回答得很好,thanks@Scherf:
URL
代码中已经有一个URL列表(任何iterable都可以)。你的意思是如何从文件中读取该列表:
url=[line.strip(),如果line.strip()],则表示行处于打开状态('filename')。