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

使用BeautifulSoup从Sidearm平台网站提取URL遇到问题

解决Sidearm平台网站roster链接提取问题

原代码仅适用于首页直接存在roster链接的场景,而owlsports.com这类Sidearm站点的roster入口藏在各体育项目的详情页中,首页无直接入口,因此需要调整爬取逻辑:

调整后的核心思路

  1. 先访问站点的体育项目汇总页(Sidearm平台通用路径为/sports),提取所有项目的页面链接
  2. 遍历每个项目页面,在页面内定位roster入口链接
  3. 用集合存储链接以自动去重,最后输出结果

实现代码

import requests
from bs4 import BeautifulSoup
import re

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:16.0) Gecko/20100101 Firefox/16.0'}
base_url = "https://owlsports.com"

# 1. 获取所有体育项目的页面链接
sports_page_url = f"{base_url}/sports"
reqs = requests.get(sports_page_url, headers=headers)
soup = BeautifulSoup(reqs.text, 'html.parser')
# 匹配Sidearm项目列表的链接class
project_links = soup.find_all('a', class_=re.compile("sidearm-sports-list-item-link"))
project_urls = [link.get('href') for link in project_links if link.get('href')]
# 补全相对链接为完整URL
project_urls = [url if url.startswith('http') else f"{base_url}{url}" for url in project_urls]

# 2. 遍历项目页提取roster链接
roster_links = set()
for url in project_urls:
    try:
        req = requests.get(url, headers=headers)
        project_soup = BeautifulSoup(req.text, 'html.parser')
        # 查找含roster关键字的链接
        links = project_soup.find_all('a', href=re.compile("roster"))
        for link in links:
            href = link.get('href')
            if href:
                full_href = href if href.startswith('http') else f"{base_url}{href}"
                roster_links.add(full_href)
    except Exception as e:
        print(f"访问项目页 {url} 出错: {e}")

# 输出最终结果
for link in roster_links:
    print(link)

补充说明

  • Sidearm平台站点结构有共性,项目汇总页基本都在/sports路径,项目内导航栏通常包含roster入口
  • 若遇到动态加载的项目列表(需点击展开),可改用selenium模拟浏览器渲染,但多数Sidearm站点的项目列表为静态渲染
  • 用集合存储链接可避免同一项目出现多个重复roster链接的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:15:50