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 得到很多错误......
答案 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())