You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Beautiful Soup无法抓取Transfermarkt网页完整HTML及图片提取逻辑疑问

解决Transfermarkt网页抓取404问题及图片提取逻辑分析

我来帮你拆解下遇到的两个问题:

一、为啥请求返回404 Not Found?

Transfermarkt网站有基础的反爬检测机制,当你直接用urllib3发起请求时,请求头里没有携带User-Agent信息——网站会把这种无标识的请求判定为爬虫,直接返回404拒绝访问。

解决起来很简单,只需要在请求时添加模拟浏览器的User-Agent头,让网站认为你是正常用户在访问即可。

二、通过dataBild div找图片的逻辑靠谱吗?

这个逻辑完全没问题!页面里确实把球员头像放在class为dataBild的div容器内。不过你当前的代码只找到了这个div元素,还需要进一步从div中提取<img>标签的src属性,才能拿到实际的图片地址。

给你改好的完整代码

import urllib3
import certifi
from bs4 import BeautifulSoup

# 目标球员页面URL
url = 'https://www.transfermarkt.com/jordon-ibe/profil/spieler/195652'
# 模拟Chrome浏览器的请求头,也可以替换成你自己浏览器的UA
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where())
# 发起请求时携带headers
response = http.request('GET', url, headers=headers)

# 解析HTML内容
soup = BeautifulSoup(response.data, "html.parser")

# 找到目标div(用find比find_all更合适,因为页面里只有一个dataBild容器)
player_img_container = soup.find('div', class_='dataBild')
if player_img_container:
    # 从div中定位img标签
    img_tag = player_img_container.find('img')
    if img_tag:
        # 提取图片的URL地址
        print("球员图片URL:", img_tag.get('src'))
    else:
        print("在dataBild容器内未找到img标签")
else:
    print("未找到class为dataBild的div元素")

额外补充说明

  • 你之前使用soup.find_all()会返回元素列表,而页面里只有一个dataBild容器,用soup.find()直接获取单个元素更高效。
  • User-Agent可以复制你自己浏览器的标识(在开发者工具的Network面板里查看请求Headers就能找到),避免被网站识别为爬虫。
  • 如果后续再次遇到访问问题,可能是Transfermarkt更新了反爬策略,到时可以考虑添加更多请求头(比如Accept-Language)或者使用代理IP,但当前仅添加User-Agent就足够解决404问题。

内容的提问来源于stack exchange,提问作者Liam Gower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:40:50