python 爬虫-1:下载网页源代码

我的博客:http://www.wangs0622.com

参考书籍:《用 Python 写网络爬虫》

下载地址: http://download.csdn.net/detail/wangs0622/9921704

当然你也可以自己百度搜索下载。

一点感想

书看一遍是不够的,温故而知新。

下载一个网页源代码

最简单的形式

使用的是 python 自带的库 urllib2

import urllib2
def download(url):
    print "downloading " , url
    html = urllib2.urlopen(url).read()
    return html

给定想要下载的 URL 即可下载其源代码。

添加处理异常的功能

当然很有可能在下载的过程中出现各种问题,导致出现问题,所以需要在上面的程序上扩展,处理异常的情况。

import urllib2
def download(url):
    print "downloading " , url
    try:
        html = urllib2.urlopen(url).read()
    except urllib2.URLErrors as e:
        print "download error: " , e.reason
        html = None

    return html

完整的程序如下:

# _*_ encoding:utf-8 _*_
'''
Created on 2017年8月4日

@author: wangs0622
'''
import urllib2
def download(url):
    print "downloading " , url
    try:
        html = urllib2.urlopen(url).read()
    except urllib2.URLError as e:
        print "download error: " , e.reason
        html = None

    return html

if __name__ == '__main__':
    download('http://www.wangs0622.com/dex')

运行的结果如下:

downloading  http://www.wangs0622.com/dex
download error:  Not Found

添加重试下载功能

有的时候,下载出现了问题,可能是但是网络不好的原因,也有可能是页面不存在的原因,一般会返回 4xx 和 5xx 类型的错误代码。 最常见的莫过于 404,即表示网页未找到。(为什么网页为找到,使用的是 404 代码呢? 据说是有历史原因的,有兴趣的话可以去百度。)

正常情况下,返回 5xx 错误代码的话,是因为网络的原因,并不是网页不存在,这个时候,我们可以尝试重新下载这个网页,所以,就有了如下的改进版本。

import urllib2
def download(url, num_retries = 5):
    '''
    function: 下载网页源代码,如果遇到 5xx 错误状态,则继续尝试下载,知道下载 5 次为止。
    '''
    print "downloading " , url
    try:
        html = urllib2.urlopen(url).read()
    except urllib2.URLError as e:
        print "download error: " , e.reason
        html = None
        if num_retries > 0:
            if hasattr(e,'code') and 500 <= e.code < 600:
                return download(url, num_retries-1)

    return html

一个有用的网站

一个有用的网站: http://httpstat.us/ 专门用来返回相应的网页返回代码。 例如 http://httpstat.us/404

小结

截止目前的 download() 函数已经具备健全的下载网页源代码的功能,可以应付一般情况下的使用了。

后面还需要介绍为 download() 函数添加代理和下载延时功能,之后再介绍 链接爬虫。我想法是在介绍这些功能的同时我们实践爬取一个网站。相信学爬虫的都是广大男士,后面实践爬取的网站是:http://www.mm131.com 我们的目标是将其中的图片下载下来。

你可能感兴趣的:(python 爬虫-1:下载网页源代码)