百度相册提取器(Python)

本文介绍如何使用Python脚本批量下载百度相册内的图片,包括获取JSON数据、解析图片地址并保存至本地的过程。适用于需要自动化下载大量图片场景。

使用方法:

例(随便从首页找的):http://xiangce.baidu.com/picture/album/list/5852a22d51d6450ed82bf35f49d2e519df867ab6

提取后半部分:5852a22d51d6450ed82bf35f49d2e519df867ab6

import re
import urllib.request
import os
from time import sleep

#从url下载图片,保存至fileAddress
def savePicture(url,fileAddress): 	
	conn = urllib.request.urlopen(url)  
	f = open(fileAddress,'wb')  
	f.write(conn.read())  
	f.close()  

#get url,获取json,返回string
def getJson(album_sign,startFrom,size):
	url = "http://xiangce.baidu.com/picture/album/list/%s?view_type=list&size=%d&pn=%d&format=json&type=default&_=1432740977640" %(album_sign,size,startFrom)
	conn = urllib.request.urlopen(url)
	return conn.read().decode("utf-8");

#相册预读,查看照片数量(因为百度最多一次只能返回200个)
def getAllJson(album_sign):
	str = getJson(album_sign,0,1)
	reObj = re.compile("(?<=\"picture_num\":)\\d+"); #提取图片数量
	size = reObj.findall(str)
	json = "" #数据
	startFrom = 0
	while startFrom < int(size[0]):
		json += getJson(album_sign,startFrom,200) #0~199;200~399;……
		startFrom += 200
	return json
	
def main(album_sign,saveFolder):
	#从数据库里面提取地址
	json = getAllJson(album_sign)
	reObj1 = re.compile('(?<=\"pic_big_src\":\").*?(?=\")')
	result = reObj1.findall(json)
	#文件夹是否存在
	if(not os.path.exists(saveFolder)):
		os.makedirs(saveFolder)
	#进度条?
	index = 0
	#通过地址提取图片
	for str in result:
		reObj2 = re.compile(r"\w*?\.jpg") #提取文件名
		name = reObj2.findall(str)
		fileAddress = saveFolder + name[0]
		url = str.replace("\/","/")
		savePicture(url,fileAddress)
		print("文件%d:%s" % (index,fileAddress))
		index += 1
		sleep(0.1)
	print("搞定!")

main("5852a22d51d6450ed82bf35f49d2e519df867ab6","E:\\图片")

代码中最后一行main函数,第一个参数是album_sign(就是字母和数字的组合),第二个参数是保存的本地位置


流程:

利用album_sign从百度获取json,分析json提取原始图片地址,下载保存到本地

注:每次get最多只能获取200条,如果相册有500张图片,那么至少要3次。所以,getAllJson方法先获取图片数量,然后while循环,全部储存到一个字符串内。


正则表达式:

(?<="picture_num":)\d+ 用来提取照片数量,比如 "picture_num":500 获取500

(?<="pic_big_src":").*?(?=") 用来提取照片地址,比如"pic_big_src":"http://xiangce.baidu.com/1.jpg" 获取http://xiangce.baidu.com/1.jpg

"\w*?\.jpg" 提取照片文件名,比如http://xiangce.baidu.com/1.jpg 获取1.jpg

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值