هل تريد تنزيل ملف الصورة من مصدر صفحة HTML باستخدام python؟

StackOverflow https://stackoverflow.com/questions/257409

  •  05-07-2019
  •  | 
  •  

سؤال

أنا أكتب مكشطة تقوم بتنزيل جميع ملفات الصور من صفحة HTML وحفظها في مجلد معين.جميع الصور هي جزء من صفحة HTML.

هل كانت مفيدة؟

المحلول

إليك بعض التعليمات البرمجية لتنزيل جميع الصور من عنوان 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 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)

يحرر: يمكنك تحديد مجلد الإخراج الآن.

نصائح أخرى

وحل ريان جيد، ولكن فشل إذا كانت عناوين مصدر الصورة هي عناوين المواقع المطلقة أو أي شيء لا يعطي نتيجة جيدة عند متصلا ببساطة إلى 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)

لديك لتحميل الصفحة وتحليل وثيقة أتش تي أم أل، والعثور على الصور الخاصة بك مع التعابير المنطقية وتحميل البرنامج .. يمكنك استخدام urllib2 لتحميل وحساء جميل لتحليل ملف HTML.

وهذه هي وظيفة للتحميل صورة واحدة:

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

استخدم htmllib لاستخراج كافة العلامات IMG (تجاوز do_img)، ثم استخدم urllib2 لتحميل جميع الصور.

إذا طلب بحاجة إلى إذن الرجوع إلى هذا واحد:

r_img = requests.get(img_url, auth=(username, password)) 
f = open('000000.jpg','wb') 
f.write(r_img.content) 
f.close()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top