如何在Python中从提取的表格中将数据项存储到单独的变量中?

0 投票
1 回答
2808 浏览
提问于 2025-04-16 16:06

我还有一个关于如何从表格中收集数据的问题。这是一个正在进行的项目,以前的回答对我帮助很大,因为我对Python还很陌生。

现在,我已经成功地使用BeautifulSoup从HTML中提取了一个表格,这要感谢之前对我问题的回答。现在我面临的新问题是如何把每个数据项存储到单独的变量中。

我输出的表格看起来是这样的:

year|salary|bonus
2005|100,000|50,000
2006|120,000|80,000

我想为工资创建一个变量,为奖金创建一个变量,并且把每年的相应金额放进去。

这是我用来获取这些表格的代码:

from BeautifulSoup import BeautifulSoup
import re

html = '<html><body><p align="center"><table><tr><td>year</td><td>salary</td><td>bonus</td></tr><tr><td>2005</td><td>100,000</td><td>50,000</td></tr><tr><td>2006</td><td>120,000</td><td>80,000</td></tr></table></html>'
soup = BeautifulSoup(html)
table = soup.find('table')
rows = table.findAll('tr')

store=[]

for tr in rows:
    cols = tr.findAll('td')
    row = []
    for td in cols:
        try:
            row.append(''.join(td.find(text=True)))
        except Exception:
            row.append('')
    store.append('|'.join(row))
print '\n'.join(store)

有没有办法创建变量来提取每年的工资和奖金呢?

1 个回答

1

你是说要把数据存起来,而不是只是打印每一行吗?你可以把它们放进一个字典里;假设列的顺序总是这样,并且总是有明确的说明,你可以使用类似下面的代码:

payment_dict = {}
for tr in rows:
  year_td, salary_td, bonus_td = tr.findAll('td')
  salary = salary_td.find(text=True)
  bonus = bonus_td.find(text=True)
  payment_dict[year_td.find(text=True)] = {'salary': salary, 'bonus': bonus}

# payment_dict['2005']['bonus'] = '50,000'

如果每年有多行数据,你就需要把每年的值变成一个列表。

撰写回答