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

如何在网页源码中分离抓取同类型元素?Transfermarkt爬取问题

解决Transfermarkt转入/转出数据区分问题
  • 核心思路是通过父容器区分,而非直接全局抓取zentriert类元素——Transfermarkt页面里,Arrivals(转入)和Departures(转出)各自属于独立的区块,可先定位区块再提取目标元素:
    1. 页面中通常存在<h2>Arrivals</h2>和<h2>Departures</h2>标签,它们的下一个兄弟元素就是对应的数据表格;
    2. 用BeautifulSoup的find_next()方法锁定对应表格,再在表格内部提取zentriert类元素,就能精准区分转入/转出数据。

示例代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 替换为你要爬取的2010赛季英超球队转会页URL
url = "https://www.transfermarkt.co.uk/[球队名]/transfers/season/2010"
# 模拟浏览器请求头,避免被反爬拦截
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 提取转入数据
arrivals_heading = soup.find("h2", string="Arrivals")
arrivals_table = arrivals_heading.find_next("table", class_="items")
arrivals_zentriert = [td.get_text(strip=True) for td in arrivals_table.find_all("td", class_="zentriert")]

# 提取转出数据
departures_heading = soup.find("h2", string="Departures")
departures_table = departures_heading.find_next("table", class_="items")
departures_zentriert = [td.get_text(strip=True) for td in departures_table.find_all("td", class_="zentriert")]

# 转换为DataFrame按需处理(可根据实际数据结构调整列名和格式)
arrivals_df = pd.DataFrame({"转入相关数据": arrivals_zentriert})
departures_df = pd.DataFrame({"转出相关数据": departures_zentriert})
  • 补充适配方案:如果页面标题不是精确的"Arrivals",可以用模糊匹配:soup.find("h2", string=lambda text: "Arrivals" in text.strip());部分页面的转入/转出区块会包裹在class="box"的div里,也可以通过find("div", class_="box", string=lambda x: "Arrivals" in x)定位父容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:45:31