Python网页爬取:如何为营收增长列添加正负标识?
解决维基百科企业营收增长列正负符号提取问题
问题背景
爬取维基百科《美国营收最高企业列表》的首个表格时,营收增长(revenue growth)列的正负信息由向上绿三角(增长)和向下红三角(下降)图标表示,初始代码仅提取了数字部分,无法体现正负属性;尝试通过判断img标签的alt属性补充符号,但代码未生效。
错误原因分析
你之前的代码存在两个核心问题:
- 判断逻辑错误:
row_data.find_all('img', alt='Decrease') == True不成立,因为find_all()返回的是元素列表,无论是否找到匹配项,都不会等于布尔值True,正确判断方式是检查列表长度或用find()判断是否为None。 - 定位范围错误:你在整行的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
相关产品推荐
相关产品推荐

