网页爬取无法遍历整页:仅获取首位球员信息求助
解决FIFA Index球员数据爬取仅获取首位球员的问题
你的问题出在选择器范围和查找方法上:
soup.find_all('div', class_="responsive-table table-rounded")只会返回一个包含整个球员表格的容器div- 在这个容器里调用
find()方法,只会返回第一个匹配的评分和姓名元素,自然只能拿到首位球员的数据
修正后的代码
from bs4 import BeautifulSoup import requests url = "https://www.fifaindex.com/players/?gender=0&league=1&order=desc" page = requests.get(url) soup = BeautifulSoup(page.content, 'html.parser') # 定位到表格的tbody,所有球员数据行都在这里 player_rows = soup.select("div.responsive-table table tbody tr") for row in player_rows: # 在当前行内查找评分元素 rating_elem = row.find("span", class_="badge badge-dark rating") # 在当前行内查找球员姓名链接 name_elem = row.find("a", class_="link-player") if rating_elem and name_elem: rating = rating_elem.text.strip() name = name_elem.text.strip() print([rating, name])
关键修改点
- 用
select("div.responsive-table table tbody tr")直接定位到每一行球员数据,而非整个表格容器 - 遍历每一行,在当前行范围内查找对应的评分和姓名元素,确保每一行的数据都被正确提取
- 增加了元素存在性判断,避免因页面结构异常导致的报错
内容的提问来源于stack exchange,提问作者fr3dr1k
相关产品推荐
相关产品推荐

