如何使用Python批量下载小红书图片

你是否曾经浏览小红书(Red)上的一篇精彩笔记,想要将其中的图片保存到本地?或者你想批量下载某个小红书用户的所有图片?不用担心,本教程将向你展示如何使用Python编写一个简单但功能强大的脚本,来实现批量下载小红书图片的目标。

1. 背景故事

小红书是一个充满灵感和创意的社交平台,用户可以在上面分享各种生活笔记,包括美食、时尚、旅行等等。这些笔记通常包含大量高质量的图片,有时你可能会希望将这些图片保存到本地,以便离线查看或做其他用途。但手动下载每张图片会非常费时费力,因此我们编写了这个Python脚本,来帮助你自动完成这项任务。

2. 准备工作

在开始之前,确保你已经安装了Python,并安装了以下必要的库:requestsBeautifulSoup。你可以使用以下命令来安装它们:

pip install requests beautifulsoup4

3. 编写Python脚本

下面是我们编写的Python脚本,它可以根据你的选择,批量下载小红书上的图片。

import requests
from bs4 import BeautifulSoup
import os
import re
import json

# 创建文件夹
def mkdir(path):
    folder = os.path.exists(path)
    if not folder:
        print("--- 创建新的文件夹? ---")
        os.makedirs(path)
        print("--- OK ? ---")
    else:
        print("--- ⚠️ 文件夹已存在! ---")

# 发起网络请求,获取网页源码
def fetchUrl(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36',
    }
    r = requests.get(url, headers=headers)
    return r.text

# 解析html文本,提取无水印图片的url
def parsing_link(html):
    soup = BeautifulSoup(html, 'html.parser')
    script = soup.find('script', string=re.compile('window\.__INITIAL_STATE__'))
    test = re.split(r'=', script.string)
    string = test[1].replace('undefined', 'null')
    result = json.loads(string, strict=False)
    imageList = result.get('note', {}).get('note', {}).get('imageList')
    title = result.get('note', {}).get('note', {}).get('title')
    if title == '':
        title = result.get('note', {}).get('note', {}).get('desc')
    title = sanitize_folder_name(title)
    if imageList and title:
        print('标题:', title)
        print('开始下载啦!?')

        file = os.path.dirname(__file__) + '/image/' + title
        mkdir(file)

        for i in imageList:
            picUrl = f"https://sns-img-qc.xhscdn.com/{i['traceId']}"
            yield picUrl, i['traceId'], title

# 下载图片
def download(url, filename, folder):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36',
    }
    try:
        r = requests.get(url, headers=headers)
        content_type = r.headers.get('Content-Type')
        image_format = content_type.split('/')[-1]

        if image_format not in ['jpeg', 'png', 'gif', 'bmp']:
            image_format = 'jpeg'

        with open(f'image/{folder}/{filename}.{image_format}', 'wb') as v:
            v.write(r.content)
    except Exception as e:
        print('图片下载错误!')

# 修正文件夹命名
def sanitize_folder_name(name: str) -> str:
    name = re.sub(r'[<>:"/\\|?*]', '_', name)
    name = name.strip()
    if len(name) > 255:
        name = name[:255]
    return name

# 主循环
def roopLink(url):
    html = fetchUrl(url)
    traceId = 0
    for url, _, title in parsing_link(html):
        print(f"download image {url}")
        download(url, traceId, title)
        traceId += 1

if __name__ == '__main__':
    choice = input("请输入选项 (1: 循环获取链接; 2: 获取文本地址并下载): ")
    if choice == '1':
        while True:
            links = input("请输入小红书的链接 (输入 'end' 结束程序): ")
            if links == 'end':
                break
            roopLink(links)
    elif choice == '2':
        file_path = input("请输入文本文件地址(回车默认是1.txt): ")
        if file_path == '':
            file_path = '1.txt'
        with open(file_path, 'r') as f:
            links = f.read().splitlines()
        for link in links:
            roopLink(link)

    print("下载完成啦!?")

4. 使用方法

使用这个脚本非常简单,只需按照以下步骤操作:

  1. 运行脚本并选择你的操作类型(1或2)。
  2. 如果选择了1,输入小红书的链接并按照提示操作。
  3. 如果选择了2,输入包含小红书链接的文本文件的地址,并按照提示操作。
  4. 所有图片将会下载到脚本所在目录下的image文件夹中。

现在,你可以轻松地批量下载小红书图片了!

5. 安全性考虑

请注意,使用这个脚本下载图片时,要遵守小红书的使用规定和法律法规。不要滥用脚本来侵犯他人的隐私或侵

权。

希望这个教程对你有所帮助,让你更方便地管理小红书上的精彩图片!

免责声明:本教程仅用于教育和学习目的。请遵守相关网站的使用规定和法律法规,谨慎使用网络爬虫技术。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:如何使用Python批量下载小红书图片

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年9月20日
下一篇 2023年9月21日

相关推荐

  • 探索圆周率:从数学常数到计算机编程

    圆周率(π)是一种神秘而令人着迷的数学常数,它一直以来都吸引着数学家、科学家和计算机程序员。这个常数代表着一个圆的周长与直径的比值,但它的价值却是一个无限不循环的小数。在本教程中,我们将深入探讨圆周率…

    2023年10月21日
    00
  • 记录一次中药数据库的捣鼓

    在信息化、大数据的今天,手工操作逐渐显得笨拙和低效。今天,我要分享一个用Python自动获取和整理中药数据库的实践过程,以示如何通过编程实现工作自动化。 找寻数据源:机遇与挑战并存 解决任何问题的第一步总是…

    2023年9月3日
    00
  • 揭秘ChatDoc、ChatPDF、和对网址进行总结的实现

    在数字时代,人们不断追求更高效的方式来获取信息和处理数据。ChatDoc和ChatPDF等工具的出现,使得对网页内容进行快速总结和转换成文档更加便捷。但是,这些神奇的工具是如何实现的呢?本文将揭秘它们的背后工作原…

    2023年10月27日
    00
  • 如何使用Python将彩票数据存入数据库

    在数据科学和分析领域,获取和存储数据是至关重要的一步。本教程将介绍如何使用Python编程,从一个网站获取双色球(SSQ)彩票的历史数据,并将这些数据存入MySQL数据库。这个教程将向您展示如何使用Python的Request…

    2023年11月26日
    00
  • 从进程池到线程池:实现高效图片下载

    在数字时代,我们每天都能够轻松访问到各种各样的图片,不论是美景、艺术品还是有趣的表情包。然而,有时候我们需要大量的图片数据,例如用于机器学习的训练集或者简单的个人收藏。在这种情况下,如何高效地获取和…

    2023年10月14日
    00
  • 如何使用Python获取知乎热榜和推荐内容

    有没有想过如何获取知乎上的热门话题和推荐内容?知乎是一个汇聚了各种各样有趣问题和高质量回答的社交平台,获取其中的热门内容对于信息追踪和知识获取都非常有帮助。在这篇教程中,我们将使用Python来获取知乎的…

    2023年10月19日
    00
  • 动态规划解决零钱兑换问题:编程与算法详解

    在我们日常生活中,经常会遇到需要用最少的货币数量支付特定金额的场景,比如在超市结账时。这看似简单的任务,实际上蕴含了计算机科学中的一个经典问题——零钱兑换问题。这个问题不仅考验我们的逻辑思维能力,还是…

    2023年11月25日
    00
  • 解决未定义数组键问题:我的个人经历与技巧分享

    在这篇文章中,我将分享我如何面对和解决编程中遇到的“未定义数组键”问题,以及我采用的具体技巧和方法。通过这次经历,我希望能帮助读者更好地理解和避免此类问题。 作为一名专注于人工智能领域的开发者,我经常需…

    2024年3月22日
    00
  • 深入理解Scrapy中的XPath:解锁网页数据抓取的力量

    想象一下,你正在做市场研究,需要从多个网站收集大量数据。传统的方法可能是手动浏览每个网页,复制粘贴信息,但这将耗费大量时间和精力。现在,想象一下有一种神奇的工具,可以自动化这个过程,从网页中精确地提…

    2023年9月25日
    00
  • 个人发展:如何利用Python和人工智能开启职业新征程

    曾经有一位名叫小明的年轻人,他一直对人工智能(AI)和编程充满了浓厚的兴趣。然而,他一直在犹豫不决,不知道如何将这些兴趣转化为实际的职业发展。直到有一天,他听说了Python编程语言和人工智能的结合可以开启…

    2023年10月21日
    00