【爬虫】使用 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 scrapyclass 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()  # 评价人数# 返回提取到的 itemyield 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"""# 将每部电影的信息以一行的形式写入 Excelself.sheet.append((item['rank'],  # 电影排名item['movie_name'],  # 电影名称item['movie_introduction'],  # 电影简介item['picture'],  # 电影海报链接item['movie_rating'],  # 电影评分item['evaluators']  # 观影人数))# 返回 item 是 Scrapy Pipeline 的标准流程,方便后续可能有其他 pipeline 处理return itemdef 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 = hostself.database = databaseself.user = userself.password = passwordself.port = port@classmethoddef 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 文件以及相关法律法规,避免对网站造成过度负载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3743.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AV1视频编解码简介、码流结构(OBU)

我的音视频/流媒体开源项目(github) 目录 一、AV1编码技术 二、AV1码流结构(OBU) 三、IVF文件格式 四、ffmpeg支持AV1 五、关于常见格式对AV1的封装 一、AV1编码技术 AV1是由开放媒体联盟(AOM,Alliance for Open Media)在2018年发布的,AV1的前身…

软考高级5个资格、中级常考4个资格简介及难易程度排序

一、软考高级5个资格 01、网络规划设计师 资格简介:网络规划设计师要求考生具备全面的网络规划、设计、部署和管理能力;该资格考试适合那些在网络规划和设计方面具有较好理论基础和较丰富从业经验的人员参加。 02、系统分析师 资格简介:系统分…

【21】Word:德国旅游业务❗

目录 题目 NO1.2.3 NO4 NO5.6 NO7 NO8.9.10.11 题目 NO1.2.3 F12:另存为布局→页面设置→页边距:上下左右选中“德国主要城市”→开始→字体对话框→字体/字号→文本效果:段落对话框→对齐方式/字符间距/段落间距 NO4 布局→表对话框…

Flink(十):DataStream API (七) 状态

1. 状态的定义 在 Apache Flink 中,状态(State) 是指在数据流处理过程中需要持久化和追踪的中间数据,它允许 Flink 在处理事件时保持上下文信息,从而支持复杂的流式计算任务,如聚合、窗口计算、联接等。状…

【实践】操作系统智能助手OS Copilot新功能测评

一、引言 数字化加速发展,尤其人工智能的发展速度越来越快。操作系统智能助手成为提升用户体验与操作效率的关键因素。OS Copilot借助语言模型,人工智能等,对操作系统的自然语言交互操作 推出很多功能,值得开发,尤其运…

诡异的Spring @RequestBody驼峰命名字段映射失败为null问题记录

问题 一个非常常规的Spring Controller,代码如下: import lombok.RequiredArgsConstructor;Slf4j RestController RequiredArgsConstructor RequestMapping("/api/v1/config") public class ConfigController {private final ConfigService …

图形化界面MySQL(MySQL)(超级详细)

目录 1.官网地址 1.1在Linux直接点击NO thanks…? 1.2任何远端登录,再把jj数据库给授权 1.3建立新用户 优点和好处 示例代码(MySQL Workbench) 示例代码(phpMyAdmin) 总结 图形化界面 MySQL 工具大全及其功能…

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈 开发背景 可能大家听过过蓝湖可以转ui设计图为vue.js,react native代码,那么请问听说过将figma的设计图转换为flutter源代码吗?本文优雅草央千澈带…

SpringBoot错误码国际化

先看测试效果: 1. 设置中文 2.设置英文 文件结构 1.中文和英文的错误消息配置 package com.ldj.mybatisflex.common;import lombok.Getter;/*** User: ldj* Date: 2025/1/12* Time: 17:50* Description: 异常消息枚举*/ Getter public enum ExceptionEnum {//…

Pytorch|YOLO

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 一、 前期准备 1. 设置GPU 如果设备上支持GPU就使用GPU,否则使用CPU import torch import torch.nn as nn import torchvision.transforms as transforms im…

SpringBoot2 + Flowable(UI)

文章目录 引言I 技术栈软件架构基于 Vue.js 和 Element UI 的后台管理系统工程结构II 依赖rest,logic,conf 的依赖工作流flowable jar包flowable-ui所需jar包III 配置jdbc 配置 nullCatalogMeansCurrent = true引言 I 技术栈 软件架构 前端基于vue 、element-ui框架分模块设…

【Azure 架构师学习笔记】- Azure Function (2) --实操1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建,接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…

如何在linux系统上完成定时开机和更新github端口的任务

任务背景 1.即使打开代理,有的时候github去clone比较大的文件时也会出问题。这时需要每小时更新一次github的host端口; 2.马上要放假,想远程登录在学校的台式电脑,但学校内网又不太好穿透。退而求其次,选择定时启动电…

Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)

系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…

图数据库 | 19、高可用分布式设计(下)

相信大家对分布式系统设计与实现的复杂性已经有了一定的了解,本篇文章对分布式图数据库系统中最复杂的一类系统架构设计进行探索,即水平分布式图数据库系统(这个挑战也可以泛化为水平分布式图数据仓库、图湖泊、图中台或任何其他依赖图存储、…

OpenAI函数调用迎来重大升级:引入「最小惊讶原则」等软件工程实践,开发体验更上一层楼!

想玩转各种AI模型?chatTools 帮你搞定!这里有o1、GPT4o、Claude和Gemini等等,一个平台就能满足你所有的AI需求。快来开始你的AI冒险吧! OpenAI的函数调用功能再次迎来重大更新!新版指南不仅大幅精简了文档,…

Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)

目录 前言1. 基本知识2. Java代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线!! 对于Java的基本知识推荐阅读: java框架…

前端实习第二个月小结

时间飞快,第一次实习已经过去两个多月,作一些简单的总结和分享。 注:文章整体会比较轻松,提及的经历、经验仅作参考。 一、关于实习/工作内容 1、工作内容 近期做的是管理后台方面的业务,技术栈:前端re…

QT笔记- Qt6.8.1 Android编程 添加AndroidManifest.xml文件以支持修改权限

1. 切换项目选项卡,找到构建的步骤下的最后一项构建安卓APK,展开后找到应用程序栏,点击安卓自定义中的创建模板. 2. 弹出对话框勾选图中选项后点完成 3. 回到项目,查看.pro文件,里面多了很多内容不管,在下…

【鸿蒙】0x02-LiteOS-M基于Qemu RISC-V运行

OpenHarmony LiteOS-M基于Qemu RISC-V运行 系列文章目录更新日志OpenHarmony技术架构OH技术架构OH支持系统类型轻量系统(mini system)小型系统(small system)标准系统(standard system) 简介环境准备安装QE…