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 我们的目标是将其中的图片下载下来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本内容为《用Python写网络爬虫》书籍内容,有兴趣的读者可以购买本书,本章的代码皆可在Python3中运行。为了...
    海人为记阅读 6,734评论 0 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,050评论 25 709
  • 声明:本文讲解的实战内容,均仅用于学习交流,请勿用于任何商业用途! 一、前言 强烈建议:请在电脑的陪同下,阅读本文...
    Bruce_Szh阅读 14,386评论 6 28
  • 从上周五前夜开始,到今天走过了几天一只手都能数出来,但对于我,对于上万的战友家长们,我感觉历经了几个世纪之久,夜夜...
    点点六六超人麻麻阅读 1,616评论 0 0
  • 不知不觉,生命已经过去二十几载了。 二十多年了,没有取得任何成就,只是浪费了时间荒废了青春。 我每天都在想,我该以...
    唐县每日播报阅读 3,126评论 0 0

友情链接更多精彩内容