从HTML页面源代码下载图像文件
我正在写一个小程序,这个程序可以从一个网页上下载所有的图片文件,并把它们保存到一个指定的文件夹里。所有的图片都是这个网页的一部分。
8 个回答
8
你需要先下载网页,然后解析这个网页的HTML文档,找到你想要的图片,使用正则表达式来匹配它,最后把图片下载下来。你可以用urllib2来下载网页,用Beautiful Soup来解析HTML文件。
13
Ryan的解决方案很好,但如果图片的来源网址是绝对网址,或者是其他一些简单拼接到主页面网址后结果不好的情况,它就会失效。urljoin可以识别绝对网址和相对网址,所以可以把中间的循环替换成:
for image in soup.findAll("img"):
print "Image: %(src)s" % image
image_url = urlparse.urljoin(url, image['src'])
filename = image["src"].split("/")[-1]
outpath = os.path.join(out_folder, filename)
urlretrieve(image_url, outpath)
90
这里有一段代码,可以从提供的链接下载所有的图片,并把它们保存在你指定的文件夹里。你可以根据自己的需要来修改这段代码。
"""
dumpimages.py
Downloads all the images on the supplied URL, and saves them to the
specified output file ("/test/" by default)
Usage:
python dumpimages.py http://example.com/ [output]
"""
from bs4 import BeautifulSoup as bs
from urllib.request import (
urlopen, urlparse, urlunparse, urlretrieve)
import os
import sys
def main(url, out_folder="/test/"):
"""Downloads all the images at 'url' to /test/"""
soup = bs(urlopen(url))
parsed = list(urlparse(url))
for image in soup.findAll("img"):
print("Image: %(src)s" % image)
filename = image["src"].split("/")[-1]
parsed[2] = image["src"]
outpath = os.path.join(out_folder, filename)
if image["src"].lower().startswith("http"):
urlretrieve(image["src"], outpath)
else:
urlretrieve(urlunparse(parsed), outpath)
def _usage():
print("usage: python dumpimages.py http://example.com [outpath]")
if __name__ == "__main__":
url = sys.argv[-1]
out_folder = "/test/"
if not url.lower().startswith("http"):
out_folder = sys.argv[-1]
url = sys.argv[-2]
if not url.lower().startswith("http"):
_usage()
sys.exit(-1)
main(url, out_folder)
更新: 现在你可以指定输出文件夹了。