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
相关产品推荐
相关产品推荐

