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

【100天精通python】Day45:python网络爬虫开发_ Scrapy 爬虫框架

目录

1 Scrapy 的简介

2 Scrapy选择器

3 快速创建Scrapy 爬虫

4 下载器与爬虫中间件

5 使用管道Pielines


1 Scrapy 的简介

Scrapy 是一个用于爬取网站数据并进行数据提取的开源网络爬虫框架。它使用 Python 编程语言编写,并提供了一套强大的工具和库,帮助用户在网页上浏览和抓取数据。Scrapy 旨在简化爬虫开发流程,提供了高度可定制的机制来处理各种网站的数据抓取需求。

以下是 Scrapy 框架的一些主要特点和组件:

  1. 请求和响应管理: Scrapy 提供了一个异步的请求和响应管理系统,允许用户发出 HTTP 请求并处理返回的 HTML 或其他数据。

  2. 数据提取: Scrapy 使用基于 XPath 或 CSS 选择器的数据提取方法,使用户能够方便地从网页中提取所需数据。

  3. 中间件: Scrapy 允许用户定义中间件来自定义请求和响应的处理过程,例如修改请求头、处理代理等。

  4. 管道: 管道是 Scrapy 中用于处理数据的组件,您可以在管道中对抓取到的数据进行清洗、处理、存储等操作。

  5. 调度器: 调度器负责管理请求的发送顺序,以及处理并发请求的方式,确保爬虫在合理的速率下访问网站。

  6. 自动限速: Scrapy 自带自动限速功能,以避免对目标网站造成过多负担。

  7. 异步支持: Scrapy 支持异步处理,能够高效地执行多个请求和处理操作。

  8. 扩展性: 您可以根据需要编写扩展来定制 Scrapy 的行为,如添加新的中间件、管道等。

  9. 命令行工具: Scrapy 提供了命令行工具,方便用户创建、管理和运行爬虫。

  10. 文档丰富: Scrapy 提供详细的官方文档和教程,使新用户能够快速入门,并且为高级用户提供深入了解框架的资源。

总之,Scrapy 是一个功能强大且高度可定制的网络爬虫框架,适用于各种规模的数据抓取项目,从简单的数据收集任务到复杂的数据挖掘和分析。无论您是初学者还是有经验的开发人员,都可以利用 Scrapy 快速有效地构建和管理爬虫。

2 Scrapy选择器

        Scrapy 提供了两种主要的选择器用于从网页中提取数据:基于 XPath 的选择器和基于 CSS 的选择器。这两种选择器都能够让您轻松地从 HTML 或 XML 文档中定位和提取所需的数据。

  1. 基于 XPath 的选择器: XPath(XML Path Language)是一种用于在 XML 文档中定位元素的语言。在 Scrapy 中,XPath 选择器允许您通过路径表达式来选择和提取数据。以下是一些常见的 XPath 表达式示例:

    • 选择元素://elementName(选取所有名称为 elementName 的元素)
    • 选择特定路径下的元素://parent/child(选取 parent 元素下的所有 child 元素)
    • 选择具有特定属性的元素://element[@attribute='value'](选取具有 attribute 属性且值为 value 的元素)
  2. 基于 CSS 的选择器: CSS(Cascading Style Sheets)选择器在网页设计中常用于样式设置,但它们也可以用于从 HTML 文档中选择元素。Scrapy 中的 CSS 选择器允许您使用类似于 CSS 选择器的语法来定位和提取数据。以下是一些常见的 CSS 选择器示例:

    • 选择元素:elementName(选取所有名称为 elementName 的元素)
    • 选择类:.className(选取所有具有 className 类的元素)
    • 选择 ID:#idName(选取具有 idName ID 的元素)
    • 选择路径下的元素:parent > child(选取 parent 元素下的所有 child 元素)

在 Scrapy 中,您可以使用这些选择器来定位和提取网页中的数据。以下是使用 Scrapy 选择器的示例代码:

from scrapy.selector import Selectorhtml_content = """
<html><body><div class="container"><h1>Title</h1><p>Paragraph 1</p><p>Paragraph 2</p></div></body>
</html>
"""selector = Selector(text=html_content)# 使用 XPath 选择器提取数据
title = selector.xpath("//h1/text()").get()
paragraphs = selector.xpath("//p/text()").getall()# 使用 CSS 选择器提取数据
title = selector.css("h1::text").get()
paragraphs = selector.css("p::text").getall()

无论您选择使用 XPath 还是 CSS 选择器,Scrapy 都提供了方便的方法来从网页中提取所需的数据,使数据抓取任务变得更加简单和高效。 

3 快速创建Scrapy 爬虫

        创建一个简单的 Scrapy 爬虫可以分为以下几个步骤。以下示例将引导您创建一个爬取名言的简单爬虫。

  1. 安装 Scrapy: 首先,您需要确保已经安装了 Python 和 Scrapy。如果尚未安装 Scrapy,可以使用以下命令进行安装:
pip install scrapy

创建新的 Scrapy 项目: 在命令行中,导航到您希望创建项目的目录,并运行以下命令来创建新的 Scrapy 项目:

scrapy startproject quotes_spider

这将在当前目录下创建一个名为 "quotes_spider" 的项目目录。

(1)创建爬虫: 在项目目录下,进入到 "quotes_spider" 目录,并运行以下命令来创建一个爬虫:

cd quotes_spider
scrapy genspider quotes quotes.toscrape.com

这将创建一个名为 "quotes" 的爬虫,它将从 "quotes.toscrape.com" 网站爬取数据。

(2)编辑爬虫代码: 在 "quotes_spider/spiders" 目录下找到名为 "quotes.py" 的文件,这是刚刚创建的爬虫文件。使用您喜欢的编辑器打开该文件,并编辑 start_urlsparse 方法:

import scrapyclass QuotesSpider(scrapy.Spider):name = "quotes"start_urls = ['http://quotes.toscrape.com/page/1/',]def parse(self, response):for quote in response.css('div.quote'):yield {'text': quote.css('span.text::text').get(),'author': quote.css('span small::text').get(),}next_page = response.css('li.next a::attr(href)').get()if next_page is not None:yield response.follow(next_page, self.parse)

在这个示例爬虫中,我们从名言网站爬取名言文本和作者信息。parse 方法负责从网页中提取数据,并通过使用 response.follow 方法来跟踪下一页链接。

(3)运行爬虫: 回到项目目录("quotes_spider" 目录)并运行以下命令来运行爬虫:

scrapy crawl quotes

        爬虫将开始访问起始 URL,抓取数据并显示在终端上。

        这是一个简单的 Scrapy 爬虫创建过程示例。实际上,您可以根据需要定制爬虫的各个方面,包括请求头、管道、中间件等。通过阅读 Scrapy 的官方文档,您可以深入了解如何创建更复杂和定制的爬虫。

4 下载器与爬虫中间件

        在 Scrapy 框架中,下载器中间件和爬虫中间件是两种不同类型的中间件,用于在请求/响应的处理流程中插入自定义的逻辑。它们分别位于请求的发送和响应的接收过程中,允许您对网络请求和数据处理进行修改和控制。

下载器中间件(Downloader Middleware): 下载器中间件位于请求发送过程中,负责对请求进行处理,以及在响应返回之前的操作。这些中间件可以用于修改请求头、设置代理、处理cookies等。下载器中间件可以在全局范围或特定爬虫范围内进行配置。

一些常见的下载器中间件操作包括:

  • 修改请求头,以模拟不同类型的浏览器请求。
  • 配置代理服务器,用于隐藏爬虫的真实 IP 地址。
  • 处理 cookies,以保持会话状态。
  • 对请求进行重试和错误处理。
  • 控制请求的并发性。

爬虫中间件(Spider Middleware): 爬虫中间件位于响应接收和数据处理过程中,负责对响应和提取的数据进行处理。这些中间件可以用于修改爬取到的数据、处理异常、进行数据转换等。爬虫中间件可以在全局范围或特定爬虫范围内进行配置。

一些常见的爬虫中间件操作包括:

  • 对从网页中提取的数据进行预处理和清洗。
  • 自定义数据转换,如日期格式化、文本处理等。
  • 处理异常,如被封 IP 的处理策略。
  • 控制数据的流向和过滤。

配置中间件在 Scrapy 的 settings.py 文件中进行。您可以为每个中间件设置优先级,以确定它们在处理流程中的顺序。更具体地说,下载器中间件的优先级较高的将首先处理请求,而爬虫中间件的优先级较高的将首先处理响应和提取的数据。

以下是一个简单的示例,展示了如何配置下载器和爬虫中间件:

# settings.pyDOWNLOADER_MIDDLEWARES = {'myproject.middlewares.MyDownloaderMiddleware': 543,
}SPIDER_MIDDLEWARES = {'myproject.middlewares.MySpiderMiddleware': 543,
}

        在上面的示例中,myproject.middlewares.MyDownloaderMiddlewaremyproject.middlewares.MySpiderMiddleware 分别是自定义的下载器和爬虫中间件。它们的优先级设置为 543。

        通过使用下载器和爬虫中间件,您可以在请求和响应的处理流程中插入自定义的逻辑,实现更灵活、高效和符合您需求的爬虫。

5 使用管道Pielines

        在 Scrapy 中,管道(Pipeline)是用于处理爬虫抓取到的数据的组件。它允许您在数据从爬虫抓取到最终保存或处理的过程中进行多个操作,如数据清洗、验证、存储到数据库、导出到文件等。Scrapy 的管道提供了一种灵活且可定制的方式来处理爬取的数据流。

以下是如何使用管道来处理爬取到的数据:

(1)启用管道: 在 Scrapy 的配置文件(settings.py)中,您需要启用并配置管道。您可以在 ITEM_PIPELINES 设置中指定要使用的管道类及其优先级。优先级是一个整数值,较小的值表示较高的优先级。

# settings.pyITEM_PIPELINES = {'myproject.pipelines.MyPipeline': 300,
}

在上面的示例中,myproject.pipelines.MyPipeline 是您自定义的管道类,优先级被设置为 300。

(2)创建管道类: 在项目中创建一个管道类,该类将处理爬虫抓取到的数据。您需要实现一些方法来处理数据,例如 process_item 方法。

# pipelines.pyclass MyPipeline:def process_item(self, item, spider):# 在这里处理数据,可以进行清洗、验证、存储等操作return item

在上面的示例中,process_item 方法接收两个参数:item 表示爬虫抓取到的数据项,spider 表示当前爬虫实例。

(3)处理数据: 在管道类的 process_item 方法中,您可以对数据进行各种操作,如数据清洗、格式化、验证等。您还可以将数据保存到数据库、导出到文件等。

以下是一个简单的示例,展示了如何在管道中处理爬取到的数据并保存到 JSON 文件中:

# pipelines.pyimport jsonclass MyPipeline:def open_spider(self, spider):self.file = open('data.json', 'w')def close_spider(self, spider):self.file.close()def process_item(self, item, spider):data = {'text': item['text'],'author': item['author']}json.dump(data, self.file)self.file.write('\n')return item

在上面的示例中,open_spiderclose_spider 方法在爬虫开始和结束时分别被调用,打开和关闭数据文件。process_item 方法将数据提取并保存到 JSON 文件中。

通过配置和编写自定义的管道类,您可以对爬取到的数据进行各种操作,从而实现高度定制化的数据处理流程。

相关文章:

【100天精通python】Day45:python网络爬虫开发_ Scrapy 爬虫框架

目录 1 Scrapy 的简介 2 Scrapy选择器 3 快速创建Scrapy 爬虫 4 下载器与爬虫中间件 5 使用管道Pielines 1 Scrapy 的简介 Scrapy 是一个用于爬取网站数据并进行数据提取的开源网络爬虫框架。它使用 Python 编程语言编写&#xff0c;并提供了一套强大的工具和库&#xff0…...

怎么写出更好的高质量内容输出

为了更好地输出高质量的内容&#xff0c;不仅仅需要了解写作的基本原则&#xff0c;还需要深入挖掘目标读者的需求、持续的自我提升以及对信息的严格筛选。以下是一些建议&#xff0c;帮助你更好地输出高质量的内容&#xff1a; 1.充分了解你的受众 调查和了解你的目标读者&am…...

HJ31 单词倒排 题解

题目描述&#xff1a;单词倒排_牛客题霸_牛客网 (nowcoder.com) 对字符串中的所有单词进行倒排。 1、构成单词的字符只有26个大写或小写英文字母&#xff1b; 2、非构成单词的字符均视为单词间隔符&#xff1b; 3、要求倒排后的单词间隔符以一个空格表示&#xff1b;如果原字符…...

LeetCode42.接雨水

这道题呢可以按列来累加&#xff0c;就是先算第1列的水的高度然后再加上第2列水的高度……一直加到最后就是能加的水的高度&#xff0c;我想到了这里然后就想第i列的水其实就是第i-1列和i1列中最小的高度减去第i列的高度&#xff0c;但是其实并不是&#xff0c;比如示例中的第5…...

优化时间流:区间调度问题的探索与解决

在浩如烟海的信息时代&#xff0c;时间的有效管理成为了一门不可或缺的艺术。无论是生活中的琐事&#xff0c;还是工作中的任务&#xff0c;时间都在无声地流逝&#xff0c;挑战着我们的智慧。正如时间在日常生活中具有的宝贵价值一样&#xff0c;在计算机科学领域&#xff0c;…...

【Python】强化学习:原理与Python实战

搞懂大模型的智能基因&#xff0c;RLHF系统设计关键问答 RLHF&#xff08;Reinforcement Learning with Human Feedback&#xff0c;人类反馈强化学习&#xff09;虽是热门概念&#xff0c;并非包治百病的万用仙丹。本问答探讨RLHF的适用范围、优缺点和可能遇到的问题&#xff…...

设计模式——合成复用原则

文章目录 合成复用原则设计原则核心思想合成案例聚合案例继承案例优缺点 合成复用原则 原则是尽量使用合成/聚合的方式&#xff0c;而不是使用继承 设计原则核心思想 找出应用中可能需要变化之处&#xff0c;把它们独立出来&#xff0c;不要和那些不需要变化的代码混在一起。…...

基于OpenCV实战(基础知识一)

目录 简介 1.计算机眼中的图像 2.图片的读取、显示与保存 3.视频的读取与显示 简介 OpenCV是一个流行的开源计算机视觉库&#xff0c;由英特尔公司发起发展。它提供了超过2500个优化算法和许多工具包&#xff0c;可用于灰度、彩色、深度、基于特征和运动跟踪等的图像处理和…...

如何高效的接入第三方接口

作为程序员的我们,经常会接到领导的安排,接入某某的接口,方面我们如何如何, 例如:领导在1号时给作为员工的你说,最近系统需要增加一个新的支付方式,一会和对方技术组建一个群,有什么问题,可以直接在群里说,最近还说,尽快接入,客户等着用,让你在5号前,完成接入工…...

docker pip下载依赖超时或失败问题解决

Docker容器使用pip安装Python库时超时&#xff0c;可能是由于多种原因。以下是一些建议和解决方法&#xff1a; 使用国内镜像源: 如果你位于中国&#xff0c;可以尝试更换到国内的镜像源。例如&#xff0c;可以使用阿里云、腾讯云、清华大学提供的镜像。 你可以在Dockerfile中添…...

python并发编程

一、程序提速的方法 二、python对并发编程的支持 多线程&#xff1a;threading&#xff0c;利用CPU和IO可以同时执行的原理&#xff0c;让CPU不会干巴巴等待IO完成&#xff1b;多进程&#xff1a;multiprocess&#xff0c;利用多核CPU的能力&#xff0c;真正的并行执行任务&am…...

【面试题】:前端怎么实现权限设计及遇到的bug

一.权限的概念 前端权限分为页面权限、按钮权限、API权限。 二.页面权限的实现过程 ①用户登录进去调用获取用户信息接口&#xff0c;后端会给我们返回一个权限标识符 ②在获取到数据之后,我们就要判断用户能访问到哪些页面,我们可以在vuex中permission模块中的action…...

Vue 2 插槽

可以先阅读组件基础-简单了解通过插槽分发内容。 一、插槽定义 插槽将子组件标签间的内容分发到子组件模板的<slot>标签位置。 如果没有<slot>标签&#xff0c;那么该内容将被丢弃。 二、编译作用域 内容在哪个作用域编译&#xff0c;就可以访问哪个作用域的数据…...

Spring 容器启动耗时统计

为了了解 Spring 为什么会启动那么久&#xff0c;于是看了看怎么统计一下加载 Bean 的耗时。 极简版 几行代码搞定。 import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;import java.util.HashMap; imp…...

1. 优化算法学习

参考文献 1609&#xff1a;An overview of gradient descent optimization algorithms 从 SGD 到 Adam —— 深度学习优化算法概览(一) - 知乎 机器学习札记 - 知乎...

再获荣誉丨通付盾WAAP解决方案获“金鼎奖”优秀金融科技解决方案

今年四月&#xff0c;2023中国国际金融展在首钢会展中心成功落下帷幕。中国国际金融展作为金融开放创新成果的展示、交流、传播平台&#xff0c;历经多年发展,已成为展示中国金融发展成就、宣传金融改革成果、促进金融产业创新和推动金融信息化发展的有效平台。 “金鼎奖”评选…...

【腾讯云 TDSQL-C Serverless 产品测评】“橡皮筋“一样的数据库『MySQL高压篇』

【腾讯云 TDSQL-C Serverless 产品测评】"橡皮筋"一样的数据库 活动介绍服务一览何为TDSQL &#xff1f;Serverless 似曾相识&#xff1f; 降本增效&#xff0c;不再口号&#xff1f;动手环节 --- "压力"山大实验前瞻稍作简介资源扩缩范围&#xff08;CCU&…...

python http文件上传

server端代码 import os import cgi from http.server import SimpleHTTPRequestHandler, HTTPServer# 服务器地址和端口 host = 0.0.0.0 port = 8080# 处理文件上传的请求 class FileUploadHandler(SimpleHTTPRequestHandler):def do_POST(self):# 解析多部分表单数据form = …...

Android学习之路(9) Intent

Intent 是一个消息传递对象&#xff0c;您可以用来从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信&#xff0c;但其基本用例主要包括以下三个&#xff1a; 启动 Activity Activity 表示应用中的一个屏幕。通过将 Intent 传递给 startActivity()&…...

vue项目配置git提交规范

vue项目配置git提交规范 一、背景介绍二、husky、lint-staged、commitlint/cli1.husky2.lint-staged3.commitlint/cli 三、具体使用1.安装依赖2.运行初始化脚本3.在package.json中配置lint-staged4.根目录新增 commitlint.config.js 4.提交测试1.提示信息格式错误时2.eslint校验…...

影响交叉导轨运行速度的因素有哪些?

交叉导轨具有精度高&#xff0c;速度快&#xff0c;承载能力大、结构简单等特点&#xff0c;被广泛应用在固晶机、点胶设备、自动化设备、OA机器及其周边机器、测定器、印刷基板开孔机&#xff0c;精密机器&#xff0c;光学测试仪、光学工作台、操纵机构、X 射缐装置等的滑座部…...

List转Map

一、list转map Map<Long, User> maps userList.stream().collect(Collectors.toMap(User::getId,Function.identity())); 看来还是使用JDK 1.8方便一些。 二、另外&#xff0c;转换成map的时候&#xff0c;可能出现key一样的情况&#xff0c;如果不指定一个覆盖规则&…...

ES:一次分片设计问题导致的故障

### 现象&#xff1a; 1. 单节点CPU持续高 2.写入骤降 3.线程池队列积压&#xff0c;但没有reject 4.使用方没有记录日志 ### 排查 1.ES监控 只能看到相应的结果指标&#xff0c;无法反应出原因。 2.ES日志&#xff1a;大量日志打印相关异常&#xff08;routate等调用栈&a…...

vue 简单实验 自定义组件 综合应用 传参数 循环

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"todo-list-app"><ol><!--现在我们为每个 todo-item 提供 todo 对象todo 对象是变量&#xff0c;即其内容可以是动态的。…...

【OpenCV实战】2.OpenCV基本数据类型实战

OpenCV基本数据类型实战 〇、实战内容1 OpenCV helloworld1.1 文件结构类型1.2 CMakeList.txt1.3 Helloworld 2. Image的基本操作3. OpenCV 基本数据类型4. 读取图片的像素 & 遍历图片4.1 获取制定像素4.2 遍历图片 5. 图片反色5.1 方法1 &#xff1a;遍历5.2 方法2 &#…...

MyBatis进阶:告别SQL注入!MyBatis分页与特殊字符的正确使用方式

目录 引言 一、使用正确的方式实现分页 1.1.什么是分页 1.2.MyBatis中的分页实现方式 1.3.避免SQL注入的技巧 二、特殊字符的正确使用方式 2.1.什么是特殊字符 2.2.特殊字符在SQL查询中的作用 2.3.如何避免特殊字符引起的问题 2.3.1.使用CDATA区段 2.3.2.使用实体引…...

安装Node(脚手架)

目录 一&#xff0c;安装node&#xff08;脚手架&#xff09;1.1&#xff0c; 配置vue.config.js1.2&#xff0c; vue-cli3x的目录介绍1.3&#xff0c; package.json 最后 一&#xff0c;安装node&#xff08;脚手架&#xff09; 从官网直接下载安装即可&#xff0c;自带npm包管…...

R语言10-R语言中的循环结构

在R语言中&#xff0c;有几种常用的循环结构&#xff0c;可以用来多次执行特定的代码块。以下是其中的两种主要循环结构&#xff1a; for循环&#xff1a; for 循环用于按照一定的步长迭代一个序列&#xff0c;通常用于执行固定次数的循环。 for (i in 1:5) {print(i) }while…...

【Spring】一次性打包学透 Spring | 阿Q送书第五期

文章目录 如何竭尽可能确保大家学透Spring1. 内容全面且细致2. 主题实用且本土化3. 案例系统且完善4. 知识有趣且深刻 关于作者丁雪丰业内专家推图书热卖留言提前获赠书 不知从何时开始&#xff0c;Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中&#xff0c;很…...

第 7 章 排序算法(4)(插入排序)

7.7插入排序 7.7.1插入排序法介绍: 插入式排序属于内部排序法&#xff0c;是对于欲排序的元素以插入的方式找寻该元素的适当位置&#xff0c;以达到排序的目的。 7.7.2插入排序法思想: 插入排序&#xff08;Insertion Sorting&#xff09;的基本思想是&#xff1a;把n个待排…...

JavsScript知识框架

JavaScript学习框架性总结 要系统性地精通 JavaScript&#xff0c;需要涵盖广泛的知识点&#xff0c;从基础到高级。以下是一些需要掌握的关键知识点&#xff08;当然不止这些&#xff09;&#xff1a; 基础语法和核心概念&#xff1a; 变量、数据类型、运算符作用域闭包this …...

el-input添加自定义指令只允许输入中文/英文/数字,兼容输入法事件

省流 script: directives: {regexp: {inserted: (el, binding, vnode) > {let composition falseconst formatValue function (e) {if (composition) return// vnode.componentInstance组件实例vnode.componentInstance.$emit(input, e.target.value.replace(/[^\u4e00-…...

0基础学习VR全景平台篇 第89篇:智慧眼-安放热点

一、功能说明 安放热点&#xff0c;是智慧眼成员们正式进入城市化管理的第一步&#xff0c;即发现问题后以安放热点的形式进行标记&#xff0c;再由其他的角色成员对该热点内容作出如核实、处理、确认完结等操作&#xff08;具体流程根据项目实际情况而定&#xff09;。 二、…...

java中用SXSSFWorkbook把多个list数据和单个实体dto导出到excel如何导出到多个sheet页详细实例?(亲测)

以下是一个详细的示例&#xff0c;展示了如何使用SXSSFWorkbook将多个List数据和单个实体DTO导出到多个Sheet页&#xff1a; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.S…...

SpringBoot 01 如何创建 和pom的解析

目录 1 Springboot的创建 步骤 2 项目的书写和运行 创建service包并在其下写一个service文件 项目的运行 pom文件的一些配置 parent web test 打包 打包过程 1 Springboot的创建 步骤 首先new一个新项目 然后依照如下创建 2 项目的书写和运行 创建service包并…...

axios详解

1.安装axios&#xff1a;npm install axios&#xff0c;等待安装完毕即可 2.引用axios&#xff1a;在需要使用的页面中引用 import axios from axios即可 get和post大同小异&#xff0c;一个是跟在url后面一个是跟在请求体里的 axios({method&#xff1a;"post/get&quo…...

Docker分布式仓库

Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器&#xff0c;由 vmware 开源&#xff0c;其通过添加一些企业必需的功能特性&#xff0c;例如安全、标识和管理等&#xff0c;扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器&#xff0c…...

SQL注入之万能用户名

文章目录 分析代码原理实现 分析代码 在安装的cms数据库目录C:\phpStudy\WWW\cms\admin下找到login.action.php文件&#xff0c;查看第20行&#xff0c;发现如下php代码&#xff1a; $user_row $db->getOneRow("select userid from cms_users where username "…...

ubuntu20搭建环境使用的一下指令

1.更新源 sudo vim etc/apt/sources.listdeb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src http://mirrors.aliyun.com/ubuntu/ xenial maindeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates…...

GAN(生成对抗网络)

简介&#xff1a;GAN生成对抗网络本质上是一种思想&#xff0c;其依靠神经网络能够拟合任意函数的能力&#xff0c;设计了一种架构来实现数据的生成。 原理&#xff1a;GAN的原理就是最小化生成器Generator的损失&#xff0c;但是在最小化损失的过程中加入了一个约束&#xff0…...

实时同步ES技术选型:Mysql+Canal+Adapter+ES+Kibana

基于之前的文章&#xff0c;精简操作而来 让ELK在同一个docker网络下通过名字直接访问Ubuntu服务器ELK部署与实践使用 Docker 部署 canal 服务实现MySQL和ES实时同步Docker部署ES服务&#xff0c;canal全量同步的时候内存爆炸&#xff0c;ES/Canal Adapter自动关闭&#xff0c…...

禅道后台命令执行漏洞

漏洞简介 禅道是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体&#xff0c;是一款专业的研发项目管理软件&#xff0c;完整地覆盖了项目管理的核心流程。 禅道管理思想注重实效&#xff0c;功能完备丰富&#xff0c;…...

基于Spark+django的国漫推荐系统--计算机毕业设计项目

近年来&#xff0c;随着互联网的蓬勃发展&#xff0c;企事业单位对信息的管理提出了更高的要求。以传统的管理方式已无法满足现代人们的需求。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;随着各行业的不断发展&#xff0c;基…...

向量数据库 Milvus:实现高效向量搜索的技术解析

引言 随着人工智能、机器学习和深度学习技术的不断发展&#xff0c;越来越多的应用开始使用向量表示数据。向量数据具有高维、稀疏和相似性等特点&#xff0c;传统的关系型数据库和键值存储在处理这类数据时面临许多挑战。为了满足大规模、高并发的向量搜索需求&#xff0c;出现…...

恒运资本:信创概念再度活跃,华是科技再创新高,南天信息等涨停

信创概念21日盘中再度活跃&#xff0c;截至发稿&#xff0c;华是科技涨超17%&#xff0c;盘中一度触及涨停再创新高&#xff0c;中亦科技涨超13%亦创出新高&#xff0c;久其软件、南天信息、新炬网络、英飞拓均涨停。 音讯面上&#xff0c;自8月3日以来&#xff0c;财政部官网连…...

Synchronized锁升级

Java Synchronized 重量级锁原理深入剖析上(互斥篇) 为什么映入Monitor 处在重量级锁状态时说明有线程没拿到锁需要阻塞等待锁&#xff0c;当拥有锁的线程释放锁后唤醒它继续竞争锁。此处就引入了一个问题&#xff1a;其它线程如何找到被阻塞的线程&#xff1f;我们很容易想到…...

记一个宏定义写法

记一个宏定义写法 最近在看libevent源码&#xff0c;看到一个有趣的宏写法。特此记录。方便日后巩固学习。 源码写法&#xff1a; #define HT_FIND(name, head, elm) name##_HT_FIND((head), (elm))首先来简单分析一下&#xff1a; 定睛一看是一个宏&#xff0c;##是连接符…...

【数据结构】C语言实现栈(详细解读)

前言: &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--C语言实现栈 目录 什么是栈 栈的概念及结构 实现栈的方式 链表的优缺点: 顺序表的优缺点: 栈…...

3、Spring_容器执行

容器执行点 1.整合 druid 连接池 添加依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version> </dependency>1.硬编码方式整合 新建德鲁伊配置 <?xml version"1.…...

五、pikachu之RCE

文章目录 1、RCE概述2、exec "ping"3、exec"evel"4、连接符 1、RCE概述 RCE&#xff08;emote command/code execute&#xff09;&#xff1a;可以让攻击者直接向后台服务器远程注入操作系统命令或者代码&#xff0c;从而控制后台系统。 远程系统命令执行 …...