【发布时间】: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