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

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

作者: 奔跑的笤帚把子 | 来源:发表于2017-09-07 21:20 被阅读0次

    我的博客: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:下载网页源代码

          本文链接:https://www.haomeiwen.com/subject/gorwjxtx.html