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

2012-07-16 03:12:57 +08:00
 paloalto
现在有一批图片要从网上批量存到本地的一个目录,图片的地址是类似这样的:
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)
5320 次点击
所在节点    Python
18 条回复
reus
2012-07-16 03:25:31 +08:00
用py生成地址列表之后用wget或者aria下载就行了
paloalto
2012-07-16 03:26:04 +08:00
哈哈 ! 我找到了一个更简单的办法!

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

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

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

curl http://xxxxx.com/web/_photo/pic/20[05-11]0000[0001-2000].JPG
yangg
2012-07-16 09:14:56 +08:00
curl -O 保存文件而不是输出
ufo22940268
2012-07-16 17:01:28 +08:00
@fanzeyi python用得炉火纯青。推荐本书或者文章或者网站吧,不是入门的那种
fanzeyi
2012-07-16 17:14:38 +08:00
@ufo22940268 :P 不敢不敢.. 炉火纯青还远着呢.. 只是普通的小 trick 而已.. 没啥书推荐.. 网站 Github 就够了..
ufo22940268
2012-07-16 17:17:40 +08:00
@fanzeyi 看了一下你的blog,突然发现有些事情想请教下。可否给个邮箱?
fanzeyi
2012-07-16 17:19:30 +08:00
@ufo22940268 Gmail: fanzeyi1994
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
2012-07-16 20:21:32 +08:00
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
2012-07-16 21:35:27 +08:00
csx163
2012-07-16 22:11:12 +08:00
真是好人~阁下的github很厉害,已关注。
不过博客好像打不开了。
luoqeng
2012-07-24 19:32:53 +08:00
青果软件?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/42469

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX