当前位置: 首页 > news >正文

Spider的用法

在Scrapy中,要抓取网站的链接配置、抓取逻辑、解析逻辑等其实都是在Spider中配置的

Spider运行流程

实现Scrapy爬虫项目时,最核心的类便是Spider类,它定义了如何爬取某个网站的流程和解析方式

Spider要做的事就是如下两件:

1.定义爬取网站的动作

2.分析爬取下来的网页

对于Spider类来说,整个爬取循环如下所述

1.以初始的URL初始化Request,并设置回调函数。当该Request成功请求返回时,将生成Response,并作为参数传给该回调函数

2.在回调函数内分析返回的网页内容,返回结果可以有两种形式

        1.解析到的有效结果返回字典或Item对象,下一步可经过处理后(或直接)保存

        2.解析到的下一个链接,可以利用此链接构造Request并设置新的回调函数,返回Request

3.如果返回的是字典或Item对象,可通过Feed Exports等形式存入文件。如果设置Pipeline,可以经由Pipeline处理(如过滤、修正等)并保存

4.如果返回的是Request,那Request执行成功得到Response之后会再次传递给Request中定义的回调函数,可以再次使用选择器来分析新得到的网页内容并根据分析的数据生成Item

Spider类分析

Spider继承自scrapy.spiders.Spider

这个类是最简单最基本的Spider类,每个其他的Spider必须继承自这个类

基础属性

name:爬虫名称     是定义Spider名字的字符串,Spider的名字定义了Scrapy如何定位并初始化Spider,所以必须是唯一的

 

allowed_domains:允许爬取的域名      是可选配置,不在此范围的链接不会被跟进爬取

start_urls:起始URL列表     当没有实现start_requests方法时,默认会从这个列表开始抓取

custom_settings:是一个字典    是专属于本Spider的配置,此设置会覆盖项目全局的设置,而                                                          且此设置必须在初始化前被更新,所以它必须定义成类变量

crawler:此属性是由from_crawler方法设置的

代表的是本Spider类对应的Crawler对象,Crawler对象中包含了很多项目组件利用它可以获取项目的一些配置信息,如最常见的就是获取项目的设置信息,即Settings

settings:是一个Settings对象      利用它我们可以直接获取项目的全局设置变量

Spider常用方法

start_requests:用于生成初始请求,必须返回一个可迭代对象

parse:当Response没有指定回调函数时,该方法会默认被调用负责处理Response,处理返回结果,并从中提取出想要的数据和下一步的请求,然后返回该方法需要返回一个包含Request或Item的可迭代对象

closed:当Spider关闭时,该方法会被调用,在这里一般会定义释放资源的一些操作或其他收尾操作


http://www.dtcms.com/a/283236.html

相关文章:

  • 搭建云途YTM32B1MD1芯片VSCODE+GCC + Nijia + Cmake+Jlink开发环境
  • Python设计模式深度解析:单例模式(Singleton Pattern)完全指南
  • 深度解析api-ms-win-crt-runtime-l1-1-0.dll:它是什么?为什么重要?如何修复?
  • Spring MVC中@PathVariable的用法详解
  • 【世纪龙】汽车发动机拆装检修仿真教学软件-数字技术重塑教学
  • 汽车数字化——65页大型汽车集团企业IT信息化(管理架构、应用架构、技术架构)战略规划【附全文阅读】
  • 网络安全初级(Python实现sql自动化布尔盲注)
  • Android Git操作
  • 小程序 状态管理 mobx-miniprogram 和 miniprogram-compute
  • 将Android Studio创建的一个apk工程放到Android15源码中构建
  • Prompting Engineer 十大核心设计原则
  • 比特币简介
  • Swift6.0基础知识 -- 可选2
  • 正则表达式梳理
  • Linux驱动13 --- 多节点设备树
  • MySQL主键策略解析:自增ID与UUID的优劣及选择建议
  • 7.17 滑动窗口 | assign
  • Docker容器访问挂载文件权限问题
  • MPPT电路设计
  • vue中后端返回数据流,前端实现导出下载
  • 等价关系与不变量
  • Web3:Solidity入门到精通
  • cdr序列化与反序列化
  • SenseGlove力反馈手套:医疗、生产制造、军事模拟与远程机器人控制新革命
  • 【AI交叉】化学:人工智能如何重塑现代化学研究?
  • 谷歌引入开源全栈 AI 代理栈:借助 Gemini 2.5 和 LangGraph 实现多步网络搜索、反思与综合
  • NMS代码详解(数据维度变换解析)
  • 格密码--Ring-SIS和Ring-LWE
  • 架构解密|一步步打造高可用的 JOCR OCR 识别服务
  • oracle会话控制和存储状态查询