求教 python 批量下载图片的方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
paloalto

求教 python 批量下载图片的方法

  •  
  •   paloalto 2012 年 7 月 16 日 5989 次点击
    这是一个创建于 5031 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在有一批图片要从网上批量存到本地的一个目录,图片的地址是类似这样的:
    http://xxxxx.com/web/_photo/pic/200500000001.JPG
    http://xxxxx.com/web/_photo/pic/200500000002.JPG
    ...
    http://xxxxx.com/web/_photo/pic/201100000950.JPG


    备注:
    1.http://xxxxx.com/web/_photo/pic/这一级目录没有权限访问,只能访问单个图片地址。
    2.图片的后四位最多到2000,前面的年份从2005一直到2011,中间都是0000。
    3.组合起来后有的图片可能会无法访问(可能需要一个if...else: pass之类的语句?)。


    在网上找了一个类似的脚本,但是不知道怎么改,这个脚本访问图片的路径都是这样的:
    http://xxxxx.com/web/_photo/pic/1.JPG
    http://xxxxx.com/web/_photo/pic/2.JPG
    http://xxxxx.com/web/_photo/pic/3.JPG

    把代码中的 start 和 end 改为 200500000001 和 201100002000 后就提示:

    OverflowError: Python int too large to convert to C long


    下面是python代码
    #!/usr/bin/env python
    # coding: utf-8

    import os
    import time
    import urlparse
    import string

    '''
    用于下载资源的小程序
    给定样板url设置起止循环点,利用wget批量下载文件。非常适合下载静态图片文件
    某些网站经过特殊处理(如登录验证/请求拦截)无法下载
    '''

    #样板URL,生成的URL列表以此递增
    sampleurl='http://xxxxx.com/web/_photo/pic/200500000001.JPG'
    #保存图片的文件夹(末尾必须带上斜线),程序会在这个目录下新建一个网站目录
    folder='/home/www/test/'
    #基准URL循环起点
    start=1
    #基准URL循环终点
    end=30

    #在folder下新建当前网站目录
    url=urlparse.urlparse(sampleurl)
    base=folder+url.hostname+'/'
    #解析文件格式
    frags=sampleurl.split('/')
    ext=frags[len(frags)-1].split('.')[1]
    baseurl='/'.join(frags[:-1])
    if not os.path.isdir(folder):
    os.mkdir(folder)
    if not os.path.isdir(base):
    os.mkdir(base)
    os.chdir(base)

    #根据设置的URL的起点与终点生成批量URL地址,保存到文本文件中。
    now=time.localtime()
    filelist='urls-{0}{1}{2}{3}{4}.txt'.format(now[1],now[2],now[3],now[4],now[5])
    f=open(base+filelist,'w')
    for x in xrange(start,end,1):
    f.write('{0}/{1}.{2}\n'.format(baseurl,x,ext))
    f.clos()
    os.system('wget -i '+filelist)

    #如果不希望保存URL列表则删除文件
    #os.remove(base+filelist)
    18 条回复    1970-01-01 08:00:00 +08:00
    reus
        1
    reus  
       2012 年 7 月 16 日   1
    用py生成地址列表之后用wget或者aria下载就行了
    paloalto
        2
    paloalto  
    OP
       2012 年 7 月 16 日
    哈哈 ! 我找到了一个更简单的办法!

    用firefox的downthemall插件,修改参数就可以了!

    fanzeyi
        3
    fanzeyi  
       2012 年 7 月 16 日   1
    http://gist.github.com/3118264

    剩下自己保存..
    reus
        4
    reus  
       2012 年 7 月 16 日
    所以这个主题跟python没关系
    reus
        5
    reus  
       2012 年 7 月 16 日
    所以这个主题跟python没关系
    MartianZ
        6
    MartianZ  
       2012 年 7 月 16 日   1
    #!/bin/bash

    for((i=5; i<=11; i++))
    do
    for((j=0; j<=2000; j++))
    do
    year=$(printf "%02d" $i)
    id=$(printf "%08d" $j)
    url="http://xxx.com/20$base_url$year$id.JPG"
    wget -t 1 $url
    done
    done
    yangg
        7
    yangg  
       2012 年 7 月 16 日
    试试 crul

    curl http://xxxxx.com/web/_photo/pic/20[05-11]0000[0001-2000].JPG
    yangg
        8
    yangg  
       2012 年 7 月 16 日
    curl -O 保存文件而不是输出
    ufo22940268
        9
    ufo22940268  
       2012 年 7 月 16 日
    @fanzeyi python用得炉火纯青。推荐本书或者文章或者网站吧,不是入门的那种
    fanzeyi
        10
    fanzeyi  
       2012 年 7 月 16 日
    @ufo22940268 :P 不敢不敢.. 炉火纯青还远着呢.. 只是普通的小 trick 而已.. 没啥书推荐.. 网站 Github 就够了..
    ufo22940268
        11
    ufo22940268  
       2012 年 7 月 16 日
    @fanzeyi 看了一下你的blog,突然发现有些事情想请教下。可否给个邮箱?
    fanzeyi
        12
    fanzeyi  
       2012 年 7 月 16 日
    @ufo22940268 Gmail: fanzeyi1994
    csx163
        13
    csx163  
       2012 年 7 月 16 日
    借楼主帖子请教下python如何生成

    &year=2012&mOnth=7&day=9
    &year=2012&mOnth=7&day=2
    &year=2012&mOnth=6&day=25

    这种字符串呢?
    @MartianZ
    @fanzeyi
    fanzeyi
        14
    fanzeyi  
       2012 年 7 月 16 日
    csx163
        15
    csx163  
       2012 年 7 月 16 日
    @fanzeyi

    不好意思,意思没表达清楚,就是按格式列出周1的日期,谢谢啦~

    &year=2012&mOnth=7&day=9
    &year=2012&mOnth=7&day=2
    &year=2012&mOnth=6&day=25

    。。。。。


    &year=2009&mOnth=6&day=29


    时间是按周排列的,一直到某年的周1为止
    fanzeyi
        16
    fanzeyi  
       2012 年 7 月 16 日
    csx163
        17
    csx163  
       2012 年 7 月 16 日
    真是好人~阁下的github很厉害,已关注。
    不过博客好像打不开了。
    luoqeng
        18
    luoqeng  
       2012 年 7 月 24 日
    青果软件?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     895 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 98ms UTC 21:47 PVG 05:47 LAX 14:47 JFK 17:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86