import os import re from bs4 import BeautifulSoup import requests from urllib.parse import urljoin import base64 def ladda_ner_bilder(url): # Hämta HTML-sidan svar = requests.get(url) soup = BeautifulSoup(svar.text, 'html.parser') # Hitta alla bilder bilder = [] for img in soup.find_all('img'): src = img.get('src') if src: bilder.append(src) # Hantera inline-bilder i base64 INLINE_BILD_MÖNSTER = r'data:image/(.*?);base64,(.*)' matcher = re.compile(INLINE_BILD_MÖNSTER) for match in matcher.finditer(svar.text): bild_typ = match.group(1) bild_data = match.group(2) bilder.append(f"data:{bild_typ};base64,{bild_data}") # Ladda ner bilderna bild_katalog = os.path.expanduser("~/Downloads/bilder") if not os.path.exists(bild_katalog): os.makedirs(bild_katalog) for bild_url in bilder: if not bild_url.startswith('http'): bild_url = urljoin(url, bild_url) if bild_url.startswith('data:'): # Dekodera base64-strängen och spara den som en bild format, data = bild_url.split(';base64,') data = base64.b64decode(data) filnamn = 'inline_' + str(len(bilder)) + '.gif' with open(os.path.join(bild_katalog, filnamn), 'wb') as f: f.write(data) else: svar = requests.get(bild_url) if svar.status_code == 200: filnamn = os.path.basename(bild_url).split('?')[0] with open(os.path.join(bild_katalog, filnamn), 'wb') as f: f.write(svar.content) print(f"Bilden {filnamn} har laddats ner till {bild_katalog}.") def main(): url = input("Ange URL till sidan från vilken du vill hämta bilder: ") if not url.startswith('http'): url = 'http://' + url try: ladda_ner_bilder(url) except Exception as e: print(f"Fel inträffade: {e}") if __name__ == "__main__": main()