存储大量数据的最聪明方法

3
我想使用REST请求访问flickr API,并下载约1百万张照片(可能更多)的元数据。我想将它们存储在一个.csv文件中,然后导入到MySQL数据库进行进一步处理。
我不确定如何处理这样大的数据。我不确定如何在Python中访问网站后将其存储到.csv文件中,再从那里存储到数据库中。这是一个大问题。
现在正在发生的事情(根据下面的代码理解)是为每个照片创建一个字典(每个URL调用250个)。这样,我会得到与照片数量相同的字典(1百万或更多)。这是否可能?所有这些字典都将附加到一个列表中。我可以将这么多字典附加到列表中吗?我希望将字典附加到列表中,因为从列表中逐行保存到.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上运行MySQL数据库的Python连接器。

非常感谢您的帮助。 感谢大家!


使用 .csv 中间人是低效、耗时且棘手的。为什么你的 MySQL Python 驱动程序不工作?我会认为这是你应该首先解决的问题(如果可能的话),而且是一个完全不同的问题。 - jayelm
我曾试图解决问题,想过之后烧掉电脑并跳出窗户。但是现在我还在努力克服困难。 - four-eyes
在这个网站上问那个问题吧 - 你迟早会需要那个MySQL驱动程序的,对吧? - jayelm
我不确定。这给我带来了很多麻烦。如果可以使用SQLite或其他东西,我宁愿用那个做。 - four-eyes
1个回答

3
我建议在原型设计中使用SQLite,而不是与CSV搞在一起。SQLite与Python非常兼容,但您不必费心设置单独的数据库。
此外,我认为您不应该使用BeautifulSoup,因为它似乎并不是您真正想要的爬虫工具。看起来您想直接访问REST API。为此,您需要使用类似于请求库或更好的Flickr Python绑定
一旦您将其启动并运行,我会在每次循环迭代时写入DB,并保存。这样,您就不会使用大量内存,并且如果发生故障,您也不会失去到目前为止所获取的数据。

嘿,感谢你提供的关于flickr python绑定的提示。我之前不知道它们存在!我以为这是网页抓取,因为我调用的网站格式化为XML,我试图从中提取信息?我会看看SQLite。 - four-eyes
我从未使用过flickr API,但看起来你可以使用几种不同的格式。我建议使用JSON。因此,您的请求格式将是REST,响应格式为JSON。 - anderspitman
那我就无法使用bs解析它了。相比XML,JSON有什么更好的地方? - four-eyes
1
当你使用BeautifulSoup解析后,它会变得很容易。我的意思是,在原始格式下,如果你看一个XML文件和同样的数据在JSON中,大多数人更喜欢JSON。请参见这里 - anderspitman
在这个例子中,JSON更容易被人类理解。但是Flickr API提供了漂亮的格式(请参见我给你的链接)。我可能会坚持使用beautifulsoup和XML解析。 - four-eyes
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接