Python中如何将爬取的图片存于内存直接用Tweepy发推文无需本地下载?
实现方案
完全可以实现无本地文件的流程,核心是用Python标准库io.BytesIO将requests获取的图片二进制数据包装为类文件对象,直接传入Tweepy的媒体上传接口即可,不需要落地到本地存储。
操作步骤
- 用
requests请求目标图片,获取二进制响应内容(即你打印看到的十六进制形式数据,本身就是合法的图片原始数据,不需要额外转码) - 用
BytesIO将二进制数据封装为类文件对象,该对象可以被Tweepy的上传接口直接识别,和读取本地文件返回的对象效果完全一致 - 调用Tweepy媒体上传接口传入内存中的类文件对象,拿到media_id后直接发布推文即可
完整代码示例
import requests import tweepy from io import BytesIO # 替换为自己的Twitter开发者凭证 CONSUMER_KEY = "替换为你的consumer key" CONSUMER_SECRET = "替换为你的consumer secret" ACCESS_TOKEN = "替换为你的access token" ACCESS_TOKEN_SECRET = "替换为你的access token secret" # 初始化Tweepy API客户端(以v1.1版本为例,v2版本仅需调整API调用方法即可) auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) api = tweepy.API(auth) # 爬取图片获取二进制数据 image_url = "替换为你要爬取的图片直链" resp = requests.get(image_url) # 可选:校验请求是否成功 resp.raise_for_status() # 封装为内存类文件对象 in_memory_image = BytesIO(resp.content) # 上传媒体并发布推文 # filename参数仅需后缀匹配实际图片格式,不会生成本地文件,可随意填写前缀 uploaded_media = api.media_upload(filename="temp.jpg", file=in_memory_image) api.update_status(status="替换为你的推文正文内容", media_ids=[uploaded_media.media_id])
注意事项
- 必须取
response.content属性获取二进制数据,不要使用response.text,后者会将二进制数据按文本解码,导致图片损坏 - 若使用Tweepy v2版本,将媒体上传和发推的方法替换为对应v2接口即可,内存文件对象的使用逻辑完全不变
- 流程全程不会生成任何本地临时文件,所有数据都仅在内存中流转
内容的提问来源于stack exchange,提问作者Tamoor Hamid
相关产品推荐
相关产品推荐

