【问题标题】:How Can I Download An Image From A Website In Python如何在 Python 中从网站下载图像
【发布时间】:2022-01-13 19:01:55
【问题描述】:

我希望能够从网站上抓取图像,例如下面的示例,我的意图是抓取播放器的图像并将其存储在临时文件中,以便我可以在 Tkinter 窗口中显示它。

https://www.futbin.com/22/player/573/trent-alexander-arnold

我遇到了多个使用 BeautifulSoup 的用户,因此我们将不胜感激。

这是我找到并稍作修改的一些示例代码:

from bs4 import *
import requests
import os
 
# CREATE FOLDER
def folder_create(images):
    try:
        folder_name = input("Enter Folder Name:- ")
        # folder creation
        os.mkdir(folder_name)
 
    # if folder exists with that name, ask another name
    except:
        print("Folder Exist with that name!")
        folder_create()
 
    # image downloading start
    download_images(images, folder_name)
 
 
# DOWNLOAD ALL IMAGES FROM THAT URL
def download_images(images, folder_name):
   
    # initial count is zero
    count = 0
 
    # print total images found in URL
    print(f"Total {len(images)} Image Found!")
 
    # checking if images is not zero
    if len(images) != 0:
        for i, image in enumerate(images):
            # From image tag ,Fetch image Source URL
 
                        # 1.data-srcset
                        # 2.data-src
                        # 3.data-fallback-src
                        # 4.src
 
            # Here we will use exception handling
 
            # first we will search for "data-srcset" in img tag
            try:
                # In image tag ,searching for "data-srcset"
                image_link = image["data-srcset"]
                 
            # then we will search for "data-src" in img
            # tag and so on..
            except:
                try:
                    # In image tag ,searching for "data-src"
                    image_link = image["data-src"]
                except:
                    try:
                        # In image tag ,searching for "data-fallback-src"
                        image_link = image["data-fallback-src"]
                    except:
                        try:
                            # In image tag ,searching for "src"
                            image_link = image["src"]
 
                        # if no Source URL found
                        except:
                            pass
 
            # After getting Image Source URL
            # We will try to get the content of image
            try:
                r = requests.get(image_link).content
                try:
 
                    # possibility of decode
                    r = str(r, 'utf-8')
 
                except UnicodeDecodeError:
 
                    # After checking above condition, Image Download start
                    with open(f"{folder_name}/images{i+1}.jpg", "wb+") as f:
                        f.write(r)
 
                    # counting number of image downloaded
                    count += 1
            except:
                pass
 
        # There might be possible, that all
        # images not download
        # if all images download
        if count == len(images):
            print("All Images Downloaded!")
             
        # if all images not download
        else:
            print(f"Total {count} Images Downloaded Out of {len(images)}")
 
# MAIN FUNCTION START
def main(url):
   
    # content of URL
    r = requests.get(url)
 
    # Parse HTML Code
    soup = BeautifulSoup(r.text, 'html.parser')
 
    # find all images in URL
    images = soup.findAll('img')

    folder_name = input("Enter Folder Name:- ")

    download_images(images, folder_name)
 
    # Call folder create function
    try:
        folder_create(images)
    except:
        x = 0
 
# take url
url = input("Enter URL:- ")
 
# CALL MAIN FUNCTION
main(url)

此代码运行,但似乎根本找不到图像文件。我也知道这会刮掉所有图像。此代码也适用于我测试过的其他网站,例如https://www.premierleague.com/players/4852/Adri%C3%A1n/overview

【问题讨论】:

  • 你知道吗,你不必为了在 tkinter 窗口中显示而下载图像?
  • Futbin 使用 CloudFlare 保护它不被抓取...我在 Futwiz 上取得了更大的成功
  • @CoolCloud 我没有你能扩展它吗?
  • @bushcat69 我的程序依赖于futbin,它也从那里刮掉了价格,我想我可以把它切换到Futwiz,只会烦人哈哈
  • @CoolCloud 你知道将网络浏览器嵌入到 tkinter 窗口吗?

标签: python web-scraping


【解决方案1】:

为什么不使用

urls = [img.get('src', None) for img in soup.findAll('img')]

获取图片链接列表,然后执行下载/保存命令,例如

for url in urls:
    if url:
        save_image(url, folder_name)

注意:由于findAll() 方法,您似乎正在使用BeautifulSoup v3。如果您使用 BeautifulSoup v4,请使用 find_all()

【讨论】:

    猜你喜欢
    • 2021-02-14
    • 2017-04-27
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多