如何在Python中从提取的表格中将数据项存储到单独的变量中?
我还有一个关于如何从表格中收集数据的问题。这是一个正在进行的项目,以前的回答对我帮助很大,因为我对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'
如果每年有多行数据,你就需要把每年的值变成一个列表。