Python爬取小红书笔记信息加图片(仅供学习参考)

声明:文章内容仅供学习参考使用,请勿做任何商业行为等非法用途。

  在本文中,我们将详细介绍如何使用Python对小红书的公开数据进行采集。以下代码不仅能够完成从小红书获取笔记信息,还支持解析、清洗和存储数据。希望对从事数据分析与爬虫的朋友有所帮助(附完整代码)。

1. 项目背景

小红书作为内容分享平台,聚集了大量用户生成的高质量内容。为了深入分析其内容的特点,我们需要一种高效的方式来采集公开数据。本项目旨在实现以下目标:

  • 目标一:获取指定关键词的笔记信息。
  • 目标二:解析笔记的标题、内容、点赞数、评论数等信息。
  • 目标三:将爬取结果存储为CSV文件,同时下载相关图片

2. 项目所需工具与依赖

在开发过程中,我们用到了以下工具和库:

  1. Python核心库json, time, random, os, datetime
  2. 第三方库
    • execjs:执行JavaScript代码,生成签名参数。
    • requests:发送HTTP请求,获取小红书的API数据。
    • loguru:记录日志,方便调试。
    • pandas:处理和存储数据为CSV格式。
  3. 安装方式: pip +包名 

3. 核心代码实现

3.1 初始化工作

在程序开始时,我们需要:

  • 初始化CSV文件,确保爬取数据能存储。
  • 创建生成搜索ID的函数,为每次请求生成唯一标识。
img_path = 'result'
output_file_path = "result.csv"

# 初始化 CSV 文件并写入表头
if not os.path.exists(output_file_path):
    with open(output_file_path, mode="w", encoding="utf-8-sig", newline="") as f:
        f.write("note_url,last_update_time,note_id,xsec_token,type,title,text,topics,likes,comments,collects,shares\n")
def base36encode(number, digits='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
    base36 = ""
    while number:
        number, i = divmod(number, 36)
        base36 = digits[i] + base36
    return base36.lower()

def generate_search_id():
    timestamp = int(time.time() * 1000) << 64
    random_value = int(random.uniform(0, 2147483646))
    return base36encode(timestamp + random_value)

3.2 构建请求与生成

我们需要借助execjs执行JavaScript脚本,生成请求的签名参数,以及设置我们的请求参数。

search_data = {
    "keyword": "旅游",
    "page": 1,
    "page_size": 20,
    "search_id": generate_search_id(),
    "sort": "general",
    "note_type": 0
}

url = 'https://edith.xiaohongshu.com/api/sns/web/v1/search/notes'
api_endpoint = '/api/sns/web/v1/search/notes'

headers = {
  'sec-ch-ua': 'Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
  'Content-Type': 'application/json;charset=UTF-8',
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
  'x-s': sign['X-s'],
  'x-t': str(sign['X-t']),
  'X-s-common': sign['X-s-common']
}
 

3.3 数据解析与存储

我们需要解析返回的JSON数据,提取笔记的标题、点赞数、评论数等信息。同时,我们将数据存储为CSV格式。

def parse_data(data):
    items = data.get('data', {}).get('items', [])
    parsed_info = []
    for item in items:
        note = item.get('note_card', {})
        title = note.get('title', '')
        desc = note.get('desc', '')
        topics = [word.strip('#').replace('[话题]', '').strip() for word in desc.split() if '[话题]' in word]
        desc_cleaned = ' '.join([word for word in desc.split() if '[话题]' not in word]).strip()

        interact_info = note.get('interact_info', {})
        liked_count = interact_info.get('liked_count', 0)
        comment_count = interact_info.get('comment_count', 0)
        collected_count = interact_info.get('collected_count', 0)
        share_count = interact_info.get('share_count', 0)

        parsed_info.append({
            '标题': title,
            '内容': desc_cleaned,
            '点赞数': liked_count,
            '评论数': comment_count,
            '收藏数': collected_count,
            '转发数': share_count,
            '话题': topics
        })

    return parsed_info
 

3.4 图片下载

对于每条笔记,我们还需要下载其图片并保存到本地。

output_dir = f"./{img_path}/{note_id}"
os.makedirs(output_dir, exist_ok=True)

# 下载并保存图片
for i, url in enumerate(image_urls):
    image_path = os.path.join(output_dir, f"image_{i + 1}.jpg")
    try:
        response = requests.get(url)
        response.raise_for_status()
        with open(image_path, 'wb') as f:
            f.write(response.content)
        print(f"图片已保存: {image_path}")
    except requests.exceptions.RequestException as e:
        print(f"图片下载失败 {url}: {e}")
 

3.5结果展示:

4. 总结

本项目展示了如何借助Python爬取小红书数据,并完成数据清洗与存储。代码涵盖了从请求生成到图片下载的全流程,具有较高的参考价值。希望大家能从中学到更多实用技巧!觉得小编写的还可以的话,可以三连支持哦

任何问题可咨询:zx_luckfe

爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
### 使用Python编写爬虫程序抓取小红书评论 为了实现这一目标,可以采用多种技术和库组合的方式。以下是具体的方法: #### 1. 准备工作 确保安装必要的第三方库,如`requests`用于发送HTTP请求以及`BeautifulSoup`或`lxml`解析HTML文档结构;对于更复杂的JavaScript渲染页面,则可能需要用到Selenium WebDriver模拟浏览器行为。 ```bash pip install requests beautifulsoup4 lxml selenium ``` #### 2. 发送请求并获取网页源码 利用`requests`模块向指定的小红书帖子URL发起GET请求,并设置合适的headers模仿真实用户的访问习惯以提高成功率[^2]。 ```python import requests url = 'https://www.xiaohongshu.com/discovery/item/{post_id}' headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", } response = requests.get(url.format(post_id='example_post_id'), headers=headers) if response.status_code == 200: html_content = response.text else: print(f"Failed to retrieve page content, status code {response.status_code}") ``` #### 3. 解析响应内容提取所需信息 当面对静态载的数据时可以直接运用正则表达式或者DOM树遍历技术定位到包含评论区的具体标签节点进而读取出纯文本形式的内容片段。 如果遇到动态载的情况(即部分资源由AJAX异步调用填充),那么还需要进一步研究API接口逻辑尝试从中截获原始JSON格式的消息体作为后续处理的基础材料[^4]。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') comments_section = soup.find('div', class_='comment-list') # 假设这是存储评论的地方 for comment in comments_section.find_all('p'): print(comment.get_text()) ``` 需要注意的是,在实际开发过程中应当遵循网站的服务条款和法律法规规定合理合法地采集公开发布的网络信息资源,尊重版权方权益的同时也保护个人隐私安全不受侵犯[^1]。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

才华是浅浅的耐心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值