Я пишу скребок, который загружает все файлы изображений со страницы HTML и сохраняет их в определенной папке. все изображения являются частью страницы HTML.
Загрузить файл изображения из источника HTML-страницы с помощью python?
Ответ 1
Ниже приведен код для загрузки всех изображений с предоставленного URL-адреса и сохранения их в указанной выходной папке. Вы можете изменить его в соответствии с вашими потребностями.
"""
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 BeautifulSoup import BeautifulSoup as bs
import urlparse
from urllib2 import urlopen
from urllib import 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.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(urlparse.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)
Изменить: Теперь вы можете указать папку вывода.
Ответ 2
Решение Ryan - это хорошо, но не удается, если URL-адреса источника изображения являются абсолютными URL-адресами или чем-либо, что не дает хорошего результата, просто связавшись с URL главной страницы. urljoin распознает абсолютные и относительные URL-адреса, поэтому замените цикл посередине на:
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)
Ответ 3
Вам нужно загрузить страницу и проанализировать html-документ, найти свое изображение с помощью регулярного выражения и загрузить его. Вы можете использовать urllib2 для загрузки и Beautiful Soup для анализа html файла.
Ответ 4
И это функция для загрузки одного изображения:
def download_photo(self, img_url, filename):
file_path = "%s%s" % (DOWNLOADED_IMAGE_PATH, filename)
downloaded_image = file(file_path, "wb")
image_on_web = urllib.urlopen(img_url)
while True:
buf = image_on_web.read(65536)
if len(buf) == 0:
break
downloaded_image.write(buf)
downloaded_image.close()
image_on_web.close()
return file_path
Ответ 5
Используйте htmllib для извлечения всех тегов img (переопределите do_img), затем используйте urllib2 для загрузки всех изображений.
Ответ 6
Если запрос требует авторизации, обратитесь к этому:
r_img = requests.get(img_url, auth=(username, password))
f = open('000000.jpg','wb')
f.write(r_img.content)
f.close()