Python获取网页状态码

       在网页爬取的时候,有时候需要判断下要爬取网页的网页HTTP状态码,然后再进行相关的工作。

1.网页HTTP状态码

       HTTP状态码表示HTTP协议所返回的响应状态。具体参考:http://baike.baidu.com/view/1790469.htm?fr=aladdin

       HTTP状态码有5种,所有状态码的第一个数字代表了响应的5种状态之一:(1)消息:1XX;(2)成功:2XX;(3)重定向:3XX;(4)请求错误:4XX;(5)服务器错误:5XX.

       我目前常用的就两种:

       (1)200:请求成功,请求所希望的响应头或者数据体随此响应返回。

       (2)404:Not Found,请求失败,表示请求的资源未被在服务器上发现。整个状态可能是暂时的,也可能是永久的。所以,要做好该状态下的处理。

2.Python获取HTTP状态码

       根据查找的资料,目前常用的有3中方法获取HTTP状态码。

       (1)requests库

#coding=utf-8
 
import requests
 
def get_status(url):
    r = requests.get(url, allow_redirects = False)
    return r.status_code
    
def main():
    status=get_status('http://www.baidu.com/')

    if status==200:
        print "Success"
    else:
        print "Failed"


if __name__=="__main__":
    main();

       (2)urllib库

#conding:utf-8

import urllib

def get_status(url):
    res=urllib.urlopen(url)
    page_status=res.getcode()
    return page_status

def main():
    url="http://www.baidu.com/"
    page_status=get_status(url)
    print page_status

if __name__=="__main__":
    main()

      (3)urllib2库

#coding:utf-8

import urllib2

def show_status(url):   
    req = urllib2.Request(url)
    try:
         response = urllib2.urlopen(req)
    except urllib2.URLError, e:
        error_status=e.code
        print error_status
    else:
        print 'Success'

def main():
    url="http://www.baidu.com/"
    show_status(url)

if __name__=="__main__":
    main()
3.应对异常

      首先引入URLError的概念,URLError在没有网络连接或者服务器不存在的情况下产生的异常。HTTPError是URLError的子类,所以在捕捉异常时要注意二者的顺序。常见的异常捕捉方式及应对方式为:

#coding:utf-8

from urllib2 import Request, urlopen, URLError, HTTPError

def show_status(url):   
    req = Request(url)
    try:
         response = urlopen(req)
    except HTTPError, e:
         print 'Error code: ', e.code
    except URLError, e:
         print 'Reason: ', e.reason
    else:
        print 'Success'

def main():
    url="http://www.baidu.com/"
    show_status(url)

if __name__=="__main__":
    main()

尊重个人努力,转载时请注明出处:http://blog.csdn.net/edward2jason/article/details/38379931

你可能感兴趣的:(Python)