Как сохранить картинки с сайта в локальную папку - PullRequest
1 голос
/ 30 апреля 2020

Мне нужно сохранить изображения с этого веб-сайта в папке:

http://www.photobirdireland.com/garden-birds.html

Я пробовал с помощью import os

from lxml import html
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs


class ImageScraper:
    def __init__(self, url, download_path):
        self.url = url
        self.download_path = download_path

        self.session = requests.Session()

    def scrape_images(self):

        html = urlopen(url)
        bs4 = bs(html, 'html.parser')
        images = bs4.find_all('img', {})


scraper = ImageScraper(url="http://www.photobirdireland.com/garden-birds.html")
scraper.scrape_images() 

f = open('Users/Lu/Desktop/Images','wb') # folder 
f.write(img) 
f.close()

но я не получаю никаких результатов или ошибок.

Я почти уверен, что что-то не работает в коде.

Можете ли вы взглянуть на это, пожалуйста, и скажите мне, что не так?

Ответы [ 3 ]

3 голосов
/ 30 апреля 2020

Ваш код неполон, 1-й прогон l oop на images = bs4.find_all('img', {})

Пример

for image in images:
    # get the img url
    img_url = image.get('src').replace('\\', '/')
    real_url = "http://www.photobirdireland.com/" + img_url

    # get the image name
    img_name = str(img_url.split('/')[-1])

    # now download the image using - import urllib.request & import os
    print("downloading {}".format(img_url))
    urllib.request.urlretrieve(real_url, os.path.join(path, img_name))

Полный код должен выглядеть следующим образом -

import os
import urllib.request
import requests
from urllib.request import urlopen
from bs4 import BeautifulSoup as Bs


class ImageScraper:
    def __init__(self, url, download_path):
        self.url = url
        self.download_path = download_path
        self.session = requests.Session()

    def scrape_images(self):
        path = self.download_path
        html = urlopen(self.url)
        bs4 = Bs(html, 'html.parser')
        images = bs4.find_all('img', {})

        for image in images:
            # get the img url
            img_url = image.get('src').replace('\\', '/')
            real_url = "http://www.photobirdireland.com/" + img_url
            print(real_url)
            # get the image name
            img_name = str(img_url.split('/')[-1])
            print(img_name)
            print("downloading {}".format(img_url))
            urllib.request.urlretrieve(real_url, os.path.join(path, img_name))


scraper = ImageScraper(
    url="http://www.photobirdireland.com/garden-birds.html", download_path=r"D:\Temp\Images")
scraper.scrape_images()
2 голосов
/ 30 апреля 2020

this html = urlopen(url) должно быть html = urlopen(self.url)

edit: вы можете получить URL-адреса, подобные этому

def scrape_images(self):
       html = urlopen(selfurl)
       bs4 = bs(html, 'html.parser')

       urls = []
       for img in bs4.find_all('img'):
           urls.append(img.attrs.get("src"))

       return urls

, и следующим шагом будет поиск их загрузки.

1 голос
/ 30 апреля 2020

Попробуйте следующий код для загрузки images.use urlretrieve для загрузки значения sr c изображения в местоположение.

from urllib.request import urlretrieve
import requests
from bs4 import BeautifulSoup
import os
url='http://www.photobirdireland.com/garden-birds.html'
data=requests.get(url).text
soup=BeautifulSoup(data,"html.parser")
images=['http://www.photobirdireland.com/'+ image['src'] for image in soup.find_all('img')]

for img in images:
    urlretrieve(img,os.path.basename(img)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...