Instaloader 的命令行界面不直接支持这一点,这意味着您必须编写一个小 Python 脚本来实现这一点。Instaloader 文档中有一个示例,用于在特定时间段内下载帖子。它与您想要实现的目标仅在以下几点不同:
使用自定义post_metadata_txt_pattern。为此,请实例化 Instaloader
L = instaloader.Instaloader(post_metadata_txt_pattern="{likes} likes, {comments} comments.")
登录:
L.load_session_from_file('username')
加载到最新的帖子(没有特定的SINCE日期)。这允许更简单的循环。也按not is_video过滤:
for post in takewhile(lambda p: p.date_utc > datetime(2019, 12, 31), posts):
if not post.is_video:
L.download_post(post, 'target_directory')
关键是takewhile函数,它会在遇到不符合给定条件的帖子时结束下载循环。考虑到帖子是最新的,下载循环会在所有足够新的帖子被下载后立即终止。
把它们放在一起,我们得到:
from datetime import datetime
from itertools import takewhile
import instaloader
L = instaloader.Instaloader(post_metadata_txt_pattern="{likes} likes, {comments} comments.")
L.load_session_from_file('username')
posts = L.get_hashtag_posts('hashtag')
# or
# posts = instaloader.Profile.from_username(L.context, 'profile').get_posts()
for post in takewhile(lambda p: p.date_utc > datetime(2019, 12, 31), posts):
if not post.is_video:
L.download_post(post, 'target_directory')
将其写入文件,例如downloader.py并使用python downloader.py执行它。对load_session_from_file的调用假定已经保存了一个 Instaloader 会话,要获得一个,只需在执行代码片段之前调用instaloader -l username即可。