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

Python抓取特斯拉季度营收却得到年度数据,请问代码哪里出错?

错误原因

  • 你访问的目标页面内存在多组营收表格,soup.find('tbody')默认匹配页面中第一个<tbody>标签,对应的恰好是年度营收表格,而季度营收表格的<tbody>在页面更靠后的位置。
  • 现有代码直接将td标签对象存入DataFrame,没有提取标签内的文本内容,后续做数据处理也会出现格式问题。

修正后的参考代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

url='https://www.macrotrends.net/stocks/charts/TSLA/tesla/revenue'
# 增加请求头避免被反爬拦截,部分场景不加会返回错误页面
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'
}
html_data = requests.get(url, headers=headers).text
soup = BeautifulSoup(html_data, 'html.parser')

# 获取页面所有tbody,季度营收对应索引为1的第二个tbody,页面结构变动时可自行调整索引
all_tbodys = soup.find_all('tbody')
quarterly_tbody = all_tbodys[1]

data_list = []
for row in quarterly_tbody.find_all('tr'):
    col = row.find_all('td')
    if len(col) < 2:
        continue
    date = col[0].text.strip()
    # 清洗营收字段的$符号和千位逗号,方便后续转数值处理
    revenue = col[1].text.strip().replace('$', '').replace(',', '')
    if revenue:
        data_list.append({'Date': date, 'Revenue': float(revenue)})

tesla_revenue = pd.DataFrame(data_list)
tesla_revenue.head()

补充说明

  • 如果后续页面结构调整导致索引对应的表格不对,可以先打印每个tbody的前几行内容,确认对应表格类型后再调整索引即可。
  • 原代码使用的DataFrame.append方法在pandas 2.0+版本已经被废弃,用列表先收集数据再统一转DataFrame的效率更高,也不会触发版本告警。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:27:00