2011-12-28 52 views
0

我使用this腳本從同一個html頁面下載圖像。但如果圖像足夠大,這個腳本不能正確下載 - 所有圖像都是1,15 Kb,不顯示。 我該如何解決它?怎麼了?腳本沒有下載大圖像

+0

你能後發生問題的示例頁面? – 2011-12-28 19:38:44

+0

腳本失敗的示例URL如何? – 2011-12-28 19:39:05

+0

http://tema.ru/travel/new-york.2011.11/ – DrStrangeLove 2011-12-28 19:40:32

回答

7

如果您下載並在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 = urlparse.urlunparse(parsed) 
新網址

其中urlhttp://tema.ru/IMG_5072.jpg哪個不存在。 正確的網址是http://tema.ru/travel/new-york.2011.11/IMG_5072.jpg

我們可以與

url = urlparse.urljoin(base_url,image['src']) 

該URL所以儘量

""" 
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」' – 2011-12-28 20:44:06

+0

優秀。謝謝! – unutbu 2011-12-28 20:55:38

+0

我複製並粘貼了你的代碼。它沒有工作! IOError [errno 2] no such file or directory:u'/tmp\\arr.gif' – DrStrangeLove 2011-12-28 22:30:56