从列表中打开URL并写入数据

时间:2014-07-07 14:35:05

标签: python url screen-scraping bigdata urllib

我正在编写一个代码,该代码会创建多个URL,这些URL也会存储在列表中。 下一步是打开每个URL,下载数据(只有文本,格式为XML或JSON)并保存下载的数据。

由于在线社区,我的代码运行良好。它停留在打开URL并下载数据的位置。我希望url.request使用我创建的url遍历列表并单独调用每个url,打开它,显示它并继续下一个。但它只是创建网址的循环,但没有。没有反馈,没有。

import urllib.request

.... some calculations for llong and llat ....


#create the URLs and store in list
urls = []
for lat,long,lat1,long1 in (zip(llat, llong,llat[1:],llong[1:])):
    for pages in range (1,17):
        print ("https://api.flickr.com/services/rest/?method=flickr.photos.search&format=json&api_key=5.b&nojsoncallback=1&page={}&per_page=250&bbox={},{},{},{}&accuracy=1&has_geo=1&extras=geo,tags,views,description".format(pages,long,lat,long1,lat1))
print (urls)


#accessing the website 
data = []
for amounts in urls:
    response = urllib.request.urlopen(urls)
    flickrapi = data.read()
    data.append(+flickrapi)
    data.close()
    print (data)

我做错了什么??

下一步是下载数据并将其保存到文件或其他地方以便进一步处理。 由于我会收到很多数据,比如很多很多,我不确定将它存储到R(或者可能是Python? - 需要对它进行一些统计工作)的最佳方法是什么。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您没有将生成的网址附加到网址列表,而是打印它们:

print ("https://api.flickr.com/services/rest/?method=flickr.photos.search&format=json&api_key=5.b&nojsoncallback=1&page={}&per_page=250&bbox={},{},{},{}&accuracy=1&has_geo=1&extras=geo,tags,views,description".format(pages,long,lat,long1,lat1))

应该是:

urls.append("https://api.flickr.com/services/rest/?method=flickr.photos.search&format=json&api_key=5.b&nojsoncallback=1&page={}&per_page=250&bbox={},{},{},{}&accuracy=1&has_geo=1&extras=geo,tags,views,description".format(pages,long,lat,long1,lat1))

然后您可以按计划迭代网址。

但是您将在以下行遇到错误:

response = urllib.request.urlopen(urls)

在这里,您将整个网址集提供给urlopen,您应该在这里输入一个名为amounts的网址中的网址,如下所示:

response = urllib.request.urlopen(amounts)