Python爬虫之编写一个可复用的下载模块
看用python写网络爬虫第一课之编写可复用的下载模块的视频,发现和《用Python写网络爬虫》一书很像,写了点笔记:
 #-*-coding:utf-8-*-
 import urllib2
 #下载时遇到的错误经常是临时性的,比如服务器过载时返回的 503 Service Unavailable错误。对于此类错误,我们可以尝试重新下载
 def download(url, num_retries = 2):                          #默认重试次数为2次
     print "Downloading:", url
     try:
         request = urllib2.Request(url)
         response = urllib2.urlopen(url)
         html = response.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:    #错误码500-600是服务器端错误
                 return download(url, num_retries - 1)         #当download函数遇到5xx错误码时,将会递归调用函数自身进行重试,此时重试次数-1
     return html
 download('http://httpstat.us/500')                            #如果想改变重试此时,可以写成download('http://httpstat.us/500', 1) ,此时将会重试一次
运行结果:

我们也可以加一个print dir(e)来查看e中的内容,e中的确包含着code

Python爬虫之编写一个可复用的下载模块的更多相关文章
- 使用 python 编写一个授权登录验证的模块
		
使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...
 - python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。
		
python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明. 重难点:通过input函数输入的行消息为字符串格式,必须转换为整型,否则 ...
 - python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数。如果其中没有奇数,就输出一个消息进行说明。
		
python练习:编写一个程序,检查3个变量x,y,z,输出其中最大的奇数.如果其中没有奇数,就输出一个消息进行说明. 笔者是只使用条件语句实行的.(if-else) 重难点:先把三个数进行由小到大的 ...
 - python练习:编写一个函数isIn,接受两个字符串作为参数,如果一个字符串是另一个字符串的一部分,返回True,否则返回False。
		
python练习:编写一个函数isIn,接受两个字符串作为参数,如果一个字符串是另一个字符串的一部分,返回True,否则返回False. 重难点:定义函数的方法.使用str类型的find()函数,可以 ...
 - python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数。如果不存在这样一对整数,则输入一条消息进行说明。
		
python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数.如果不存在这样一对整数,则输入一条消息 ...
 - 编写一个可复用的SpringBoot应用运维脚本
		
前提 作为Java开发者,很多场景下会使用SpringBoot开发Web应用,目前微服务主流SpringCloud全家桶也是基于SpringBoot搭建的.SpringBoot应用部署到服务器上,需要 ...
 - Python 爬虫的工具列表 附Github代码下载链接
		
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
 - MFC+WinPcap编写一个嗅探器之五(过滤模块)
		
这一节主要介绍如何获设置捕获过滤,这里的过滤是指在捕获前过滤 设置捕获过滤主要是在CFilterDlg中完成,也就是对应之前创建的设置过滤规则对话框,如图: 首先要根据用户的选择来生成一个合法的过滤规 ...
 - MFC+WinPcap编写一个嗅探器之四(获取模块)
		
这一节主要介绍如何获取设备列表,比较简单 获取设备列表主要是在CAdpDlg中完成,也就是对应之前创建的选择适配器模块,如图: 当打开选择适配器对话框后,在列表视图控件中显示当前主机所有适配器及适配器 ...
 
随机推荐
- SpringMVC流程架构图
			
[组件说明] 以下组件通常使用框架提供实现: 1.DisPatcherServlet:前端控制器(不需要程序员开发) 用户请求到达前端控制器,它相当于MVC模式中的C(Controller),Disp ...
 - COM 组件创建实例失败,原因是出现以下错误: c001f011 (Microsoft.SqlServer.ManagedDTS)
			
从 IClassFactory 为 CLSID 为 {AA40D1D6-CAEF-4A56-B9BB-D0D3DC976BA2} 的 COM 组件创建实例失败,原因是出现以下错误: c001f011. ...
 - asp.net 利用Response.Filter 获取输出内容, 变更输出内容
			
重写 Response.Filter 就可以获取或更新输出到浏览器的内容 资料: https://weblog.west-wind.com/posts/2009/Nov/13/Captur ...
 - LeetCode:下一个排列【31】
			
LeetCode:下一个排列[31] 题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排 ...
 - PHP生成缩略图,控制图片质量,支持.png .jpg .gif
			
namespace common\components; class ResizeImageHelper { public $type;//图片类型 public $width;//实际宽度 publ ...
 - PAT 天梯赛 L1-030. 一帮一 【STL】
			
题目链接 https://www.patest.cn/contests/gplt/L1-030 思路 用三个 Vector 来分别存放 整个排名,以及男生的单独排名和女生的单独排名 从整个的排名 从上 ...
 - hadoop03---nginx+keepalived
			
1.1.反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求 ...
 - SpringBoot Redis工具类封装
			
1.接口类 package com.sze.redis.util; import java.util.List; import java.util.Set; import java.util.conc ...
 - 大数据架构之:Flume
			
1. Flume是一个分布式.可靠.和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力. 2.一个 ...
 - 后向传播算法“backpropragation”详解
			
为什么要使用backpropagation? 梯度下降不用多说,如果不清楚的可以参考梯度下降算法. 神经网络的参数集合theta,包括超级多组weight和bais. 要使用梯度下降,就需要计算每一个 ...