本文介绍如何使用Python爬取小红数据

一、准备工作

在开始爬取小红书数据之前,需要安装相关的Python库。主要需要安装以下库:

pip install scrapy

此外,还需要安装MongoDB,并启动MongoDB服务。

二、获取小红书Cookie

在使用爬虫爬取小红书数据之前,需要获取用户的Cookie。可以通过登录小红书网站,并使用浏览器开发者工具获取Cookie。

三、编写爬虫代码

接下来,我们来编写爬虫代码。首先,创建一个名为redbook_spider.py的文件,代码如下:

import scrapy
import json
from redbook.items import RedbookItem

class RedbookSpider(scrapy.Spider):
    name = "redbook"
    allowed_domains = ["www.xiaohongshu.com"]
    start_urls = ["https://www.xiaohongshu.com/discovery/item/60bc80330000000001006be3"]

    def start_requests(self):
        headers = {
            "cookie": "***"  # 将***替换成你的Cookie
        }
        for url in self.start_urls:
            yield scrapy.Request(url, headers=headers)

    def parse(self, response):
        item = RedbookItem()
        data = json.loads(response.text)
        item["title"] = data["data"]["title"]
        item["content"] = data["data"]["desc"]
        item["likes"] = data["data"]["likes"]
        item["comments"] = data["data"]["comments_count"]
        item["shares"] = data["data"]["shares_count"]
        yield item

爬虫代码主要包括以下几个部分:

  • 导入相关的库,包括scrapy和json。
  • 定义一个名为RedbookSpider的类,继承自scrapy.Spider。
  • 设置爬虫的名称(name)和允许的域名(allowed_domains),以及爬虫的起始URL(start_urls)。
  • 实现start_requests方法,在请求头中添加Cookie,向起始URL发送请求。
  • 实现parse方法,在响应中解析出需要的数据,包括标题、内容、点赞数、评论数和分享数,并存入RedbookItem对象中。

四、编写数据存储代码

接下来,我们需要将爬取到的数据存储到MongoDB数据库中。创建一个名为mongo_pipeline.py的文件,代码如下:

from pymongo import MongoClient

class MongoPipeline(object):
    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get("MONGO_URI"),
            mongo_db=crawler.settings.get("MONGO_DB")
        )

    def open_spider(self, spider):
        self.client = MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        collection = self.db["redbook"]
        data = {
            "title": item["title"],
            "content": item["content"],
            "likes": item["likes"],
            "comments": item["comments"],
            "shares": item["shares"]
        }
        collection.insert_one(data)
        return item

数据存储代码主要包括以下几个部分:

  • 导入MongoClient。
  • 定义一个名为MongoPipeline的类。
  • 实现__init__方法,初始化MongoDB连接。
  • 实现from_crawler方法,从Settings中获取MongoDB连接参数。
  • 实现open_spider方法,在爬虫启动时打开MongoDB连接。
  • 实现close_spider方法,在爬虫结束时关闭MongoDB连接。
  • 实现process_item方法,将RedbookItem对象中的数据存储到MongoDB数据库中。

五、设置Scrapy配置

最后一步是将爬虫和数据存储代码与Scrapy框架结合起来。在settings.py文件中添加以下配置信息:

ITEM_PIPELINES = {
    "redbook.pipelines.MongoPipeline": 300
}

MONGO_URI = "mongodb://localhost:27017/"
MONGO_DB = "redbook"

主要包括以下几个配置项:

  • ITEM_PIPELINES:设置数据处理流程,此处设置为使用MongoPipeline处理。
  • MONGO_URI:设置MongoDB连接地址。
  • MONGO_DB:设置MongoDB数据库名称。

六、启动爬虫

现在,就可以启动爬虫了。在命令行中进入项目根目录,输入以下命令:

scrapy crawl redbook

等待爬虫完成数据爬取和存储操作即可。