本文主要参考此篇博客,使用Python按坐标查找Flickr照片数据,感谢原博主。
1.申请Flickr的开发密钥,注册登陆Flickr(个人利用QQ邮箱进行了注册登陆)。注册登陆(注意登陆此网站,需要科学上网。)
2.阅读开发者指南,获取API key。
步骤如下:
3.完整代码,注释解释的已经较详尽。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pandas as pd
import requests
import json
import time
import random
import pymysql
import xlrd
import xlwt
#主要的url
api='https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=你的key&text=&min_taken_date=起始时间(格式如:2018-06-30)&max_taken_date=起始时间(格式如:2018-06-30)1&woe_id=所要查询地区的woe_id&extras=date_taken,tags,title,description,geo&per_page=500&format=json&sort=date-taken-asc'
r= requests.get(api)
a = json.loads(r.text[14:-1])
for i in range(a["photos"]["pages"]):#进行翻页,循环获得每页的url
s=requests.get(api+"&page="+str(i))
b=json.loads(s.text[14:-1])#去掉外层的jsonFlickrApi()这几个字符串后解析成json的格式
id=[]#定义获取内容的相关数组
owner=[]
secret=[]
server=[]
farm=[]
datetaken=[]
latitude=[]
longitude=[]
accuracy=[]
place_id=[]
woeid=[]
for i in range(len(b["photos"]["photo"])):#循环获取每页每个照片数据,其中b["photos"]["photo"]为列表,则我们只需按
c = b["photos"]["photo"] #序号获取每个照片数据
id.append(c[i]["id"])#获取到的每个照片数据我为字典类型,然后按需要取得自己想要的内容。
owner.append(c[i]["owner"])
secret.append(c[i]["secret"])
server.append(c[i]["server"])
farm.append(c[i]["farm"])
datetaken.append(c[i]["datetaken"])
latitude.append(c[i]["latitude"])
longitude.append(c[i]["longitude"])
accuracy.append(c[i]["accuracy"])
place_id.append(c[i]["place_id"])
woeid.append(c[i]["woeid"])
print(i, c[i]["id"])#每获取一张照片数据,打印其
time.sleep(random.randint(5, 10))#随机休息5-10秒,防止服务器拒绝访问。
f = xlwt.Workbook() #创建工作簿
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
j=0
for id1,owner1,secret1,server1,farm1,datetaken1,latitude1,longitude1,accuracy1,place_id1,woeid1\
in zip(id,owner,secret,server,farm,datetaken,latitude,longitude,accuracy,place_id,woeid):
print(id1,owner1,secret1,server1,farm1,datetaken1,latitude1,longitude1,accuracy1,place_id1,woeid1)
sheet1.write(j,0,id1);sheet1.write(j,1,owner1);sheet1.write(j,2,secret1);sheet1.write(j,3,server1);sheet1.write(j,4,farm1);sheet1.write(j,5,datetaken1);sheet1.write(j,6,latitude1);sheet1.write(j,7,longitude1);\
sheet1.write(j,8,accuracy1);sheet1.write(j,9,place_id);sheet1.write(j,10,woeid);
j=j+1
f.save(r'路径\flackr_1.xls' )#保存文件
不知之处,请多见谅。欢迎大家一起交流学习。