当我们从instagram下载数据时,即使您提供了一个时间窗口(它将跳过较旧的日期,但仍将通过以下命令扫描整个历史记录),它也会扫描帐户的整个帖子:
instaloader --login=username
--password=password
--post-metadata-txt="{likes} likes, {comments} comments."
--post-filter="date_utc >= datetime(2019, 12, 31) and not is_video"
这是非常低效的。我想知道是否有更有效的方法来下载数据?
发布于 2020-02-06 10:46:20
Instaloader的命令行接口并不直接支持这一点,这意味着您必须编写一个小Python脚本才能实现这一点。在在特定期间下载帖子的Instaloader文档中有一个例子。它与你想要达到的目标在以下几点上有所不同:
关键是外接函数,它在遇到与给定条件不匹配的post时结束下载循环。考虑到帖子是最新的--首先,下载循环在下载完所有新的帖子后就会终止。
把这一切结合起来,我们就会得到:
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用户名即可。
https://stackoverflow.com/questions/59853451
复制相似问题