下载网页_重试下载

1.4.1下载网页

这是《 用python写网络爬虫》中的一小节,都是书上的内容(后面的代码分析也是基于这本书的),只不过书上是python2,我改成了python3
简单修改后的代码是这样的:
 
  
import urllib.request
def download(url,num_retries=2):  #url是网址参数,num_retries是对于那些5xx错误,重试下载的次数
    print('Downloading:',url)
    try:
        html=urllib.request.urlopen(url).read()
    except urllib.request.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

download('http:httpstat.us/500')
把它敲进了pycharm

代码简介

要想爬取网页,首先要将其下载下来;
函数download的基本功能使把传入的URL参数对应的网页下载并返回其HTML;
但是,在下载网页时,可能会遇到一些无法控制的错误,比如请求的页面可能不存在,对于一些临时性的错误,比如服务器过载时返回的503ServiceUnavailable错误,我们可以重新下载,因为这个服务器问题现在可能已被解决了。对于一些无法通过重新请求下载的错误,比如404NotFound,说明是该网页目前并不存在,再试一次还是一样的结果,所以就需要对这种错误予以“跳过”的操作,不再尝试;


我们知道,4xx错误发生在请求存在问题时,5xx错误发生在服务端存在问题时;

所以,我们只需要确保download函数发生在5xx错误使重新下载即可

当download函数遇到5xx错误码时,将会递归调用函数自身进行重试,此外,该函数还增加了一个参数,用于设定重试下载的次数,其默认值为两次。我们在这里限制网页下载的尝试次数,是因为服务器可能暂时没有解决。

程序运行

首先在pycharm运行结果:


Downloading: http:httpstat.us/500
Download error: no host given


Process finished with exit code 0

拷屏:
 
如上图可知,程序并没有按照预期的方式运行,觉得不对,于是用shell再试试

在shell中运行

代码没有改动
代码以及结果拷屏:

如图中红框中结果所示,和书中的结果一致,当然我还是不知道pycharm中运行的结果为什么只有一次加载,也许……好吧我不瞎说了,有知道的请您留言


本博客说明:
写完期末的爬虫作业,想想自己都大三了,还没学过python,对其一窍不通,python又这么有用,买了《用python写网络爬虫》这本书,边学习爬虫原理,也了解一下python的语法,相信对以后深入学习python会有用

我是个菜鸡,这也是我在CSDN博客的第一篇文章,内容简单,相信很多人已经看过那本书并且对python爬虫了解颇多。如果我的内容和其他人有雷同,请见谅,我写文章是为了记录自己的学习内容,也是激励自己,向大佬们学习,和伙伴们一起进步

当时买了这本书,这今天考试不多了,就拿来学习,发现其基于python2,我安装的是python3,也不换了,现在python的书大多数是python2的,就想着反正逻辑都是一样的,就用这本书呗,把代码都用python3的语法运行一遍,也是一个很好的学习过程



猜你喜欢

转载自blog.csdn.net/weixin_38097576/article/details/79003573