我正在使用名为 instaloader 的 Instagram api。我正在尝试从数组中的每个配置文件下载 25 张图片。我尝试使用 get_posts
for post in profile.get_posts():
#download posts
L.download_post(post, target=data_path/p_name)
但这会下载图片以及所有评论和元数据。我只想下载图片,因为我正在抓取的 Instagram 帐户有太多评论(无论如何获取评论都不是重点)。
我看到了一个名为 download_pic 的东西,但我不知道如何使用它。我尝试在下面的代码中使用它,并收到一个错误,提示“url 未定义”。
profile_names = ["kyliejenner", "justinbieber", "instagram"]
for p_name in profile_names:
profile = Profile.from_username(L.context, p_name)
L.download_pic(data_path/p_name, url, mtime, filename_suffix=None, _attempt=1)
有人可以向我解释如何使用 download_pic (如果这就是我应该用来下载照片/视频的内容) )也许可以给我发送一个可靠的教程?
不必将
download_pic
用于的用例。
instaloader
本身不提供直接下载特定数量帖子的机制。它会下载帖子中的所有媒体(照片和视频)。
但是,可以修改的代码以仅下载每个个人资料的第一个 25 个帖子,然后在下载后丢弃不必要的元数据。以下是如何操作:
from instaloader import Instaloader, Profile
L = Instaloader()
profile_names = ["kyliejenner", "justinbieber", "instagram"]
for p_name in profile_names:
profile = Profile.from_username(L.context, p_name)
posts = profile.get_posts()
# 下载最多 25 个帖子
for i, post in enumerate(posts):
if i >= 25:
break
L.download_post(post, target=p_name)
# 可选:删除下载的帖子中的元数据和评论
for post in profile.get_posts():
try:
L.post_metadata_txt_pattern = '' # 禁用元数据 .txt 文件的写入
L.post_comments_txt_pattern = '' # 禁用评论 .txt 文件的写入
except Exception as e:
print(f"无法删除 {post.shortcode} 的元数据:{e}")
此代码将执行以下操作:
- 登录到 Instagram: 它使用的凭据登录到 Instagram。
- 迭代个人资料列表: 它会遍历提供的个人资料名称列表。
- 获取帖子: 对于每个个人资料,它都会获取帖子迭代器。
- 下载帖子: 它会迭代前 25 个帖子并下载它们。
- (可选)清理: 此代码还会在下载后删除每个帖子中保存的元数据(.json)和评论(.txt)文件。
如果想要更细粒度的控制以仅下载照片或视频,则需要检查帖子对象并有选择地下载媒体:
for i, post in enumerate(posts):
if i >= 25:
break
if post.is_video:
L.download_post(post, target=f"{p_name}/videos")
else:
L.download_post(post, target=f"{p_name}/photos")
这会将照片和视频分类到帖子所有者名称下的单独文件夹中。
标签:python,web-scraping,instagram From: 57932286