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
相关产品推荐
相关产品推荐

