自学内容网 自学内容网

【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程

前言

在大数据和网络爬虫领域,Scrapy 是一个功能强大且广泛使用的开源爬虫框架。它能够帮助我们快速地构建爬虫项目,并高效地从各种网站中提取数据。在本篇文章中,我将带大家从零开始使用 Scrapy 框架,构建一个简单的爬虫项目,爬取 豆瓣电影 Top 250 的电影信息。

Scrapy 官方文档:Scrapy Documentation

豆瓣电影 Top 250 :豆瓣电影 Top 250

本文的爬虫项目配置如下:

  • 系统:Windows
  • Python 版本:3.8.6
  • 开发环境:PyCharm

如果你使用的是其他系统或 IDE,也可以按照本文的步骤进行操作,只需根据自己的环境做出相应调整即可。

环境准备

1. 安装 Python

在使用 Scrapy 之前,确保你已经安装了 Python。如果没有,请先安装 Python 3.6+ 版本。你可以访问 Python 官方网站 下载并安装最新版的 Python。

安装完成后,打开命令行窗口,输入以下命令检查是否安装成功:

python --version
2. 安装 Scrapy

确认安装了 Python 后,你可以使用 pip 安装 Scrapy。pip 是 Python 的包管理工具,它能够帮助我们安装各种第三方库。

在命令行窗口输入以下命令:

pip install scrapy

安装完成后,可以通过以下命令检查 Scrapy 是否安装成功:

scrapy version
3. 安装 Anaconda(可选)

如果你更喜欢使用虚拟环境管理工具,可以选择安装 Anaconda,它能够帮助你更方便地管理项目中的 Python 依赖。你可以从 Anaconda 官方网站 下载并安装 Anaconda。

使用 Anaconda 创建一个虚拟环境,并激活环境后再安装 Scrapy:

conda create -n scrapy_env python=3.8
conda activate scrapy_env
pip install scrapy
4. 创建 Scrapy 项目

安装 Scrapy 完成后,我们可以开始创建一个新的 Scrapy 项目。在终端中,进入你希望存放项目的目录,然后运行以下命令:

scrapy startproject DoubanProject

这将创建一个名为 DoubanProject 的 Scrapy 项目,其中包含 Scrapy 默认的文件夹和文件结构:

DoubanProject/
├── DoubanProject/
│   ├── __init__.py
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
└── spiders/
    ├── __init__.py
    └── douban.py

爬虫的编写

1. 编写 items.py

items.py 文件中定义我们要爬取的数据字段。豆瓣 Top 250 页面包含电影的排名、名称、简介、评分、评价人数和电影海报链接等信息,因此我们需要定义相应的数据字段。

import scrapy

class DoubanprojectItem(scrapy.Item):
    rank = scrapy.Field()  # 电影排名
    movie_name = scrapy.Field()  # 电影名称
    movie_introduction = scrapy.Field()  # 电影简介
    picture = scrapy.Field()  # 电影海报链接
    movie_rating = scrapy.Field()  # 电影评分
    evaluators = scrapy.Field()  # 评价人数
2. 编写爬虫文件 douban.py

spiders 目录下,我们需要创建一个爬虫文件 douban.py 来定义具体的爬虫逻辑。Scrapy 通过 Spider 类来定义爬虫,它包含了爬虫的名称、允许访问的域名、起始 URL,以及如何解析和处理抓取到的数据。

2.1 定义爬虫文件

首先,在 spiders 目录下创建 douban.py 文件,编写代码如下:

import scrapy
from scrapy import Selector, Request
from ..items import DoubanprojectItem  # 导入之前定义的 item 数据结构
2.2 创建 DoubanSpider

douban.py 文件中定义一个爬虫类 DoubanSpider,继承自 scrapy.Spidername 是爬虫的名字,用于在命令行中启动爬虫,allowed_domains 是允许爬虫访问的域名,start_urls 是爬虫开始爬取的页面 URL 列表。

class DoubanSpider(scrapy.Spider):
    name = "douban"  # 爬虫的唯一名称
    allowed_domains = ["movie.douban.com"]  # 允许的域名范围
    start_urls = ["https://movie.douban.com/top250"]  # 爬虫从这个 URL 开始抓取
2.3 编写 parse 方法

parse 是 Scrapy 中的默认解析方法,爬虫启动后,Scrapy 会自动下载 start_urls 中的页面,并将响应传递给这个方法。在这里,我们会使用 XPath 来提取电影信息。

  1. 首先使用 Selector 对页面进行解析。

  2. 然后使用 XPath 提取页面中所有电影的列表,遍历每部电影并提取需要的字段信息,如电影的排名、名称、简介、评分等。

  3. 最后通过 yield 返回提取到的数据。

    def parse(self, response):
        sel = Selector(response)  # 使用 Selector 解析 HTML 响应
        movie_items = sel.xpath('//div[@class="article"]//ol[@class="grid_view"]/li')  # 提取所有电影条目
    
2.4 提取电影信息

接下来,我们需要提取每部电影的具体信息。我们定义了 DoubanprojectItem 来存储每部电影的字段信息,并通过 XPath 提取页面中的对应字段。

        for movie in movie_items:
            item = DoubanprojectItem()  # 创建 DoubanprojectItem 实例
            # 提取电影的各个字段
            item['rank'] = movie.xpath('.//div[@class="pic"]/em/text()').extract_first()  # 电影排名
            item['movie_name'] = movie.xpath('.//div[@class="hd"]//span[1]/text()').extract_first()  # 电影名称
            item['movie_introduction'] = movie.xpath('.//div[@class="bd"]//span[@class="inq"]/text()').extract_first(default='无')  # 电影简介
            item['picture'] = movie.xpath('.//div[@class="pic"]/a/img/@src').extract_first()  # 电影海报链接
            item['movie_rating'] = movie.xpath('.//div[@class="star"]/span[2]/text()').extract_first()  # 电影评分
            item['evaluators'] = movie.xpath('.//div[@class="star"]/span[4]/text()').extract_first()  # 评价人数
            # 返回提取到的 item
            yield item
2.5 处理分页

豆瓣电影的 Top 250 列表分成了 10 页,每页显示 25 部电影。在爬取完第一页后,我们需要继续爬取剩下的页面。通过提取页面底部的“下一页”链接,来实现分页抓取。

        # 获取下一页的链接
        next_link = sel.xpath('//span[@class="next"]/link/@href').extract_first()
        if next_link:
            # 如果存在下一页链接,构造请求并递归调用 parse 方法
            yield Request(url=response.urljoin(next_link), callback=self.parse)
2.6 完整的 douban.py 文件

完整的爬虫文件 douban.py 如下:

import scrapy
from scrapy import Selector, Request
from ..items import DoubanprojectItem  # 导入 item 数据结构

class DoubanSpider(scrapy.Spider):
    name = "douban"  # 爬虫的名称
    allowed_domains = ["movie.douban.com"]  # 允许的域名
    start_urls = ["https://movie.douban.com/top250"]  # 爬虫起始页面

    def parse(self, response):
        sel = Selector(response)  # 解析页面
        movie_items = sel.xpath('//div[@class="article"]//ol[@class="grid_view"]/li')  # 获取电影条目列表

        for movie in movie_items:
            item = DoubanprojectItem()  # 创建 item 实例
            # 提取电影信息
            item['rank'] = movie.xpath('.//div[@class="pic"]/em/text()').extract_first()
            item['movie_name'] = movie.xpath('.//div[@class="hd"]//span[1]/text()').extract_first()
            item['movie_introduction'] = movie.xpath('.//div[@class="bd"]//span[@class="inq"]/text()').extract_first(default='无')
            item['picture'] = movie.xpath('.//div[@class="pic"]/a/img/@src').extract_first()
            item['movie_rating'] = movie.xpath('.//div[@class="star"]/span[2]/text()').extract_first()
            item['evaluators'] = movie.xpath('.//div[@class="star"]/span[4]/text()').extract_first()
            
            yield item  # 返回 item

        # 处理分页
        next_link = sel.xpath('//span[@class="next"]/link/@href').extract_first()
        if next_link:
            yield Request(url=response.urljoin(next_link), callback=self.parse)

详细解释:
  • Spider 类定义name 确定了爬虫的名字,allowed_domains 确定了允许的域名,start_urls 列出了爬虫的起始页面。
  • parse 方法:通过 Selector 解析页面,使用 XPath 提取电影的详细信息并存储到 DoubanprojectItem 对象中。
  • 分页处理:通过检查是否有下一页链接,使用 Request 对象进行递归抓取,直到所有页面的数据都被抓取。

3. 编写 pipelines.py

在 Scrapy 中,pipelines.py 文件用于处理爬取到的数据。这里,我们要将抓取到的豆瓣电影数据保存到 Excel 文件中。为了实现这一点,我们会使用 Python 的 openpyxl 库,它是一个专门用于处理 Excel 文件的库。

3.1 安装 openpyxl

首先,确保你已经安装了 openpyxl,如果没有安装,可以通过 pip 进行安装:

pip install openpyxl
3.2 创建 DoubanprojectPipeline

DoubanprojectPipeline 类将处理从爬虫传递过来的数据,并将这些数据写入 Excel 文件。Scrapy 中的 Pipeline 类通常有三个方法:open_spiderprocess_itemclose_spider

  • open_spider:当爬虫启动时调用,一般用于初始化一些资源。
  • process_item:每当爬虫抓取到一个数据项(item)时,都会调用此方法来处理该项数据。
  • close_spider:当爬虫结束时调用,用于保存文件或释放资源。

以下是详细的代码解释:

import openpyxl  # 导入处理 Excel 文件的库
from .items import DoubanprojectItem  # 导入定义好的 Item 数据结构

class DoubanprojectPipeline:
    def __init__(self):
        """
        初始化方法,在爬虫开始时被调用,初始化 Excel 工作簿和表格。
        """
        self.wb = openpyxl.Workbook()  # 创建一个新的 Excel 工作簿
        self.sheet = self.wb.active  # 获取工作簿的活动表格
        self.sheet.title = '豆瓣电影Top250'  # 设置表格的标题
        # 在第一行写入表头,表示每列的意义
        self.sheet.append(('电影排名', '电影名称', '电影简介', '电影海报', '电影评分', '观影人数'))

    def open_spider(self, spider):
        """
        当爬虫被启动时调用该方法。
        :param spider: 当前运行的爬虫对象
        """
        print('开始爬虫...')  # 可以选择在控制台输出提示信息,表示爬虫开始运行

    def process_item(self, item: DoubanprojectItem, spider):
        """
        处理每个爬取到的数据项(item),将其保存到 Excel 文件中。
        :param item: 爬取到的电影数据
        :param spider: 当前运行的爬虫对象
        :return: 返回处理后的 item
        """
        # 将每部电影的信息以一行的形式写入 Excel
        self.sheet.append((
            item['rank'],  # 电影排名
            item['movie_name'],  # 电影名称
            item['movie_introduction'],  # 电影简介
            item['picture'],  # 电影海报链接
            item['movie_rating'],  # 电影评分
            item['evaluators']  # 观影人数
        ))
        # 返回 item 是 Scrapy Pipeline 的标准流程,方便后续可能有其他 pipeline 处理
        return item

    def close_spider(self, spider):
        """
        当爬虫关闭时调用,保存 Excel 文件。
        :param spider: 当前运行的爬虫对象
        """
        print("爬虫结束....")  # 输出爬虫结束的提示
        # 保存 Excel 文件到指定路径
        self.wb.save('豆瓣电影数据.xlsx')
3.3 详细解释代码
  1. __init__ 方法

    • 该方法在爬虫启动时初始化,创建一个 Excel 工作簿 (self.wb),并获取活动表 (self.sheet)。
    • 使用 self.sheet.title 为表格设置一个标题,在这里我们将其命名为 “豆瓣电影Top250”。
    • 使用 self.sheet.append() 将表头写入 Excel 文件,表头包括 “电影排名”、“电影名称”、“电影简介”、“电影海报”、“电影评分” 和 “观影人数”。
  2. open_spider 方法

    • 在爬虫启动时执行,可以在这里做一些初始化操作,比如在控制台输出一个提示信息“开始爬虫…”。
  3. process_item 方法

    • 每次爬虫抓取到一个新的电影数据项(item)时,Scrapy 会自动调用此方法来处理数据。
    • self.sheet.append() 将数据项中的字段值(如排名、名称、简介等)写入 Excel 文件中的一行。
    • 返回 item 是 Scrapy Pipeline 的标准流程,以便数据继续传递给其他可能的 pipeline。
  4. close_spider 方法

    • 当爬虫结束时,Scrapy 会调用此方法来进行收尾工作。
    • 这里使用 self.wb.save('豆瓣电影数据.xlsx') 将数据保存到 豆瓣电影数据.xlsx 文件中,并在控制台输出“爬虫结束…”提示。
3.4 设置 pipelines

为了让 Scrapy 使用我们的 DoubanprojectPipeline,我们需要在 settings.py 中启用该 Pipeline。

打开 settings.py 文件,并添加以下代码:

# 启用我们定义的 Pipeline
ITEM_PIPELINES = {
   "DoubanProject.pipelines.DoubanprojectPipeline": 300,
}

300 是该 Pipeline 的优先级,数字越小优先级越高。这里我们设置为 300,表示优先处理该 Pipeline。

通过这个 pipelines.py 文件,爬取到的豆瓣电影数据将会被逐条写入 Excel 文件。当爬虫结束时,完整的 Excel 文件就已经生成好了,里面包含了所有抓取到的电影信息。


4. 配置 settings.py

为了确保爬虫能够顺利地抓取豆瓣的电影数据并避免触发反爬机制,我们需要对 settings.py 文件进行配置。settings.py 文件是 Scrapy 项目的全局配置文件,所有的爬虫行为(如请求频率、请求头信息、爬虫管道等)都在这里进行设置。下面我们详细解释如何配置 settings.py

4.1 配置 BOT_NAME

BOT_NAME 定义了 Scrapy 项目的名称,Scrapy 会根据这个名称来识别项目。你可以将其保持默认或根据你的项目需求进行修改:

BOT_NAME = "DoubanProject"
4.2 配置 SPIDER_MODULESNEWSPIDER_MODULE

SPIDER_MODULESNEWSPIDER_MODULE 定义了爬虫的存放路径和默认新爬虫生成位置。

  • SPIDER_MODULES: 该配置定义了存放所有爬虫的模块。在这里,所有爬虫都存放在 DoubanProject.spiders 目录下。

  • NEWSPIDER_MODULE: 该配置定义了新生成的爬虫的默认存放位置。

    SPIDER_MODULES = [“DoubanProject.spiders”]
    NEWSPIDER_MODULE = “DoubanProject.spiders”

4.3 设置 User-Agent

User-Agent 是 HTTP 请求头中的一个重要字段,它告诉目标服务器你的请求来自哪个浏览器或客户端。很多网站会通过检测 User-Agent 来区分正常用户和爬虫。为了避免被识别为爬虫,我们可以将 User-Agent 字段伪装成常见的浏览器。

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'

在上面的配置中,我们将 User-Agent 伪装成了 Google Chrome 浏览器。这有助于提高爬虫的隐蔽性,避免被目标网站的反爬虫机制识别和封禁。

4.4 禁用 robots.txt 规则

许多网站使用 robots.txt 文件来限制爬虫访问某些页面。为了能够抓取豆瓣的内容,我们需要将 Scrapy 的 ROBOTSTXT_OBEY 设置为 False,忽略 robots.txt 规则。

ROBOTSTXT_OBEY = False

注意:尽管我们在这里禁用了 robots.txt,实际开发时应尽量遵循网站的爬虫规则,避免给网站带来过多负担。

4.5 设置下载延迟 DOWNLOAD_DELAY

为了避免触发网站的反爬虫机制,建议设置一个下载延迟。DOWNLOAD_DELAY 定义了每个请求之间的时间间隔,防止爬虫请求频率过高,给服务器带来过大压力。通常,1-3 秒的延迟是合理的选择。

DOWNLOAD_DELAY = 2  # 设置每个请求之间的时间间隔为 2 秒

你还可以设置 RANDOMIZE_DOWNLOAD_DELAYTrue,让每次请求之间的延迟时间随机变化,这样可以进一步避免被反爬虫机制发现。

RANDOMIZE_DOWNLOAD_DELAY = True
4.6 启用 Cookies

有些网站会使用 Cookies 来跟踪用户的行为和状态。如果不启用 Cookies,有时会导致爬取数据不完整或被限制访问。我们在这里启用 Scrapy 的 COOKIES_ENABLED 设置:

COOKIES_ENABLED = True

这将允许爬虫在请求过程中自动处理 Cookies。

4.7 启用 Item Pipelines

Item Pipelines 负责处理爬虫提取到的数据,并将其保存到不同的输出格式中。在这里,我们已经在 pipelines.py 中编写了一个 Pipeline 来将电影数据保存到 Excel 文件中。接下来需要在 settings.py 中启用这个 Pipeline。

ITEM_PIPELINES = {
   "DoubanProject.pipelines.DoubanprojectPipeline": 300,
}

数字 300 代表优先级,Scrapy 会根据优先级的数字大小依次执行不同的 Pipelines。数字越小,优先级越高。

4.8 配置其他默认设置

最后,确保 Scrapy 的其他设置与最新版本兼容。这里我们设置了 REQUEST_FINGERPRINTER_IMPLEMENTATIONTWISTED_REACTOR,它们是 Scrapy 的内部配置,用于确保兼容性和性能优化。

# 设置未来兼容性
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
FEED_EXPORT_ENCODING = "utf-8"  # 确保导出文件的编码为 UTF-8

修改后的 settings.py 文件完整代码:
BOT_NAME = "DoubanProject"

SPIDER_MODULES = ["DoubanProject.spiders"]
NEWSPIDER_MODULE = "DoubanProject.spiders"

# 伪装成正常的浏览器
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'

# 不遵守 robots.txt 规则
ROBOTSTXT_OBEY = False

# 启用 Cookies
COOKIES_ENABLED = True

# 配置下载延迟,避免被封禁
DOWNLOAD_DELAY = 2  # 每次请求间隔2秒
RANDOMIZE_DOWNLOAD_DELAY = True  # 随机化下载延迟

# 配置默认请求头,模拟真实用户
DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Referer': 'https://www.douban.com/',
}

# 启用下载中间件
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
}

# 启用 Item Pipelines
ITEM_PIPELINES = {
   "DoubanProject.pipelines.DoubanprojectPipeline": 300,
}

# 启用 AutoThrottle 扩展,控制并发请求速度
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 5  # 初始延迟
AUTOTHROTTLE_MAX_DELAY = 60  # 最大延迟
AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0  # 每个服务器的并发请求数量
AUTOTHROTTLE_DEBUG = False  # 禁用调试信息显示

# HTTP缓存设置(可选)
HTTPCACHE_ENABLED = False

# 设置未来兼容性
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
FEED_EXPORT_ENCODING = "utf-8"
终端运行爬虫 douban
scrapy crawl douban

运行后,爬虫将抓取豆瓣电影 Top 250 的数据并保存到 豆瓣电影数据.xlsx 文件中。

导入 MySQL 数据库

在本节中,我们将介绍如何将抓取的豆瓣电影数据保存到 MySQL 数据库中。Scrapy 提供了灵活的管道机制,可以将抓取的数据导入到多种存储平台。通过下面的步骤,我们将爬取的数据存储到 MySQL 数据库中。

1. 在 MySQL 中创建数据库

首先,确保你已经安装并启动了 MySQL 数据库。在 MySQL 中,我们需要创建一个数据库和对应的数据表来存储抓取到的电影信息。

创建数据库:

-- MySQL 8.0 及以上版本
create database douban_movie;

-- 如果你使用的是 MySQL 8.0 以下版本,请使用以下命令指定编码为 utf8mb4
create database douban_movie default charset=utf8mb4;

切换到你创建的数据库:

use douban_movie;
2. 在数据库中创建数据表

在刚刚创建的 douban_movie 数据库中,我们需要创建一个表 movie_data 来存储爬取到的电影信息。表结构如下:

CREATE TABLE movie_data(
    rank varchar(20),                  -- 电影排名
    movie_name varchar(30),            -- 电影名称
    movie_introduction varchar(100),   -- 电影简介
    picture varchar(100),              -- 电影海报链接
    movie_rating varchar(100),         -- 电影评分
    evaluators varchar(100)            -- 评价人数
) character set=utf8;
3. 修改 pipelines.py,将数据保存到 MySQL

接下来,我们需要在 pipelines.py 文件中编写代码,将爬取到的数据保存到 MySQL 数据库中。我们会使用 pymysql 库来操作 MySQL。

安装 pymysql

pip install pymysql

然后,在 pipelines.py 文件中添加如下代码:

import pymysql
from .items import DoubanprojectItem  # 导入定义好的 item 数据结构

class MysqlPipeline:
    def __init__(self, host, database, user, password, port):
        """
        初始化 MySQL 数据库连接配置
        """
        self.host = host
        self.database = database
        self.user = user
        self.password = password
        self.port = port

    @classmethod
    def from_crawler(cls, crawler):
        """
        从 Scrapy 项目的 settings.py 文件中读取 MySQL 的连接信息
        """
        return cls(
            host=crawler.settings.get('MYSQL_HOST'),
            database=crawler.settings.get('MYSQL_DATABASE'),
            user=crawler.settings.get('MYSQL_USER'),
            password=crawler.settings.get('MYSQL_PASSWORD'),
            port=crawler.settings.get('MYSQL_PORT')
        )

    def open_spider(self, spider):
        """
        爬虫启动时打开数据库连接
        """
        print('打开数据库连接....')
        self.db = pymysql.connect(host=self.host, user=self.user, password=self.password, database=self.database,
                                  port=self.port, charset='utf8')
        self.cursor = self.db.cursor()

    def close_spider(self, spider):
        """
        爬虫结束时关闭数据库连接
        """
        print('关闭数据库连接...')
        self.db.close()

    def process_item(self, item, spider):
        """
        将爬取到的 item 存储到 MySQL 数据库
        """
        data = dict(item)
        keys = ', '.join(data.keys())  # 获取字段名
        values = ', '.join(['%s'] * len(data))  # 构建 SQL 中的值部分
        sql = "insert into movie_data (%s) values (%s)" % (keys, values)
        self.cursor.execute(sql, tuple(data.values()))  # 执行 SQL 插入语句
        self.db.commit()  # 提交事务
        return item  # 继续传递给下一个 pipeline(如果有的话)
4. 配置 settings.py 文件

为了让 Scrapy 能够将数据写入 MySQL,我们需要在 settings.py 文件中进行一些配置。首先,启用 MysqlPipeline,然后配置 MySQL 数据库的连接信息。

settings.py 中添加如下内容:

# 启用 MysqlPipeline 管道,将数据存入 MySQL
ITEM_PIPELINES = {
    "DoubanProject.pipelines.MysqlPipeline": 301,
}

# 配置 MySQL 数据库的连接信息
MYSQL_HOST = 'localhost'           # MySQL 服务器的地址
MYSQL_DATABASE = 'douban_movie'    # 使用的数据库名
MYSQL_PORT = 3306                  # MySQL 端口号,默认是3306
MYSQL_USER = 'root'                # 你的 MySQL 用户名
MYSQL_PASSWORD = 'your password'   # 你的 MySQL 密码
5. 运行爬虫并将数据导入 MySQL

现在你可以通过以下命令运行爬虫:

scrapy crawl douban

等待爬虫运行完毕后,打开你的 MySQL 数据库,使用以下 SQL 查询命令查看爬取到的数据:

SELECT * FROM movie_data;

你也可以使用 MySQL Workbench 或 Navicat 等图形化工具查看数据。


终端运行爬虫 douban

在所有的代码编写和配置完成后,我们就可以运行爬虫来抓取数据并保存到 Excel 文件和 MySQL 数据库中。以下是运行爬虫的步骤:

1. 进入项目目录

首先,确保你的终端已经定位到项目的根目录,也就是包含 scrapy.cfg 文件的目录。可以通过命令行进入项目根目录:

cd path/to/your/DoubanProject

path/to/your/DoubanProject 替换为你实际的项目路径。

2. 运行爬虫

在项目目录下,通过以下命令启动爬虫:

scrapy crawl douban

此时,爬虫将开始访问豆瓣电影的 Top 250 页面,逐页抓取电影信息。抓取到的数据将被同时保存到 Excel 文件 (豆瓣电影数据.xlsx) 中,以及 MySQL 数据库(如果配置了 MySQL 管道)。

3. 查看生成的 Excel 文件

在爬虫运行完成后,Excel 文件将会保存在项目目录下,文件名为 豆瓣电影数据.xlsx

你可以使用 WPS Office、Microsoft Excel 或任何支持 Excel 文件的软件来打开这个文件。

  • 使用 WPS 打开 Excel 文件
    • 在文件资源管理器中,找到 豆瓣电影数据.xlsx 文件。
    • 右键单击文件,选择 “打开方式”,然后选择 WPS 表格
    • 你将看到抓取的豆瓣电影排名、名称、简介、评分、观影人数等数据都已经填充在表格中。

Excel 文件的内容应该类似如下:

电影排名

电影名称

电影简介

电影海报

电影评分

观影人数

1

肖申克的救赎

自由万岁!

图片链接

9.7

5000000+

2

霸王别姬

风华绝代

图片链接

9.6

4000000+

4. 检查数据库中的数据

如果你配置了 MySQL 管道,数据也会被存入 MySQL 数据库。你可以通过以下命令在 MySQL 中检查数据:

USE douban_movie;
SELECT * FROM movie_data;

此时,终端将展示爬虫保存到数据库中的数据内容。

5. 爬虫运行提示信息

当你在终端运行爬虫时,你还会在终端中看到相关的运行日志,这些日志会提示爬虫的当前状态,比如:

  • 正在抓取的页面 URL。
  • 每一页抓取的数量。
  • 数据是否成功保存。
  • 爬虫完成时的提示信息。

注意:使用爬虫工具时,请务必遵守目标网站的 robots.txt 文件以及相关法律法规,避免对网站造成过度负载。


原文地址:https://blog.csdn.net/web15085096641/article/details/145216092

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!