脚本无法下载大图片
我用这个脚本从同一个网页上下载图片。但是如果图片比较大,这个脚本就不能正确下载了——所有的图片都是1.15 Kb,显示不出来。
我该怎么解决这个问题呢?哪里出了错?
1 个回答
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 = 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)