scrapy介绍,并创建第一个项目

一、scrapy简介

  1. scrapy的概念
    Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。
  • Scrapy 使用了Twisted异步网络框架,可以加快我们的下载速度
    • Scrapy文档地址:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
  1. 工作流程
  • 传统的爬虫流程
    在这里插入图片描述

  • scrapy的流程

在这里插入图片描述

  • 描述
  1. 爬虫中起始的url构造成request对象–>爬虫中间件–>引擎–>调度器
  2. 调度器把request–>引擎–>下载中间件—>下载器
  3. 下载器发送请求,获取response响应---->下载中间件---->引擎—>爬虫中间件—>爬虫
  4. 爬虫提取url地址,组装成request对象---->爬虫中间件—>引擎—>调度器,重复步骤2
  5. 爬虫提取数据—>引擎—>管道处理和保存数据

在这里插入图片描述

二、关于中间件

  1. 爬虫中间件(Spider Middleware)

作用: 爬虫中间件主要负责处理从引擎发送到爬虫的请求和从爬虫返回到引擎的响应。这些中间件在请求发送给爬虫之前或响应返回给引擎之前可以对它们进行处理。

  • 功能:
  1. 修改请求或响应。
  2. 在请求被发送到爬虫之前进行预处理。
  3. 在响应返回给引擎之前进行后处理。
  4. 过滤或修改爬虫产生的请求和响应。
  • 常见的爬虫中间件:
  • HttpErrorMiddleware: 处理 HTTP 错误。
  • OffsiteMiddleware: 过滤掉不在指定域名内的请求。
  • RefererMiddleware: 添加请求的 Referer 头。
  • UserAgentMiddleware: 添加请求的
  • User-Agent 头。
  • DepthMiddleware: 限制爬取深度。
  1. 下载中间件(Downloader Middleware)
  • 作用: 下载中间件主要负责处理引擎发送到下载器的请求和从下载器返回到引擎的响应。这些中间件在请求发送给下载器之前或响应返回给引擎之前可以对它们进行处理。

  • 功能:

  1. 修改请求或响应。
  2. 在请求被发送到下载器之前进行预处理。
  3. 在响应返回给引擎之前进行后处理。
  4. 对请求进行代理、设置代理认证等。
  • 常见的下载中间件:
  • HttpProxyMiddleware: 处理 HTTP 代理。
  • UserAgentMiddleware: 添加请求的 User-Agent头。
  • RetryMiddleware: 处理请求重试。
  • HttpCompressionMiddleware: 处理 HTTP 压缩。
  • CookiesMiddleware: 管理请求的 Cookies。

三、scrapy的三个内置对象

  1. scrapy.Item:
  • 作用: scrapy.Item 是一个简单的容器对象,用于封装存储爬取到的数据。每个 scrapy.Item 对象都代表了网站上的一个特定数据项。

  • 使用: 在 Scrapy 爬虫中,你可以定义一个继承自 scrapy.Item 的类,定义这个类的属性来表示要提取的字段。这样,当你从页面中提取数据时,可以将提取到的数据存储在 scrapy.Item 对象中

  • 示例:

import scrapyclass MyItem(scrapy.Item):title = scrapy.Field()url = scrapy.Field()
  1. scrapy.Request:
  • 作用: scrapy.Request 对象用于指示 Scrapy 下载某个URL,并在下载完成后返回一个 scrapy.Response 对象

  • 使用: 在爬虫中,你可以创建 scrapy.Request 对象,指定要访问的URL、回调函数、请求方法、请求头等信息,然后通过调用这个对象,将请求添加到爬虫的调度队列中

  • 示例:

import scrapy
class MySpider(scrapy.Spider):name = 'myspider'def start_requests(self):urls = ['http://example.com/page1', 'http://example.com/page2']for url in urls:yield scrapy.Request(url=url, callback=self.parse)def parse(self, response):# 处理响应的逻辑pass
  1. scrapy.Response:
  • 作用: scrapy.Response 对象表示从服务器接收到的响应,它包含了网页的内容以及一些有关响应的元数据。

  • 使用: 在爬虫的回调函数中,你将接收到的响应作为参数,通过对 scrapy.Response 对象的操作,提取数据或者进一步跟踪其他URL

  • 示例:

import scrapyclass MySpider(scrapy.Spider):name = 'myspider'def start_requests(self):urls = ['http://example.com/page1']for url in urls:yield scrapy.Request(url=url, callback=self.parse)def parse(self, response):# 使用 response.xpath 或 response.css 提取数据title = response.xpath('//h1/text()').get()

这三个内置对象是构建 Scrapy 爬虫时非常重要的组件。scrapy.Item 用于封装爬取到的数据,scrapy.Request 用于定义要爬取的URL和请求参数,scrapy.Response 用于处理从服务器返回的响应。通过巧妙地使用这些对象,你可以有效地构建和组织你的爬虫逻辑。

四、scrapy的入门使用

  1. 安装
pip/pip3 install scrapy
  1. scrapy项目开发流程
  • 创建项目:
        scrapy startproject mySpider
    在这里插入图片描述
  • 创建一个爬虫:
    1.进入刚才的项目路径
    2.执行生成命令:scrapy genspider <爬虫名字> <允许爬取的域名>
    例如:scrapy genspider baidui baidu.com
    3.执行后就会在myspider/spider下,生成一个baidu.py,这就是我们的爬虫文件
    在这里插入图片描述
  • 提取数据:
        根据网站结构在spider中(即baidu.py文件)实现数据采集相关内容
  • 保存数据:
        使用pipeline进行数据后续处理和保存
  1. 定义一个管道类
  2. 重写管道类的process_item方法
  3. process_item方法处理完item之后必须返回给引擎
  4. 在setting文件中启用管道

管道文件

import jsonclass ItcastPipeline():# 爬虫文件中提取数据的方法每yield一次item,就会运行一次# 该方法为固定名称函数def process_item(self, item, spider):print(item)return item

配置文件

#值越小越先运行
ITEM_PIPELINES = {'myspider.pipelines.ItcastPipeline': 400
}
  1. 运行爬虫项目
scrapy crawl baidu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【.net core 7】新建net core web api并引入日志、处理请求跨域以及发布

效果图&#xff1a; 1.新建.net core web api项目 选择src文件夹》添加》新建项目 输入框搜索&#xff1a;web api 》选择ASP.NET Core Web API 输入项目名称、选择位置为项目的 src文件夹下 我的项目是net 7.0版本&#xff0c;实际选择请看自己的项目规划 2.处理Progr…

SpringBoot Bean解析

Bean解析 IOC介绍 松耦合灵活性可维护 注解方式配置Bean 实现方式1: Component声明,直接类上进行添加注解, 同时保证包扫描能扫到即可实现方式2: 配置类中使用Bean Configuration public class BeanConfiguration implements SuperConfiguration{Bean("dog")Ani…

基于DigiThread的仿真模型调参功能

仿真模型调参是指通过调整模型内部的参数值&#xff0c;使仿真模型的输出更符合实际系统的行为或者预期结果的过程。 仿真过程中&#xff0c;往往需要频繁对模型参数进行调整&#xff0c;通过观察不同参数下系统整体的运行情况&#xff0c;实现系统的性能、可靠性和效率的优化…

一小时玩转【负载均衡】

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

初中数学网上考试系统的设计与实现

摘 要&#xff1a; 科技在人类的历史长流中愈洗愈精&#xff0c;不仅包括人们日常的生活起居&#xff0c;甚至还包括了考试的变化。之前的考试需要大量的时间和精力&#xff0c;组织者还需要挑选并考查结果&#xff0c;以及为了强制有效地进行考试所需要采取的一些步骤&#x…

RocketMQ Copilot 一款面向 Apache RocketMQ 的智能辅助运维系统

一、RocketMQ简介 ocketMQ是阿里巴巴研发的一款分布式消息中间件&#xff0c;后开源给Apache基金会&#xff0c;成为apache的顶级开源项目。它具有高性能、高可靠、高实时和分布式的特点。RocketMQ主要应用于解决应用耦合&#xff0c;消息分发&#xff0c;流量削锋等问题。 R…

Java零基础——vue篇

1.【熟悉】Vue简介 1.1 简介 它是一个构建用户界面的框架 Vue是一个前端框架 js jq https://www.pmdaniu.com/#file UI网站 UI 一般开发者使用蓝湖 工具 看着UI图 写接口 https://lanhuapp.com/web/#/item 是一个轻量级的MVVM&#xff08;Model-View-ViewModel&#xff0…

(使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))

使用vite搭建vue3项目&#xff08;vite vue3 vue router pinia element plus&#xff09; 初始化项目安装依赖&#xff0c;运行项目初始配置 初始化项目 1.需要在创建项目的位置cmd目录下执行 2. npm init vitelatest 回车 npm init vitelatest3.填上自己的项目名称 回车…

【开源】基于JAVA的厦门旅游电子商务预订系统

项目编号&#xff1a; S 030 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S030&#xff0c;文末获取源码。} 项目编号&#xff1a;S030&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒…

[网鼎杯 2020 青龙组]singal 1

前言 在主函数中找到了一个vm的译码器&#xff0c;译码器主要是解释传入的opcode&#xff0c;然后对我们输入的字符操作&#xff0c;这里我们发现他是单字节比较的&#xff0c;方法很多可以使用单字节映射&#xff0c;也可以是使用符号化执行&#xff0c;当然也可以硬着头皮去…

canvas基础:渲染文本

canvas实例应用100 专栏提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。 canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重要的帮助。 文章目录 示例…

Postman如何导入和导出接口文件

本文介绍2种导出和导入的操作方法&#xff1a;一种是分享链接&#xff0c;导入链接的方式&#xff08;需要登录&#xff09;&#xff1b;另一种是导出json文件&#xff0c;再次导入。下面将详细介绍。 由于第一种分享链接&#xff0c;导入链接的方式需要登录&#xff0c;所以推…

KNN回归-GridSearchCV模型调优(波士顿房价)

数据集简介 数据介绍 波士顿房价数据集(Boston Housing Dataset) 是一个经典的用于回归分析的数据集。它包含了波士顿地区506个街区的房价信息以及与房价相关的13个特征。这个数据集的目标是根据这些特征来预测波士顿地区房屋的中位数价格(以千美元为单位) 数据说明 Data S…

Vue 3.0 组合式API 生命周期钩子

文章目录 前言配置项api图表on配置项api后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;vue.js &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0…

微软 Power Platform 零基础 Power Pages 网页搭建教程学习实践进阶以及常见问题解答(二)

微软 Power Platform 零基础 Power Pages 网页搭建教程学习实践进阶及常见问题解答&#xff08;二&#xff09; Power Pages 学习实践进阶 微软 Power Platform 零基础 Power Pages 网页搭建教程学习实践进阶及常见问题解答&#xff08;二&#xff09;Power Pages 核心工具和组…

【AUTOSAR】【通信栈】IPduM

AUTOSAR专栏——总目录_嵌入式知行合一的博客-CSDN博客文章浏览阅读310次。本文主要汇总该专栏文章,以方便各位读者阅读。https://xianfan.blog.csdn.net/article/details/132072415 目录 一、概述 二、相关模块 2.1 OS

2023年第十二届数学建模国际赛小美赛B题工业表面缺陷检测求解分析

2023年第十二届数学建模国际赛小美赛 B题 工业表面缺陷检测 原题再现&#xff1a; 金属或塑料制品的表面缺陷不仅影响产品的外观&#xff0c;还可能对产品的性能或耐久性造成严重损害。自动表面异常检测已经成为一个有趣而有前景的研究领域&#xff0c;对视觉检测的应用领域有…

成倍提高生产力工具Notion

成倍提高生产力工具Notion Notion已经成为了很多内容创作者的唯一生产力工具&#xff0c;甚至很多企业已经把Notion当作他们的唯一的工作平台&#xff0c;学习这款软件不仅能提高你的工作效率甚至在职场上也会成为一个吃香的技能&#xff0c;在美国有人制作销售Notion模板&…

人工智能基础创新的第二增长曲线

编者按&#xff1a;2023年是微软亚洲研究院建院25周年。借此机会&#xff0c;我们特别策划了“智启未来”系列文章&#xff0c;邀请到微软亚洲研究院不同研究领域的领军人物&#xff0c;以署名文章的形式分享他们对人工智能、计算机及其交叉学科领域的观点洞察及前沿展望。希望…

逆向exe

前言 在使用一个上位机程序时&#xff0c;弹出了试用期已结束&#xff0c;由于有使用它的需求&#xff0c;便想着能不能把它的防御措施给干掉。 0x1 思路 ①通过字符串查找定位弹窗的代码→找到弹窗的条件→fail ②分析main函数→找到弹窗的调用函数 0x2 实操 首先通过在main…