首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从instaloader下载1周数据

从instaloader下载1周数据
EN

Stack Overflow用户
提问于 2020-01-22 05:58:10
回答 1查看 2.8K关注 0票数 0

当我们从instagram下载数据时,即使您提供了一个时间窗口(它将跳过较旧的日期,但仍将通过以下命令扫描整个历史记录),它也会扫描帐户的整个帖子:

代码语言:javascript
运行
复制
instaloader --login=username
--password=password
--post-metadata-txt="{likes} likes, {comments} comments." 
--post-filter="date_utc >= datetime(2019, 12, 31) and not is_video" 

这是非常低效的。我想知道是否有更有效的方法来下载数据?

EN

回答 1

Stack Overflow用户

发布于 2020-02-06 10:46:20

Instaloader的命令行接口并不直接支持这一点,这意味着您必须编写一个小Python脚本才能实现这一点。在在特定期间下载帖子的Instaloader文档中有一个例子。它与你想要达到的目标在以下几点上有所不同:

  • 使用自定义post_metadata_txt_pattern。为此,实例化Instaloader L= instaloader.Instaloader(post_metadata_txt_pattern="{likes}喜好,{注释}注释。“)
  • 登录: L.load_session_from_file(“用户名”)
  • 加载直到最近的帖子(从日期起没有一个特定的)。这允许一个更简单的循环。还可以通过not is_video进行过滤: (lambda p: p.date_utc > datetime(2019,12,31),post ):如果不是post.is_video: L.download_post(post,'target_directory')

关键是外接函数,它在遇到与给定条件不匹配的post时结束下载循环。考虑到帖子是最新的--首先,下载循环在下载完所有新的帖子后就会终止。

把这一切结合起来,我们就会得到:

代码语言:javascript
运行
复制
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用户名即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59853451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档