【问题标题】:Script doesn't download large images脚本不下载大图像
【发布时间】:2011-12-28 19:37:15
【问题描述】:

我使用this 脚本从同一个 html 页面下载图像。但如果图像足够大,此脚本将无法正确下载 - 所有图像均为 1,15 Kb 且不显示。 我该如何解决?怎么了?

【问题讨论】:

标签: python


【解决方案1】:

如果您下载并检查 http://tema.ru/travel/new-york.2011.11/ 中的 HTML,您会看到类似

<img src="IMG_5072.jpg" alt="" width="1000" height="667" border="1" />

所以这个页面使用的是相对链接。

线

parsed[2] = image["src"]

更改 parsed
['http', 'tema.ru', '/travel/new-york.2011.11/', '', '', '']

['http', 'tema.ru', 'IMG_5072.jpg', '', '', '']

然后用

形成新的url
url = urlparse.urlunparse(parsed)

url 设置为不存在的http://tema.ru/IMG_5072.jpg。 正确的网址是http://tema.ru/travel/new-york.2011.11/IMG_5072.jpg

我们可以用

形成那个网址
url = urlparse.urljoin(base_url,image['src'])

所以试试

"""
http://stackoverflow.com/a/258511/190597
Author: Ryan Ginstrom
dumpimages.py
    Downloads all the images on the supplied URL, and saves them to the
    specified output file ("/tmp" by default)

Usage:
    python dumpimages.py http://example.com/ [output]
"""
import os
import sys
import urllib
import urllib2
import urlparse
import argparse
import BeautifulSoup

def main(base_url, out_folder):
    """Downloads all the images at 'url' to out_folder"""
    soup = BeautifulSoup.BeautifulSoup(urllib2.urlopen(base_url))
    for image in soup.findAll("img"):
        src = image['src']
        print "Image: {s}".format(s=src) 
        _, filename = os.path.split(urlparse.urlsplit(src).path)
        outpath = os.path.join(out_folder, filename)
        url = urlparse.urljoin(base_url, src)
        urllib.urlretrieve(url, outpath)

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('url')
    parser.add_argument('out_folder', nargs = '?', default = '/tmp')
    args = parser.parse_args()
    main(args.url, args.out_folder)

【讨论】:

  • 您可以完全省略main 中的分支。 urljoin("http://example.org/test.png", "http://google.com/test.png") == "http://google.com/test.png"
  • 我复制并粘贴了您的代码。它没有用! IOError [errno 2] 没有这样的文件或目录:u' /tmp\\arr.gif'
  • default = '/tmp' 更改为适用于您的 Windows 计算机的合理值。将其设置为用于保存下载的某个目录。或者,您可以使用作为附加参数提供的下载文件夹运行脚本:python dumpimages.py http://tema.ru/travel/new-york.2011.11/ C:\\path\to\download\folder
  • @unutbu 我试过 python dumpimages.py tema.ru/travel/new-york.2011.11 C:\\t 它输出 - 无法识别的参数:C:\\t
  • 好吧,我显然不知道如何在 Windows 环境下操作。所需目录的路径是什么?在C: 驱动器的顶层是否有一个名为t 的目录?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 2012-10-23
  • 1970-01-01
  • 2012-02-05
相关资源
最近更新 更多