脚本不下载大图像

DrS*_*ove 0 python

我使用此脚本从同一个html页面下载图像.但如果图像足够大,这个脚本不能正确下载 - 所有图像都是1,15 Kb而且不显示.我该如何解决?怎么了?

unu*_*tbu 7

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

<img src="IMG_5072.jpg" alt="" width="1000" height="667" border="1" />
Run Code Online (Sandbox Code Playgroud)

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

这条线

parsed[2] = image["src"]
Run Code Online (Sandbox Code Playgroud)

parsed来自的变化

['http', 'tema.ru', '/travel/new-york.2011.11/', '', '', '']
Run Code Online (Sandbox Code Playgroud)

至

['http', 'tema.ru', 'IMG_5072.jpg', '', '', '']
Run Code Online (Sandbox Code Playgroud)

然后用.形成新的URL

url = urlparse.urlunparse(parsed)
Run Code Online (Sandbox Code Playgroud)

其中规定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'])
Run Code Online (Sandbox Code Playgroud)

所以试试吧

"""
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)
Run Code Online (Sandbox Code Playgroud)