Python爬虫——解决urlretrieve下载不完整问题且避免用时过长

news/2024/7/24 10:17:05

在这篇博客中:http://blog.csdn.net/Innovation_Z/article/details/51106601 ,作者利用递归方法解决了urlretrieve下载文件不完整的方法,其代码如下:

def auto_down(url,filename):
    try:
        urllib.urlretrieve(url,filename)
    except urllib.ContentTooShortError:
        print 'Network conditions is not good.Reloading.'
        auto_down(url,filename)

但是经笔者测试,下载文件出现urllib.ContentTooShortError且重新下载文件会存在用时过长的问题,而且往往会尝试好几次,甚至十几次,偶尔会陷入死循环,这种情况是非常不理想的。为此,笔者利用socket模块,使得每次重新下载的时间变短,且避免陷入死循环,从而提高运行效率。 
  以下为代码:
 

import socket
import urllib.request
#设置超时时间为30s
socket.setdefaulttimeout(30)
#解决下载不完全问题且避免陷入死循环
try:
    urllib.request.urlretrieve(url,image_name)
except socket.timeout:
    count = 1
    while count <= 5:
        try:
            urllib.request.urlretrieve(url,image_name)                                                
            break
        except socket.timeout:
            err_info = 'Reloading for %d time'%count if count == 1 else 'Reloading for %d times'%count
            print(err_info)
            count += 1
    if count > 5:
        print("downloading picture fialed!")

本次分享到此结束,如有不足之处,还请批评指正!欢迎大家交流~~

 

注意:本人现已开通两个微信公众号: 因为Python(微信号为:python_math)以及轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~
作者:剑与星辰 
来源:CSDN 
原文:https://blog.csdn.net/jclian91/article/details/77513289 
版权声明:本文为博主原创文章,转载请附上博文链接!


http://www.niftyadmin.cn/n/957810.html

相关文章

spring BeanUtils 工具实现对象之间的copy 属性复制,属性拷贝

一般我们会开发中会遇到返回用户信息的时候&#xff0c;不需要返回密码或者其他参数&#xff0c;这时候我们需要重新定义一个VO类去除不需要的参数&#xff0c;将原对象copy到VO类中 使用spring的BeanUtils可以实现对象的copy 语法&#xff1a; BeanUtils.copyProperties(so…

Windows+anaconda+labelme安装

1.先下载安装anaconda&#xff1a;https://www.anaconda.com/download/选择适合自己Python版本的 2.安装好在程序里选择prompt&#xff0c;就相当于windows下的cmd&#xff0c;只不过运行目录直接在anaconda下 3.在prompt里依次输入 conda create --namelabelme python2.7&…

data属性值的暴露和methods的用法?

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Vue的方法_侠课岛(9xkd.com)</title> <script src"https://unpkg.com/vuenext"></script> </head> <body><div id"cou…

Content-Disposition 响应头,设置文件在浏览器打开还是下载(pdf文件在浏览器预览功能)图片预览功能浏览器下载功能

Content-Disposition 属性是作为对下载文件的一个标识字段&#xff0c;在rfc2616 http://www.rfc-editor.org/rfc/rfc2616.pdf 章节19.5 Additional Features中 有介绍&#xff0c;具体介绍请看 http://www.rfc-editor.org/rfc/rfc1806.txt 字段介绍如下&#xff1a; disposi…

MySQL基础知识-安装MySQL

MySQL基础知识-安装MySQL 前导&#xff1a; 昨天去参加了一个面试&#xff0c;公司不太大&#xff0c;是一家日资企业&#xff0c;在国内有几家分公司&#xff0c;面试官问到了MySQL的基本操作和性能优化&#xff0c;说了一大堆&#xff0c;倒是比较轻松的过了&#xff0c;但…

computed计算属性的用法,模模糊糊;后,用methods也可,为什么

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Vue的方法_侠课岛(9xkd.com)</title> <script src"https://unpkg.com/vuenext"></script> </head> <body><div id"com…

java实现大文件下载(http方式)

java实现大文件下载&#xff0c;基于http方式&#xff0c;控件神马的就不说了。 思路&#xff1a;下载文件无非要读取文件然后写文件&#xff0c;主要这两个步骤&#xff0c;主要难点&#xff1a; 1.读文件&#xff0c;就是硬盘到内存的过程&#xff0c;由于jdk内存限制&#x…

用命令创建MySQL数据库

一、连接MYSQL 格式&#xff1a; mysql -h主机地址 -u用户名 -p用户密码 1、 连接到本机上的MYSQL。 首先打开DOS窗口&#xff0c;然后进入目录mysql\bin&#xff0c;再键入命令mysql -u root -p&#xff0c;回车后提示你输密码.注意用户名前可以有空格也可以没有空格&#xff…