从python中提供图像URL的文本文件保存图像

时间:2013-12-16 20:28:29

标签: python urllib2

import urllib2
import urllib
import json
import urlparse

def main():

    f = open("C:\Users\Stern Marketing\Desktop\dumpaday.txt","r")
    if f.mode == 'r':
        item = f.read()
        for x in item:
            urlParts = urlparse.urlsplit(x)
            filename = urlParts.path.split('/')[-1]
            urllib.urlretrieve(item.strip(), filename)

if __name__ == "__main__":
    main()`

看起来脚本仍然无法正常工作,我真的不确定为什么......:S 得到很多错误......

3 个答案:

答案 0 :(得分:2)

urllib.urlretrieve("x", "0001.jpg")

这将尝试从(静态)网址"x"下载。

您实际要下载的网址是变量 x,因此您应该写一行来引用该变量:

urllib.urlretrieve(x, "0001.jpg")

此外,您可能希望更改每次下载的目标文件名,因此不要继续覆盖它。


关于文件名更新:

urlparse.urlsplit是一个获取URL并将其拆分为多个部分的函数。这些部分从函数返回,因此您需要将其保存在某个变量中。

一部分是path,它包含文件名。路径本身是一个字符串,您可以在其上调用split方法以将其与/字符分开。由于您只对最后一部分 - 文件名感兴趣 - 您可以丢弃其他所有内容:

url = 'http://www.dumpaday.com/wp-content/uploads/2013/12/funny-160.jpg'
urlParts = urlparse.urlsplit(url)
print(urlParts.path) # /wp-content/uploads/2013/12/funny-160.jpg

filename = urlParts.path.split('/')[-1]
print(filename) # funny-160.jpg

它应该像这样工作:

import urllib2
import urllib
import json
import urlparse

def main():
    with open("C:\Users\Stern Marketing\Desktop\dumpaday.txt","r") as f:
        for x in f:
            urlParts = urlparse.urlsplit(x.strip())
            filename = urlParts.path.split('/')[-1]
            urllib.urlretrieve(x.strip(), filename)

if __name__ == "__main__":
    main()`

答案 1 :(得分:0)

文件对象的readlines方法返回带有尾随换行符(\n)的行。

将循环更改为以下内容:

# By the way, you don't need readlines at all. Iterating over a file yields its lines.
for x in fl:
    urllib.urlretrieve(x.strip(), "0001.jpg")

答案 2 :(得分:0)

这是一个解决方案,循环覆盖索引为160到171的图像。您可以根据需要进行调整。这会从基础创建一个网址,通过urllib2打开并将其另存为二进制文件

import urllib2 
base_url = "http://www.dumpaday.com/wp-content/uploads/2013/12/funny-{}.jpg"
for n in xrange(160, 170):
    url = base_url.format(n)

    f_save = "{}.jpg".format(n)
    req = urllib2.urlopen(url)

    with open(f_save,'wb') as FOUT:
        FOUT.write(req.read())