【爬虫】使用 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.Spider
。name
是爬虫的名字,用于在命令行中启动爬虫,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 来提取电影信息。
-
首先使用
Selector
对页面进行解析。 -
然后使用 XPath 提取页面中所有电影的列表,遍历每部电影并提取需要的字段信息,如电影的排名、名称、简介、评分等。
-
最后通过
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_spider
、process_item
和 close_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 详细解释代码
-
__init__ 方法
:- 该方法在爬虫启动时初始化,创建一个 Excel 工作簿 (
self.wb
),并获取活动表 (self.sheet
)。 - 使用
self.sheet.title
为表格设置一个标题,在这里我们将其命名为 “豆瓣电影Top250”。 - 使用
self.sheet.append()
将表头写入 Excel 文件,表头包括 “电影排名”、“电影名称”、“电影简介”、“电影海报”、“电影评分” 和 “观影人数”。
- 该方法在爬虫启动时初始化,创建一个 Excel 工作簿 (
-
open_spider 方法
:- 在爬虫启动时执行,可以在这里做一些初始化操作,比如在控制台输出一个提示信息“开始爬虫…”。
-
process_item 方法
:- 每次爬虫抓取到一个新的电影数据项(
item
)时,Scrapy
会自动调用此方法来处理数据。 self.sheet.append()
将数据项中的字段值(如排名、名称、简介等)写入 Excel 文件中的一行。- 返回
item
是 ScrapyPipeline
的标准流程,以便数据继续传递给其他可能的 pipeline。
- 每次爬虫抓取到一个新的电影数据项(
-
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_MODULES
和 NEWSPIDER_MODULE
SPIDER_MODULES
和 NEWSPIDER_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_DELAY
为 True
,让每次请求之间的延迟时间随机变化,这样可以进一步避免被反爬虫机制发现。
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_IMPLEMENTATION
和 TWISTED_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
文件以及相关法律法规,避免对网站造成过度负载。