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

使用Python-Pyodide编写NFL阵容爬虫遇NetworkError求助

错误原因与解决方法

错误原因

  1. 浏览器跨域限制(CORS):你使用的Jupyter Labs(Python-Pyodide)运行在浏览器环境中,requests库在这里底层依赖浏览器的XMLHttpRequest实现请求。而浏览器的CORS策略会阻止从当前域名向footballdb.com发送跨域请求,除非目标网站明确允许你的域名访问,这直接触发了NetworkError。
  2. 网站基础反爬机制:即使没有CORS限制,footballdb.com这类数据网站会检测请求来源标识,直接用requests.get()发送的请求缺少浏览器专属的User-Agent头,容易被识别为脚本请求而被拒绝。

解决方法

方法一:切换到本地Python环境运行(最推荐)

本地Python环境不受浏览器CORS限制,同时添加请求头模拟浏览器请求,绕过基础反爬:

import requests
from bs4 import BeautifulSoup
import pandas as pd
from io import StringIO

years = list(range(2000, 2024))
# 添加模拟浏览器的请求头
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'
}

for year in years:
    url = f'https://www.footballdb.com/teams/nfl/arizona-cardinals/roster/{year}'
    # 带请求头发送请求
    response = requests.get(url, headers=headers)
    # 解析页面(示例:提取阵容表格)
    soup = BeautifulSoup(response.text, 'html.parser')
    # 根据页面结构定位阵容表格(需实际核对页面元素)
    roster_table = soup.find('table', {'class': 'statistics'})
    if roster_table:
        df = pd.read_html(StringIO(str(roster_table)))[0]
        # 按需保存或处理数据
        print(f'成功获取{year}年阵容数据')

方法二:在Pyodide环境中适配浏览器规则

如果必须在Pyodide环境运行,可使用Pyodide内置的pyodide.http模块替代requests,同时注意:

  • 该模块仍受CORS限制,若目标网站不允许跨域,需自行搭建CORS代理(通过服务器端转发请求,规避浏览器跨域限制)
  • 示例代码:
import pyodide.http
from bs4 import BeautifulSoup
import pandas as pd
from io import StringIO

years = list(range(2000, 2024))
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'
}

url = 'https://www.footballdb.com/teams/nfl/arizona-cardinals/roster/2023'
# 使用pyodide专属http模块获取内容
response = pyodide.http.open_url(url, headers=headers)
soup = BeautifulSoup(response.read(), 'html.parser')
# 后续解析逻辑同本地环境

注意:若Pyodide方法仍报错,说明目标网站未开放跨域权限,此时只能通过本地环境或搭建代理解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:05:03