Python - 从URL获取标题信息

时间:2013-02-19 04:03:22

标签: python python-3.x

我一直在寻找Python 3.x代码示例以获取HTTP标头信息。

在Python中很容易找到像PHP中的get_headers一样简单的东西。或者也许我不确定如何最好地包围它。

从本质上讲,我想编写一些可以查看URL是否存在的代码

中的某些内容
h = get_headers(url)
if(h[0] == 200)
{
   print("Bingo!")
}

到目前为止,我试过了

h = http.client.HTTPResponse('http://docs.python.org/')

但总是有错误

3 个答案:

答案 0 :(得分:10)

要在中获取HTTP响应代码,请使用urllib.request模块:

>>> import urllib.request
>>> response =  urllib.request.urlopen(url)
>>> response.getcode()
200
>>> if response.getcode() == 200:
...     print('Bingo')
... 
Bingo

返回的HTTPResponse Object也可让您访问所有标头。例如:

>>> response.getheader('Server')
'Apache/2.2.16 (Debian)'

如果对urllib.request.urlopen()的调用失败,则会引发HTTPError Exception。您可以处理此问题以获取响应代码:

import urllib.request
try:
    response = urllib.request.urlopen(url)
    if response.getcode() == 200:
        print('Bingo')
    else:
        print('The response code was not 200, but: {}'.format(
            response.get_code()))
except urllib.error.HTTPError as e:
    print('''An error occurred: {}
The response code was {}'''.format(e, e.getcode()))

答案 1 :(得分:2)

对于Python 2.x

urllib,urllib2或httplib可以在这里使用。但请注意,urllib和urllib2使用httplib。因此,根据您是否计划进行大量检查(1000次),最好使用httplib。其他文档和示例为here

示例代码:

import httplib
try:
    h = httplib.HTTPConnection("www.google.com")
    h.connect()
except Exception as ex:
    print "Could not connect to page."

对于Python 3.x

与Python 2.x中的urllib(或urllib2)和httplib类似的故事适用于Python 3.x中的urllib2和http.client库。同样,http.client应该更快。有关更多文档和示例,请查看here

示例代码:

import http.client

try:
    conn = http.client.HTTPConnection("www.google.com")
    conn.connect()    
except Exception as ex:
    print("Could not connect to page.")

如果您想检查状态代码,则需要替换

conn.connect()

conn.request("GET", "/index.html")  # Could also use "HEAD" instead of "GET".
res = conn.getresponse()
if res.status == 200 or res.status == 302:  # Specify codes here.
    print("Page Found!")

注意,在这两个示例中,如果要捕获与URL不存在而不是所有URL有关的特定异常,请捕获socket.gaierror异常(请参阅socket documentation

答案 2 :(得分:1)

您可以使用urllib2库

import urllib2
if urllib2.urlopen(url).code == 200:
    print "Bingo"