You need to enable JavaScript to run this app. 使用BeautifulSoup抓取tr标签数据时select返回空数组的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup抓取tr标签数据时select返回空数组的问题求助

问题排查与解决方案

核心原因

当前代码匹配不到结果的核心原因是选择器和目标页面的DOM结构不匹配:

  • 你参考的爬取方案,针对的是表格行自带data-row自定义属性的站点,但当前要爬的leagues页面结构和参考案例的页面差异极大,表格行没有设置这类自定义属性,匹配逻辑自然返回空数组。
  • 可通过打印html_text前2000个字符快速排查:如果返回内容和浏览器打开的页面一致,就确认是选择器写错;如果返回的是验证页/空白内容,再排查反爬拦截问题。

修正后可运行的代码

from bs4 import BeautifulSoup
import requests

# 加基础请求头模拟浏览器访问,避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
html_text = requests.get('https://www.basketball-reference.com/leagues/', headers=headers).text
soup = BeautifulSoup(html_text, 'lxml')

# 定位到目标数据表格
target_table = soup.select_one('#league_leagues')
# 取表格tbody下的所有数据行,排除表头
rows = target_table.select('tbody tr')

print(f"共抓取到 {len(rows)} 条有效行数据")
# 打印前3条行的文本做验证
for row in rows[:3]:
    print(row.get_text(strip=True))

新手爬取通用注意事项

  • 不要直接套用其他站点的爬取代码,每个网站的DOM结构是独立设计的,优先在浏览器开发者工具(按F12打开)里核对目标元素的实际属性、所属父容器,再写对应选择器。
  • 如果需要过滤掉表格里的无数据分组标题行,可以加属性判断:只保留带data-stat属性的tr,正常数据行的每个单元格都会带对应统计项的标识。
  • 所有请求尽量带上基础的User-Agent请求头,避免被站点识别为爬虫直接返回空内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 17:24:10