如何将数据项存储在Python中提取的表中的各个变量中?

时间:2011-04-20 14:16:31

标签: python beautifulsoup

我还有一个关于如何从表中收集数据的问题。这是一个正在进行的项目,之前的答案非常有用,因为我对Python很陌生。

由于以前对我的问题的回答,我现在已经使用BeatifulSoup成功地从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 个答案:

答案 0 :(得分: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'

如果每年有多行,您必须将每年的值列为一个列表。