首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Beautifulsoup获取数据并将其存储到字典Python中

使用Beautifulsoup获取数据并将其存储到字典Python中
EN

Stack Overflow用户
提问于 2018-06-04 04:10:51
回答 1查看 220关注 0票数 1

我正在尝试使用Beautifulsoap获取一个html文件。稍后,我想通过创建JSON格式的REST API来显示数据。REST API运行良好。但是,我面临着以预期的格式组织数据的问题。因此,我附加了只处理获取的数据的Python代码。

HTML :-

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
<style>

table, th, td {
    border: 1px solid black;
}
</style>
</head>

<body>

<table>
  <thead>
    <tr>
      <th>Date</th>
      <th>Savings</th>
      <th>Expenses</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>January</td>
      <td>$100</td>
      <td>$200</td>
    </tr>
    <tr>
      <td>February</td>
      <td>$80</td>
      <td>$300</td>
    </tr>
  </tbody>
</table>

</body>
</html>


My expected output should be :- 

{
    "data":
        "Savings" : {
             "Janunary" : $100,
             "February" : $80
         },    
        "Expenses" : {
             "January" : $200,
             "February" : $300
        }
}

我写的Python代码,

代码语言:javascript
复制
bs_content = BeautifulSoup(ra.body, 'html.parser') #this parse the whole html

headers = []
result = defaultdict(dict)

table = bs_content.find_all('table')

if not headers:
    for th in table.find('thead').findAll('th'):
        text = th.text
        headers.append(text)

for tr in table.find('tbody').findAll('tr'):
    tds = tr.findAll('td')
    for header, td in zip(headers, tds):
        value = td.text.strip()

        result[header] = value

return result

所以,result应该像这样更新,

代码语言:javascript
复制
result['savings']['January'] = $100,
result['savings']['February'] = $80,
result['Expenses']['January'] = $200,
result['Expenses']['February'] = $300
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 05:00:17

这个解决方案应该适用于只有2个月以上的表。

代码语言:javascript
复制
soup = BeautifulSoup(ra.body, 'lxml')
table = soup.select_one('table')
headers = [header.text for header in table.select('th')][1:]
result = {headers[0]: {}, headers[1]: {}}
for row in table.select('tbody tr'):
    data = [value.text for value in row.select('td')]
    result[headers[0]][data[0]] = data[1]
    result[headers[1]][data[0]] = data[2]
return result
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50670548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档