首页 > 编程问答 >如何使用 instaloader 下载特定数量的照片(而不是整个帖子)

如何使用 instaloader 下载特定数量的照片(而不是整个帖子)

时间:2024-07-24 16:53:42浏览次数:14  
标签:python web-scraping instagram

我正在使用名为 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}")

此代码将执行以下操作:

  1. 登录到 Instagram: 它使用的凭据登录到 Instagram。
  2. 迭代个人资料列表: 它会遍历提供的个人资料名称列表。
  3. 获取帖子: 对于每个个人资料,它都会获取帖子迭代器。
  4. 下载帖子: 它会迭代前 25 个帖子并下载它们。
  5. (可选)清理: 此代码还会在下载后删除每个帖子中保存的元数据(.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

相关文章

  • Python 中的工作队列 - 我错过了什么吗?
    这可能会被标记为重复或可能不相关。但我实际上相信这个问题对我和未来缺乏经验的Python开发人员都很重要。由于GIL,用于CPU密集型任务的本地工作队列的概念在Python中至关重要。这方面SE上有明显的答案。使用子进程的方法来绕过缺乏真正的CPU有限并行性的问题。在Pyth......
  • Python ctypes OSError:[WinError 1114]动态链接库(DLL)初始化例程失败
    我试图使用Python中的ctypes库调用C++函数:test.pyfromctypesimport*fromrandomimportrandinttester=cdll.LoadLibrary('./test.dll')print(tester.test(randint(1,100)))test.cpp#include<vector>intcppTest(intnum){std:......
  • Python 的分布式锁管理器
    我有一堆具有多个实例的服务器,这些实例访问的资源对每秒的请求有硬性限制。我需要一种机制来锁定所有正在运行的服务器和实例对此资源的访问。有我在github上找到的一个restful分布式锁管理器:https://github.com/thefab/restful-distributed-lock-manager不幸......
  • 如何在Python中提示self变量的类型
    通常不需要关心Python类成员函数中的self变量,但我正在实现一个装饰器,看起来像defextractor(depends:List[Text]=None,provides:List[Text]=None)->Callable[[ExtractorFunction],Extracto......
  • 将 Python 类型提示限制为元组中的值
    我的方法之一采用status中使用的filter()参数。此参数与定义如下的模型字段相关:STATUS_CHOICES=((1,_("draft")),(2,_("private")),(3,_("published")),)classMyModel(Model):status=models.PositiveSmallIntegerFi......
  • 在python中查找区间数据的中位数
    我正在探索不同的python库,我想知道如何找到分组数据集的近似中值。这里有一个表格供参考。年龄频率1-1012310-203502......
  • 比较Python中的字符串统一特殊字符
    也许我可以使用更好的英语,但我想要的是忽略单词中的重音(和类似的),所以:renè、rené、rene'和rene应该是相同的,所以应该mañana和manana或even-distribuited和evendistribuited,可能还有sho......
  • 如何使用 Python 脚本从客户账单电子邮件中获取订单 ID - WooCommerce API
    我想创建一个python脚本,返回只知道客户的账单电子邮件的订单。我尝试这样做,但返回所有最近的订单:fromwoocommerceimportAPIwcapi=API(url="https://siteexample.com",consumer_key="ck_xxx",consumer_secret="cs_xxx",version="wc/v3")......
  • python基础理论小总结
    1.python语言的特性Python是一门解释型语言,简单清晰,开源免费,跨平台,有大量第三方库辅助开发,支持面向对象与自动垃圾回收,方便与其他编程语言相互调用。Python在数据采集、人工智能、WEB后台开发、自动化运维、测试等方向应用广泛。2.解释型语言和编译型语言的区别执行方式不......
  • python编码规范
    本篇讲的是代码格式化的问题,解决格式化的方法在最下方,不想看内容的,滑到最下方就好了。一、变量的命名规则1.组成:字母、数字、下划线2.不可以以数字开头3.不建议使用下划线开头4.命名需见名知意5.不要与关键字重名。如何查找所有关键字?importkeywordprint(keyword.k......