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
V2EX  ›  Python

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

  •  
  •   paloalto · 2012-07-16 03:12:57 +08:00 · 5434 次点击
    这是一个创建于 4520 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在有一批图片要从网上批量存到本地的一个目录,图片的地址是类似这样的:
    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.close()
    os.system('wget -i '+filelist)

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

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

    fanzeyi
        3
    fanzeyi  
       2012-07-16 03:28:46 +08:00   ❤️ 1
    http://gist.github.com/3118264

    剩下自己保存..
    reus
        4
    reus  
       2012-07-16 03:29:23 +08:00
    所以这个主题跟python没关系
    reus
        5
    reus  
       2012-07-16 03:29:23 +08:00
    所以这个主题跟python没关系
    MartianZ
        6
    MartianZ  
       2012-07-16 03:46:02 +08:00   ❤️ 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-07-16 09:13:38 +08:00
    试试 crul

    curl http://xxxxx.com/web/_photo/pic/20[05-11]0000[0001-2000].JPG
    yangg
        8
    yangg  
       2012-07-16 09:14:56 +08:00
    curl -O 保存文件而不是输出
    ufo22940268
        9
    ufo22940268  
       2012-07-16 17:01:28 +08:00
    @fanzeyi python用得炉火纯青。推荐本书或者文章或者网站吧,不是入门的那种
    fanzeyi
        10
    fanzeyi  
       2012-07-16 17:14:38 +08:00
    @ufo22940268 :P 不敢不敢.. 炉火纯青还远着呢.. 只是普通的小 trick 而已.. 没啥书推荐.. 网站 Github 就够了..
    ufo22940268
        11
    ufo22940268  
       2012-07-16 17:17:40 +08:00
    @fanzeyi 看了一下你的blog,突然发现有些事情想请教下。可否给个邮箱?
    fanzeyi
        12
    fanzeyi  
       2012-07-16 17:19:30 +08:00
    @ufo22940268 Gmail: fanzeyi1994
    csx163
        13
    csx163  
       2012-07-16 20:14:01 +08:00
    借楼主帖子请教下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-07-16 20:21:32 +08:00
    csx163
        15
    csx163  
       2012-07-16 20:55:35 +08:00
    @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-07-16 21:35:27 +08:00
    csx163
        17
    csx163  
       2012-07-16 22:11:12 +08:00
    真是好人~阁下的github很厉害,已关注。
    不过博客好像打不开了。
    luoqeng
        18
    luoqeng  
       2012-07-24 19:32:53 +08:00
    青果软件?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2627 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 11:11 · PVG 19:11 · LAX 03:11 · JFK 06:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.