最智能的方式来存储大量数据

时间:2014-07-21 23:15:29

标签: python database web-scraping beautifulsoup bigdata

我想通过REST请求访问flickr API并下载大约的元数据。 1张Mio照片(可能更多)。 我想将它们存储在.csv文件中,然后将它们导入MySQL数据库以进行进一步处理

我想知道处理这些大数据最聪明的方法是什么。我不确定的是如何在用Python访问网站后存储它们,将它们传递给.csv文件并从那里传递到数据库。这是一个很大的问号。

现在发生的事情(根据我的理解,请参阅下面的代码)是为dictionary创建photo(每个被调用的网址250个)。这样我最终会得到尽可能多的词典(1000万或更多)。那可能吗? 所有这些dictionaries都将附加到列表中。我可以将那么多字典附加到列表中吗?我想将字典附加到列表的唯一原因是因为从列表(每行一行)到.csv文件的保存似乎更容易。

你应该知道的是,我是编程,python或者其他任何东西的完全初学者。我的职业是完全不同的,我刚开始学习。如果您需要任何进一步的解释,请告诉我们!

#accessing website
list = []
url = "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=5...1b&per_page=250&accuracy=1&has_geo=1&extras=geo,tags,views,description"
soup = BeautifulSoup(urlopen(url)) #soup it up
for data in soup.find_all('photo'):
    dict = {
        "id": data.get('id'),
        "title": data.get('title'),
        "tags": data.get('tags'),
        "latitude": data.get('latitude'),
        "longitude": data.get('longitude'),
    }
print (dict)

list.append(dict)

我正在使用python 3.3。我没有将数据直接传递到db的原因是因为我无法在我的os x 10.6上运行mysql db的python连接器。

非常感谢任何帮助。 谢谢大家!

1 个答案:

答案 0 :(得分:3)

我建议使用SQLite进行原型设计,而不是使用CSV。 SQLite在python中运行良好,但您不必经历设置单独数据库的所有麻烦。

另外,我认为你不想使用BeautifulSoup,因为它听起来并不像你真正想要的那样。听起来您想直接访问REST API。为此,你会想要使用类似的东西 the requests library 还是更好 one of the flickr Python bindings

一旦你启动并运行,我会在循环的每次迭代期间写入数据库,随时保存。这样你就不会使用大量的内存,如果发生了崩溃,你就不会丢失到目前为止所记录的数据。