书接上回,我们用Scrapy创建了一个项目

Scrapy项目的组成
scrapy.cfg
首先看这个文件

-
项目设置配置
[settings]
部分指定了项目的设置模块路径。default = a.settings
表示默认使用a
项目中的settings.py
文件作为配置文件。
-
部署配置(可选)
[deploy]
部分用于配置 Scrapy 项目通过 Scrapyd 部署的相关信息。project = a
指定了该项目的名称为a
。- 注释掉的
url
参数(#url = http://localhost:6800/
)表示 Scrapyd 服务的地址,默认未启用。
settings.py
这个文件主要的就是配置,包括爬虫行为、性能优化、中间件、数据处理管道等。但是它大部分功能都是注释掉了的,你使用时得根据实际情况修改配置,从上到下,功能依次是。
-
项目基本信息配置
BOT_NAME = 'a'
:定义了项目的名称为a
。SPIDER_MODULES = ['a.spiders']
:指定存放爬虫的模块路径为a.spiders
。NEWSPIDER_MODULE = 'a.spiders'
:指定新生成的爬虫默认存放的模块路径。
-
用户代理设置
USER_AGENT
(被注释):可以自定义爬虫的 User-Agent,模拟浏览器请求头,默认使用 Scrapy 的默认值。
-
遵守 robots.txt 规则
ROBOTSTXT_OBEY = True
:启用或禁用对目标网站robots.txt
文件的遵守。如果设为True
,爬虫会自动检查并遵循网站的爬取规则。一般是不遵守的,要不然好多网站爬取不了,这个也叫君子协议,咱都玩爬虫了就暂时不当君子了。
-
并发请求数量
CONCURRENT_REQUESTS
(被注释,默认值为 16):控制 Scrapy 同时发送的最大请求数量。
-
下载延迟
DOWNLOAD_DELAY
(被注释,默认值为 0):设置每次请求之间的延迟时间(秒),以避免对目标网站造成过大压力。
-
Cookies 配置
COOKIES_ENABLED
(被注释,默认值为True
):启用或禁用 Cookies 的处理。
-
Telnet 控制台
TELNETCONSOLE_ENABLED
(被注释,默认值为True
):启用或禁用 Scrapy 的 Telnet 控制台功能,用于调试。
-
默认请求头
DEFAULT_REQUEST_HEADERS
(被注释):可以自定义 Scrapy 发送请求时的默认 HTTP 头信息。
-
爬虫中间件
SPIDER_MIDDLEWARES
(被注释):用于启用或禁用爬虫中间件,并定义其优先级。
-
下载器中间件
DOWNLOADER_MIDDLEWARES
(被注释):用于启用或禁用下载器中间件,并定义其优先级。
-
Item Pipeline
ITEM_PIPELINES
(被注释):用于启用或禁用 Item Pipeline,并定义其优先级,用于处理爬取到的数据。
-
AutoThrottle 扩展
AUTOTHROTTLE_ENABLED
(被注释,默认值为False
):启用或禁用自动限速功能,动态调整请求频率。- 其他相关参数如
AUTOTHROTTLE_START_DELAY
和AUTOTHROTTLE_MAX_DELAY
可以进一步微调限速行为。
-
HTTP 缓存
HTTPCACHE_ENABLED
(被注释,默认值为False
):启用或禁用 HTTP 缓存功能,减少重复请求。- 其他缓存相关参数如
HTTPCACHE_DIR
和HTTPCACHE_EXPIRATION_SECS
可以配置缓存存储位置和过期时间。
pipelines.py

这个就是写保存代码的
middlewares.py
这个文件是 Scrapy 项目中用于定义爬虫中间件和下载器中间件的模块。
1. 爬虫中间件(Spider Middleware)
类名:ASpiderMiddleware
作用:
- 爬虫中间件用于在 Scrapy 的请求和响应处理流程中,对数据进行拦截、修改或扩展。
- 它可以影响爬虫如何接收响应、生成请求或处理异常。
方法说明:
-
from_crawler(cls, crawler)
- 初始化中间件,并将中间件与爬虫信号系统绑定。
spider_opened
方法会在爬虫启动时被调用。
-
process_spider_input(response, spider)
- 在每个响应传递到爬虫之前调用。
- 可以用来检查响应是否符合预期,或者抛出异常终止后续处理。
- 如果返回
None
,则继续处理;如果抛出异常,则会进入process_spider_exception
。
-
process_spider_output(response, result, spider)
- 在爬虫处理完响应并返回结果后调用。
- 结果可以是新的请求或提取的数据项。
- 必须返回一个可迭代对象(如列表或生成器)。
-
process_spider_exception(response, exception, spider)
- 当爬虫或
process_spider_input
抛出异常时调用。 - 可以用来捕获异常并返回替代的结果(如新的请求或数据项),或者直接忽略异常。
- 当爬虫或
-
process_start_requests(start_requests, spider)
- 在爬虫开始时,处理初始请求队列。
- 必须返回一个可迭代对象,且只能包含请求对象(不能包含数据项)。
-
spider_opened(spider)
- 在爬虫启动时调用,记录日志信息,显示爬虫名称。
2. 下载器中间件(Downloader Middleware)
类名:ADownloaderMiddleware
作用:
- 下载器中间件用于在请求发送到下载器之前或响应从下载器返回之后,对其进行拦截、修改或扩展。
- 它可以用来实现动态代理、自定义请求头、重试机制等功能。
方法说明:
-
from_crawler(cls, crawler)
- 初始化中间件,并将中间件与爬虫信号系统绑定。
spider_opened
方法会在爬虫启动时被调用。
-
process_request(request, spider)
- 在每个请求发送到下载器之前调用。
- 可以用来修改请求(如添加代理、更改 User-Agent)、返回响应(短路后续处理)或抛出异常。
-
process_response(request, response, spider)
- 在下载器返回响应后调用。
- 可以用来修改响应内容、返回新的响应或抛出异常。
-
process_exception(request, exception, spider)
- 当下载器或
process_request
抛出异常时调用。 - 可以用来捕获异常并返回替代的响应或请求,或者直接忽略异常。
- 当下载器或
-
spider_opened(spider)
- 在爬虫启动时调用,记录日志信息,显示爬虫名称。
items.py
这个文件就是定义一个数据框架,类似于表头一样
python
class AItem(scrapy.Item):
title = scrapy.Field() # 文章标题
author = scrapy.Field() # 作者
content = scrapy.Field() # 文章内容
类似于这样
添加爬虫文件
原项目中,基本上涵盖了一个爬虫项目的大部分内容,但是缺少了爬虫文件。
重新梳理一下怎么创建项目
第一步
终端运行,Scrapy startproject b
,b是项目名称,地址默认的是c盘,在vscode上运行,默认在你的代码文件里
第二步
创建爬虫文件 首先你要进入项目cd b
,b是项目名称 再运行scrapy genspider spider www.baidu.com
后面的两个参数 第一个爬虫文件的名称,后面的是爬取的网站(不需要协议) 最后就像这样:

爬虫文件
-
name
- 爬虫的名称,用于唯一标识该爬虫。
- 在运行爬虫时,可以通过
scrapy crawl spider
命令启动该爬虫。
-
allowed_domains
- 定义了允许爬取的域名列表。
- Scrapy 会限制爬虫只访问这些域名下的页面(如果启用了
ROBOTSTXT_OBEY=True
或其他限制规则)。
-
start_urls
- 定义了爬虫开始抓取的初始 URL 列表。
- Scrapy 会自动从这些 URL 开始发送请求,并将响应传递给
parse
方法处理。
-
parse
方法- 这是 Scrapy 爬虫的核心方法,默认情况下,Scrapy 会将每个
start_urls
中的响应传递给该方法进行处理。 - 在实际开发中,
parse
方法通常用于提取数据或生成新的请求。 - 当前代码中,
parse
方法为空(pass
),表示尚未实现具体的数据提取逻辑。
- 这是 Scrapy 爬虫的核心方法,默认情况下,Scrapy 会将每个
启动项目
终端运行scrapy crawl spider
基本的创建项目就是这样,下篇会用scrapy写一个小的爬虫项目,敬请期待