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

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

相关文章:

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

一、scrapy简介 scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted异步网络框架&#xff0c;可以加快我们的下载速度。 Scrapy文档地址&#xff1a;http://scrapy-chs.readthedocs.io/z…...

Rust语言项目实战(九 - 完结) - 胜利与失败

回顾 在前面的章节中,我们已经实现了这个游戏中大部分的模块和功能,我们可以指挥我们的战机左右移动,并发射子弹;我们还创造了一堆的侵略者,从屏幕上方缓缓降落,试图到达屏幕的底部。 本章中,我们将对游戏的输赢作出最后的裁决,到底是我们的保卫者英勇无敌,还是侵略…...

【Linux系统编程】项目自动化构建工具make/Makefile

介绍&#xff1a; make和Makefile是用于编译和构建C/C程序的工具和文件。Makefile是一个文本文件&#xff0c;其中包含了编译和构建程序所需的规则和指令。它告诉make工具如何根据源代码文件生成可执行文件&#xff0c;里面保存的是依赖关系和依赖方法。make是一个命令行工具&a…...

harmony开发之Text组件的使用

TextInput、TextArea是输入框组件&#xff0c;通常用于响应用户的输入操作&#xff0c;比如评论区的输入、聊天框的输入、表格的输入等&#xff0c;也可以结合其它组件构建功能页面&#xff0c;例如登录注册页面。 图片来源黑马程序员 Text组件的使用&#xff1a; 文本显示组…...

using meta-SQL 使用元SQL 六

%Table Syntax %Table(recname) Description Use the %Table construct to return the SQL table name for the record specified with recname. 使用%Table构造返回使用recname指定的记录的SQL表名。 This construct can be used to specify temporary tables for runn…...

如何将浮点数点左边的数每三位添加一个逗号,如 12000000.11 转化为『12,000,000.11』

// 方法二 function format1(number) {return Intl.NumberFormat().format(number); } // 方法三 function format2(number) {return number.toLocaleString("en"); }...

朴素贝叶斯 贝叶斯方法

朴素贝叶斯 贝叶斯方法 背景知识 贝叶斯分类&#xff1a;贝叶斯分类是一类分类算法的总称&#xff0c;这类算法均以贝叶斯定理为基础&#xff0c;故统称为贝叶斯分类。先验概率&#xff1a;根据以往经验和分析得到的概率。我们用 P ( Y ) P(Y) P(Y)来代表在没有训练数据前假设…...

探索鸿蒙 TextInput组件

TextInput 根据组件名字&#xff0c;可以得知他是一个文本输出框。 声明代码&#x1f447; TextInput({placeholder?:ResourceStr,text?:ResourceStr}); placeholder: 就是提示文本&#xff0c;跟网页开发中的placeholder一样的 text&#xff1a;输入框当前的文本内容 特殊属…...

CNN,DNN,RNN,GAN,RL+图像处理常规算法(未完待续)

好的&#xff0c;让我们先介绍一些常见的神经网络模型&#xff0c;然后再讨论图像处理的常规算法。 神经网络模型&#xff1a; 1. CNN&#xff08;卷积神经网络&#xff09; 原理&#xff1a; CNN主要用于处理图像数据。它包含卷积层、池化层和全连接层。卷积层通过卷积操作…...

C# 语法笔记

1.ref、out&#xff1a;参数传递的两种方式 ref&#xff1a;引用传递 using System; namespace CalculatorApplication {class NumberManipulator{public void swap(ref int x, ref int y){int temp;temp x; /* 保存 x 的值 */x y; /* 把 y 赋值给 x */y temp; /* 把 t…...

el-table 表格多选(后端接口搜索分页)实现已选中的记忆功能。实现表格数据和已选数据(前端分页)动态同步更新。

实现效果&#xff1a;&#xff08;可拉代码下来看&#xff1a;vue-demo: vueDemo&#xff09; 左侧表格为点击查询调用接口查询出来的数据&#xff0c;右侧表格为左侧表格所有选择的数据&#xff0c;由前端实现分页。 两个el-table勾选数据联动更新 实现逻辑&#xff1a; el-…...

Vue3自定义Hooks定义

在Vue3中&#xff0c;自定义Hooks的定义是通过创建一个函数来共享逻辑或状态&#xff0c;以便在多个组件之间重复使用。Vue3中的自定义Hooks与React中的自定义Hooks非常相似&#xff0c;但有一些细微的差别。 要定义一个自定义Hook&#xff0c;可以按照以下步骤进行操作&#x…...

为什么Java程序员需要掌握多线程?揭秘并发编程的奥秘

为什么Java程序员需要掌握多线程&#xff1f;揭秘并发编程的奥秘 个人简介前言多线程对于Java的意义&#x1f4cc;1.提高程序性能&#xff1a;&#x1f4cc;2 提高用户体验&#xff1a;&#x1f4cc;3支持并发处理&#xff1a;&#x1f4cc;4 资源共享和同步&#xff1a;&#…...

数组实现循环队列(新增一个空间)

目录 一、前言 1.如何实现循环&#xff1f; 2.如何判断队列为空&#xff1f; 3.如何判断队列为满&#xff1f; 二、循环队列的结构定义 三、循环队列的创建及其初始化 四、入队 五、出队 六、取队头元素 七、取队尾元素 八、判空 九、判满 十、销毁队列 一、前言 …...

Mysql 索引概念回顾

一、什么是索引 在关系数据库中&#xff0c;索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构&#xff0c;它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录&#xff0c;可以根据…...

基于SpringBoot+Vue学生成绩管理系统前后端分离(源码+数据库)

一、项目简介 本项目是一套基于SpringBootVue学生成绩管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#xff0c;确…...

Hadoop集群破坏试验可靠性验证

集群环境说明&#xff1a; 准备5台服务器&#xff0c;hadoop1、hadoop2、hadoop3、hadoop4、hadoop5&#xff1b; 分别部署5个节点的zookeeper集群、hadoop集群、hbase集群 本次对于Hadoop集群测试主要分为五个方面&#xff1a; 手动进行datanode节点删除&#xff1a;&#…...

Notepad++ 安装TextFx插件失败

据说TextFx插件是Notepad常用插件之一&#xff1b;有很多格式化代码的功能&#xff1b;下面安装一下&#xff1b; 插件管理里面看一下&#xff0c;没有这个TextFx&#xff1b; 根据资料&#xff0c;先安装NppExec&#xff1b; 然后下一个5.9老版本的Notepad&#xff0c;如下图…...

探究Logistic回归:用数学解释分类问题

文章目录 前言回归和分类Logistic回归线性回归Sigmoid函数把回归变成分类Logistic回归算法的数学推导Sigmoid函数与其他激活函数的比较 Logistic回归实例1. 数据预处理2. 模型定义3. 训练模型4. 结果可视化 结语 前言 当谈论当论及机器学习中的回归和分类问题时&#xff0c;很…...

杨辉三角

打印n行杨辉三角&#xff0c;n<10。 输入格式: 直接输入一个小于10的正整数n。 输出格式: 输出n行杨辉三角&#xff0c;每个数据输出占4列。 输入样例: 5输出样例: 11 11 2 11 3 3 11 4 6 4 1代码长度限制 16 KB 时间限制 400 ms 内存限制 6…...

深入理解Fritzing电路仿真:5个专业级电子设计验证技巧

深入理解Fritzing电路仿真&#xff1a;5个专业级电子设计验证技巧 【免费下载链接】fritzing-app Fritzing desktop application 项目地址: https://gitcode.com/gh_mirrors/fr/fritzing-app Fritzing是一款开源的电子设计自动化&#xff08;EDA&#xff09;软件&#x…...

如何用ADB提升调试效率?掌握这8个核心技巧

如何用ADB提升调试效率&#xff1f;掌握这8个核心技巧 【免费下载链接】awesome-adb ADB Usage Complete / ADB 用法大全 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-adb ADB&#xff08;Android Debug Bridge&#xff09;是Android调试的瑞士军刀&#xff0…...

Windows持久化核心战术:系统服务植入实战教程

前言技术背景&#xff1a;在网络攻击的生命周期&#xff08;Cyber Kill Chain&#xff09;中&#xff0c;持久化&#xff08;Persistence&#xff09; 是攻击者在失陷主机上维持长期访问权限的关键阶段。在众多持久化技术中&#xff0c;将恶意程序注册为系统服务&#xff08;Sy…...

OpenClaw+GLM-4.7-Flash:智能客服机器人搭建指南

OpenClawGLM-4.7-Flash&#xff1a;智能客服机器人搭建指南 1. 为什么选择这个技术组合&#xff1f; 去年夏天&#xff0c;我接手了一个小团队的客服系统改造项目。团队只有5个人&#xff0c;却要处理日均300的客户咨询。传统客服系统要么太贵&#xff0c;要么定制化程度不够…...

保姆级教程:在Windows上用Cherry Studio和Grafana MCP服务打通本地监控数据(STDIO模式详解)

保姆级教程&#xff1a;在Windows上用Cherry Studio和Grafana MCP服务打通本地监控数据&#xff08;STDIO模式详解&#xff09; 你是否曾在调试大模型时&#xff0c;需要反复切换窗口查看服务器监控数据&#xff1f;或是苦恼于无法将Grafana的实时监控直接整合到AI对话流程中&a…...

Windows 10终极清理指南:5步让系统飞起来的完整教程

Windows 10终极清理指南&#xff1a;5步让系统飞起来的完整教程 【免费下载链接】Debloat-Windows-10 A Collection of Scripts Which Disable / Remove Windows 10 Features and Apps 项目地址: https://gitcode.com/gh_mirrors/de/Debloat-Windows-10 你是否感觉Windo…...

LibreTranslate模型部署优化指南:从技术痛点到落地实践

LibreTranslate模型部署优化指南&#xff1a;从技术痛点到落地实践 【免费下载链接】LibreTranslate Free and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup. 项目地址: https://gitcode.com/GitHub_Trending/li/LibreTranslate …...

从零构建大模型?斯坦福CS336爆火课程带你闯关,附超全学习资源包!

文章介绍了斯坦福大学CS336《从零开始构建语言模型》课程&#xff0c;该课程借鉴操作系统课程理念&#xff0c;带领学生体验语言模型创建的各个环节&#xff0c;包括数据收集、模型构建、训练和评估。课程内容实践性强&#xff0c;需要较多学习开发时间&#xff0c;适合有一定基…...

MedGemma 1.5垂直场景:中医馆本地部署中药配伍禁忌推理助手

MedGemma 1.5垂直场景&#xff1a;中医馆本地部署中药配伍禁忌推理助手 1. 引言&#xff1a;当传统中医遇上现代AI 想象一下&#xff0c;一位经验丰富的老中医&#xff0c;在开方时&#xff0c;除了依靠毕生所学和师徒传承的记忆&#xff0c;还能随时向一位精通古今医典、永不…...

3步搞定AtlasOS系统技术故障:Xbox控制器驱动完全解决方案

3步搞定AtlasOS系统技术故障&#xff1a;Xbox控制器驱动完全解决方案 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/at…...