首页 > 解决方案 > 如何下载动态加载的链接?

问题描述

我想从英超联赛网站下载所有球员图片,但遇到了墙。链接到图像 播放器图像链接都位于如下所示的标签中。

<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 更好/更快的选项来获取所有链接?

标签: pythonpython-3.xweb-scraping

解决方案


因此,如果您想下载图像,可以使用以下技巧:)

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属性的值来构造它。


推荐阅读