前言
在大数据和网络爬虫领域,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