我还有一个关于如何从表中收集数据的问题。这是一个正在进行的项目,之前的答案非常有用,因为我对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)
有没有办法创建变量来提取每年的工资和奖金?
答案 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'
如果每年有多行,您必须将每年的值列为一个列表。