存储大量数据的最佳方法
我想通过REST请求访问flickr的API,并下载大约100万张照片的元数据(可能更多)。我想把这些数据存储在一个.csv文件中,然后再导入到MySQL数据库中进行进一步处理。
我在想,处理这么大数据的最聪明方法是什么。我不太确定的是,如何在Python中访问网站后存储这些数据,把它们传递到.csv文件,然后再从那里导入到数据库。这是我心中的一个大问号。
现在发生的事情是(为了我能理解,见下面的代码),每张照片
都会创建一个字典
(每次调用的URL返回250张)。这样的话,我最终会有和照片一样多的字典(100万或更多)。这样做可行吗?所有这些字典
会被添加到一个列表中。我能把这么多字典添加到一个列表里吗?我想把字典添加到列表中的唯一原因是,这样从列表中逐行保存到.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。我不直接把数据传入数据库的原因是,我在我的OS X 10.6上无法运行Python的MySQL连接器。
任何帮助都非常感谢。谢谢大家!
1 个回答
3
我建议你用SQLite来做原型,而不是去搞CSV文件。SQLite和Python配合得很好,而且你不需要麻烦地去设置一个单独的数据库。
另外,我觉得你不需要用BeautifulSoup,因为听起来你并不想做网页抓取。你似乎是想直接访问REST API。为此,你可以使用类似于 requests库 的东西,或者更好的是 Flickr的Python绑定。
一旦你把这些搞定了,我建议你在每次循环的时候就把数据写入数据库,边做边保存。这样你就不会占用太多内存,而且如果程序崩了,你也不会丢失已经获取的数据。