Scrapy框架入门(二)

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

Scrapy项目的组成

scrapy.cfg

首先看这个文件

  1. 项目设置配置

    • [settings] 部分指定了项目的设置模块路径。
    • default = a.settings 表示默认使用 a 项目中的 settings.py 文件作为配置文件。
  2. 部署配置(可选)

    • [deploy] 部分用于配置 Scrapy 项目通过 Scrapyd 部署的相关信息。
    • project = a 指定了该项目的名称为 a
    • 注释掉的 url 参数(#url = http://localhost:6800/)表示 Scrapyd 服务的地址,默认未启用。

settings.py

这个文件主要的就是配置,包括爬虫行为、性能优化、中间件、数据处理管道等。但是它大部分功能都是注释掉了的,你使用时得根据实际情况修改配置,从上到下,功能依次是。

  1. 项目基本信息配置

    • BOT_NAME = 'a':定义了项目的名称为 a
    • SPIDER_MODULES = ['a.spiders']:指定存放爬虫的模块路径为 a.spiders
    • NEWSPIDER_MODULE = 'a.spiders':指定新生成的爬虫默认存放的模块路径。
  2. 用户代理设置

    • USER_AGENT(被注释):可以自定义爬虫的 User-Agent,模拟浏览器请求头,默认使用 Scrapy 的默认值。
  3. 遵守 robots.txt 规则

    • ROBOTSTXT_OBEY = True:启用或禁用对目标网站 robots.txt 文件的遵守。如果设为 True,爬虫会自动检查并遵循网站的爬取规则。一般是不遵守的,要不然好多网站爬取不了,这个也叫君子协议,咱都玩爬虫了就暂时不当君子了。
  4. 并发请求数量

    • CONCURRENT_REQUESTS(被注释,默认值为 16):控制 Scrapy 同时发送的最大请求数量。
  5. 下载延迟

    • DOWNLOAD_DELAY(被注释,默认值为 0):设置每次请求之间的延迟时间(秒),以避免对目标网站造成过大压力。
  6. Cookies 配置

    • COOKIES_ENABLED(被注释,默认值为 True):启用或禁用 Cookies 的处理。
  7. Telnet 控制台

    • TELNETCONSOLE_ENABLED(被注释,默认值为 True):启用或禁用 Scrapy 的 Telnet 控制台功能,用于调试。
  8. 默认请求头

    • DEFAULT_REQUEST_HEADERS(被注释):可以自定义 Scrapy 发送请求时的默认 HTTP 头信息。
  9. 爬虫中间件

    • SPIDER_MIDDLEWARES(被注释):用于启用或禁用爬虫中间件,并定义其优先级。
  10. 下载器中间件

    • DOWNLOADER_MIDDLEWARES(被注释):用于启用或禁用下载器中间件,并定义其优先级。
  11. Item Pipeline

    • ITEM_PIPELINES(被注释):用于启用或禁用 Item Pipeline,并定义其优先级,用于处理爬取到的数据。
  12. AutoThrottle 扩展

    • AUTOTHROTTLE_ENABLED(被注释,默认值为 False):启用或禁用自动限速功能,动态调整请求频率。
    • 其他相关参数如 AUTOTHROTTLE_START_DELAYAUTOTHROTTLE_MAX_DELAY 可以进一步微调限速行为。
  13. HTTP 缓存

    • HTTPCACHE_ENABLED(被注释,默认值为 False):启用或禁用 HTTP 缓存功能,减少重复请求。
    • 其他缓存相关参数如 HTTPCACHE_DIRHTTPCACHE_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 crawl spider

基本的创建项目就是这样,下篇会用scrapy写一个小的爬虫项目,敬请期待

相关推荐
救救孩子把40 分钟前
PyTorch 浮点数精度全景:从 float16/bfloat16 到 float64 及混合精度实战
人工智能·pytorch·python
意.远44 分钟前
PyTorch数据操作基础教程:从张量创建到高级运算
人工智能·pytorch·python·深度学习·机器学习
明月看潮生3 小时前
青少年编程与数学 02-016 Python数据结构与算法 29课题、自然语言处理算法
python·算法·青少年编程·自然语言处理·编程与数学
西柚小萌新4 小时前
【Python爬虫基础篇】--1.基础概念
开发语言·爬虫·python
CPPAlien6 小时前
Python for MLOps - 第一阶段学习笔记
python
喵~来学编程啦6 小时前
【模块化编程】Python文件路径检查、跳转模块
开发语言·python
黎明沐白7 小时前
Pytorch Hook 技巧
人工智能·pytorch·python
曲幽7 小时前
Stable Diffusion LoRA模型加载实现风格自由
python·ai·stable diffusion·lora·文生图·diffusers
Tech Synapse7 小时前
迷宫求解机器人:基于Pygame与Q-learning的强化学习实战教程
python·机器人·pygame·强化学习
开开心心就好7 小时前
实用电脑工具,轻松实现定时操作
python·学习·pdf·电脑·word·excel·生活