python - 如何下载动态加载的链接?
问题描述
我想从英超联赛网站下载所有球员图片,但遇到了墙。链接到图像 播放器图像链接都位于如下所示的标签中。
<img data-script="pl_player-image" data-widget="player-image" data-player="p80201" data-size="110x140"
class="img statCardImg"
src="https://resources.premierleague.com/premierleague/photos/players/110x140/p80201.png"
alt="player.name.display}">
问题是src
动态加载,因此request
库不起作用,因为在加载真实源之前,标记包含以下源https://resources.premierleague.com/premierleague/photos/players/110x140/Photo-Missing.png
。
我也无法将所有请求复制到资源,因为我无法找到每个玩家的唯一标识符。我知道 selenium 可以用来解决这个问题,但我想知道是否有任何库可以在下载 DOM 之前预加载 javascript,或者是否有比 selenium 更好/更快的选项来获取所有链接?
解决方案
因此,如果您想下载图像,可以使用以下技巧:)
import requests
from bs4 import BeautifulSoup
response = requests.get('https://www.premierleague.com/clubs/1/Arsenal/squad')
soup = BeautifulSoup(response.content, 'lxml')
for img in soup.select('img.statCardImg'):
player_id = img.get('data-player')
url = 'https://resources.premierleague.com/premierleague/photos/players/250x250/{}.png'.format(player_id)
response = requests.get(url)
if response.status_code == 200:
with open('{}.png'.format(player_id), 'wb') as f:
for chunk in response.iter_content(1024):
f.write(chunk)
由于所有图像 url 具有相同的结构,因此您可以使用data-player
属性的值来构造它。
推荐阅读
- flutter - 在列中颤动 z-index
- batch-file - 我可以使用变量批量提取子字符串吗?
- r - 保留用 `geom_text()` 绘制的字符串的尾随零
- jakarta-mail - 有没有办法防止使用 javamail 发送的电子邮件被自动转发?
- python - 在 conda 环境中在 Raspberry Pi 4 上安装 pandas 时出错
- java - 访问类的实例列表
- python - 在线性回归模型中,残差均值是否总是接近或等于零?
- c# - ..如何返回任务
- > 通过 c# 和 .net 4.0?
- python - 如何在 Python Web 应用程序代码中使用数据框
- java - 如何将用户输入的数据保存到设备的本地内部存储中?