【爬虫】使用 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值