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

Python网页爬取:如何为营收增长列添加正负标识?

解决维基百科企业营收增长列正负符号提取问题

问题背景

爬取维基百科《美国营收最高企业列表》的首个表格时,营收增长(revenue growth)列的正负信息由向上绿三角(增长)和向下红三角(下降)图标表示,初始代码仅提取了数字部分,无法体现正负属性;尝试通过判断img标签的alt属性补充符号,但代码未生效。

错误原因分析

你之前的代码存在两个核心问题:

  1. 判断逻辑错误:row_data.find_all('img', alt='Decrease') == True不成立,因为find_all()返回的是元素列表,无论是否找到匹配项,都不会等于布尔值True,正确判断方式是检查列表长度或用find()判断是否为None。
  2. 定位范围错误:你在整行的td集合里查找图标,而图标只存在于第5列(索引为4)的td中,应该针对该列单独处理。

修正后的代码

from bs4 import BeautifulSoup  
import requests

url = 'https://en.wikipedia.org/wiki/List_of_largest_companies_in_the_United_States_by_revenue'

source = requests.get(url)  
soup = BeautifulSoup(source.text, 'html')

table = soup.find_all('table', class_='wikitable sortable')[0]
table_data = table.find_all('tr')[1:]

table_df = []  
for row in table_data:  
    row_data = row.find_all('td')  
    row_df = [data.text.strip() for data in row_data]
    
    # 精准定位营收增长列的td元素(索引为4)
    growth_td = row_data[4]
    # 检查是否存在下降图标,存在则添加负号
    if growth_td.find('img', alt='Decrease'):
        row_df[4] = '-' + row_df[4]
    # 可选:若需要显式显示正增长的+号,添加以下判断
    elif growth_td.find('img', alt='Increase'):
        row_df[4] = '+' + row_df[4]
    
    table_df.append(row_df)

# 打印前5条结果验证
for item in table_df[:5]:
    print(item)

关键说明

  • 用find()替代find_all():find()返回第一个匹配元素,找不到则返回None,直接用于条件判断更简洁高效。
  • 缩小查找范围:仅针对营收增长列的td元素查找图标,避免无关元素干扰。
  • 灵活处理符号:如果只需要补全负号,可去掉elif分支;若要显式标注正增长,则保留该分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:22:51