2011-12-28 4 views
0

Я использую сценарий this для загрузки изображений с одной и той же страницы html. Но если изображения достаточно большие, этот скрипт не загружается должным образом - все изображения 1,15 КБ и не отображаются. Как я могу это исправить? что не так?Сценарий не загружает большие изображения

+0

Вы можете разместить пример страницы, где происходит проблема? –

+0

Как пример URL-адреса, с которым работает скрипт? –

+0

http://tema.ru/travel/new-york.2011.11/ – DrStrangeLove

ответ

7

Если вы загружаете и проверить HTML в http://tema.ru/travel/new-york.2011.11/, вы видите вещи, как

<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 с

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) 
+0

Вы можете полностью оставить ветку в 'main'. 'urljoin (" http://example.org/test.png "," http://google.com/test.png ") ==" http://google.com/test.png "' –

+0

Отлично. Спасибо! – unutbu

+0

Я скопировал и вставил ваш код. он не работал! IOError [errno 2] нет такого файла или каталога: u '/tmp\\arr.gif' – DrStrangeLove

Смежные вопросы