1. 爬虫概述
爬虫是指一种可以从互联网上按照一定规则获取信息并加以处理的程序,它是抓取网页信息的利器。Python语言因其简单、易学、功能强大而被广泛应用于爬虫开发领域。其中,Scrapy是Python中一个非常强大和灵活的爬虫框架,它基于Twisted编写,可以深度定制,同时也很容易上手。
2. Scrapy组成部分
2.1 Scrapy架构
Scrapy可以分为如下三个部分:
Scrapy Engine:(引擎)调度系统,负责整个爬虫的运行流程控制,数据流等等。
Downloader:(下载器)负责下载网页内容并返回给Scrapy Engine。
Spiders:(爬虫)负责解析Downloader拿到的网页内容,提取数据并加以处理。
2.2 Scrapy运行流程
Scrapy框架的运行流程大致如下:
Engine发送一个初始的Request(A)给Scheduler。
Scheduler将Request(A)放入请求队列。
Engine从Scheduler中取出一个Request(B)并发送给Downloader,同时指定处理该请求的Spider。
Downloader将Request(B)下载完成后,将得到的Response发送给Engine。
Engine将接收到的Response发送给指定的Spider处理。
Spider处理该Response,并返回包含提取的数据或更多需要爬取的URL的Item对象或Request对象到Engine。
Engine将Spider返回的Item交给Pipeline处理,同时将Spider返回的新的Request交给Scheduler。
重复第三步到第七步,直到Scheduler中没有新的Request为止,爬虫任务结束。
3. Scrapy项目创建
3.1 Scrapy安装
在命令行中输入以下命令,即可完成Scrapy的安装:
pip install scrapy
安装完成后,可以使用以下命令检测Scrapy是否正确安装:
scrapy version
3.2 Scrapy项目创建
使用Scrapy创建项目的命令如下:
scrapy startproject 项目名称
执行该命令后,会在当前目录中创建一个以项目名称为名称的文件夹,里面包含了一个基本的Scrapy项目结构:
scrapy.cfg:配置文件。
是一个Python包,包括以下3个文件
items.py:定义爬取对象。
middlewares.py:定义中间件,可以对请求过程进行调整。
pipelines.py:定义爬取数据的处理过程。
spiders文件夹:所有的爬虫代码都放在这个文件夹中。
_init_.py:系统默认生成的空文件,其作用是把当前路径变为模块路径。
4. Scrapy爬虫实现
以下是一个简单的Scrapy爬虫实现,实现获取豆瓣电影TOP250中的电影名和评分信息。
4.1 创建Spider
在Spider文件夹下,创建douban_spider.py文件,并写入以下代码:
# 引入Scrapy库中的Spider类
import scrapy
# 创建Spider类,并继承 scrapy.Spider 类
class DoubanSpider(scrapy.Spider):
# 定义爬虫名称
name = 'douban'
# 定义允许的域名,限制爬取某些域名下的信息
allowed_domains = ['movie.douban.com']
# 定义起始URL
start_urls = ['https://movie.douban.com/top250']
# 解析函数
def parse(self, response):
# 获取所有电影信息的Selector对象列表
movies = response.xpath('//div[@class="info"]')
for movie in movies:
# 获取电影名
title = movie.xpath('div[@class="hd"]/a/span[@class="title"]/text()').extract_first()
# 获取电影评分
rate = movie.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first()
# 将获取到的信息封装到字典中
yield {'title': title, 'rate': rate}
在上述代码中,定义了一个DoubanSpider类,继承Scrapy中的Spider基类。在类中定义了如下三个属性:
name:爬虫的名称,在一个项目中不能重复。
allowed_domains:定义了爬虫的允许域名,即只能爬取该域名下的信息。
start_urls:定义了爬虫的起始URL。
在这里,定义了一个parse函数,该函数接收参数response,并通过XPath获取到网页中的电影名和评分信息,并将返回的数据封装到一个字典中。
4.2 运行Spider
在项目目录下执行以下命令,即可运行该爬虫程序:
scrapy crawl douban -o douban.csv
执行后,Scrapy会自动运行Spider,并将获取到的数据存储到指定的CSV文件中。
5. 结语
本文主要介绍了Scrapy框架的基本知识和实现一个简单Scrapy爬虫的步骤。Scrapy提供了非常强大和灵活的爬虫功能,是Python语言中一个非常实用的爬虫框架。希望读者能够从中受益,掌握Scrapy爬虫开发的基本技能。