如何将相关的表格数据存储在mongoDB中?

时间:2018-07-13 09:57:06

标签: python mongodb beautifulsoup nosql

我已经从某个网站使用BeautifulSoup抓取了表格数据。 (This is the link for reference)。这是有关单个公司的数据。

它是按照多个列表的形式抓取并获得的:

['Type', 'Audited', 'Audited', 'Audited', 'Audited']
['Period Ending', '31-Mar-18', '31-Mar-17', '31-Mar-16', '31-Mar-15']
['No, of Months', '12', '12', '12', '12'] 
#-----------------------------------------------------------------------#   
['Net Sales', '466,34', '1,479,10', '5,551,24', '10,724,32']
['Other Income', '26,68', '185,81', '132,56', '121,20']
['Interest', '0,00', '0,00', '-286,76', '-361,95']
['Profit before Tax', '-2,482,68', '-1,513,02', '-805,38', '213,97']
['Tax', '75,04', '-0,95', '-9,07', '-73,37']

我对Mongo还是很陌生,我知道数据是如何以文档样式格式存储的。但是我对如何解决这个问题感到困惑。

现在我正在考虑,为每个公司在db中生成一个集合,并按如下方式存储每列的数据:

companydata.insert({'Type':'Audited', 'Period Ending': '31-Mar-18', 'Net 
                                                         Sales':'466,34'})

companydata.insert({'Type':'Audited', 'Period Ending': '31-Mar-17', 'Net 
                                                         Sales':'1,479,10'})

但这几乎不是解决方案,更不用说是一个优雅的解决方案了。必须有更好的方法。

1 个答案:

答案 0 :(得分:1)

对于您提供的数据,我假设列表可以作为列表使用。 您可以使用以下代码:

import pandas as pd
from pymongo import MongoClient

scraped_data = [['Type', 'Audited', 'Audited', 'Audited', 'Audited'],
['Period Ending', '31-Mar-18', '31-Mar-17', '31-Mar-16', '31-Mar-15'],
['No, of Months', '12', '12', '12', '12'],
['Net Sales', '466,34', '1,479,10', '5,551,24', '10,724,32'],
['Other Income', '26,68', '185,81', '132,56', '121,20'],
['Interest', '0,00', '0,00', '-286,76', '-361,95'],
['Profit before Tax', '-2,482,68', '-1,513,02', '-805,38', '213,97'],
['Tax', '75,04', '-0,95', '-9,07', '-73,37']]

conn = MongoClient(host="url/of/mongodb", port=27017)
db = conn["db_name"]
coll = db['collection_name']

columns = [elem[0] for elem in data]

frame_data = [elem[1:] for elem in data]

source = pd.DataFrame(data=frame_data)

transposed = source.T

mapper_dict={}

for i,elem in enumerate(columns):
    mapper_dict.update({i:elem}) 

final_result = transposed.rename(mapper=mapper_dict,axis=1).to_dict(orient="records")

coll.insert_many(final_result)

这将根据您的要求存储数据