如何将Python Shell中Flickr API返回的照片ID输出为CSV文件
解决方案:提取Flickr照片ID并保存到CSV
你现在的代码只是把原始XML响应转成字符串保存,没有解析其中的photo元素信息。我们可以直接利用Python的XML解析工具提取每个photo标签的id属性,再规范写入CSV文件。下面是修改后的完整代码:
import csv import flickrapi import xml.etree.ElementTree as ET # 替换为你的Flickr API密钥和密钥 api_key='xxxxxxxxxxxxxxxx' api_secret ='xxxxxxxxxxxx' flickr = flickrapi.FlickrAPI(api_key, secret=api_secret) # 优化参数:直接传入正常字符串,flickrapi会自动处理URL编码 r = flickr.photos_search(advanced='1', text='agriculture south africa', has_geo="1", per_page='10') # 解析API返回的XML响应 root = ET.fromstring(ET.tostring(r)) # 提取所有photo元素的id属性 photo_ids = [photo.get('id') for photo in root.findall('.//photo')] # 将ID写入CSV文件 with open('farm_photo_ids.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) # 写入可选表头(方便后续识别列) writer.writerow(['photo_id']) # 逐个写入照片ID for photo_id in photo_ids: writer.writerow([photo_id]) print("照片ID已成功保存到farm_photo_ids.csv")
关键修改说明:
- 参数优化:
text参数直接传入正常英文短语'agriculture south africa',flickrapi库会自动处理URL编码,无需手动写%20,代码更易读维护。 - XML解析:用
ET.fromstring()把API响应转换成可遍历的XML元素,再通过findall('.//photo')定位所有photo标签,最后用get('id')提取目标属性。 - CSV规范写入:使用Python内置的
csv.writer确保输出符合CSV格式,添加可选表头让文件结构更清晰,同时把输出文件格式从.docx改成.csv(docx是文档格式,不适合存储结构化表格数据)。
补充提示:
如果需要获取全部分页的照片ID,可以先从XML响应的photos标签里提取pages属性(总页数),然后循环调用photos_search并传入page参数(比如page=2、page=3),直到获取完所有页面的结果。
内容的提问来源于stack exchange,提问作者Himanshu Krothwal
相关产品推荐
相关产品推荐

