爬虫框架Scrapy学习笔记-2

前言

Scrapy是一个功能强大的Python爬虫框架,它被广泛用于抓取和处理互联网上的数据。本文将介绍Scrapy框架的架构概览、工作流程、安装步骤以及一个示例爬虫的详细说明,旨在帮助初学者了解如何使用Scrapy来构建和运行自己的网络爬虫。
爬虫框架Scrapy学习笔记-1

文章目录

  • 前言
  • Scrapy架构概览
    • Scrapy工作流程
    • 更形象的Scrapy工作流程
      • 角色对应
      • 工作流程
    • Scrapy安装
    • Scrapy的工作流程
  • 实例
    • 创建
    • xyx/xyx/spiders/xiaoyx.py
    • yield和return
    • xyx/xyx/pipelines.py
    • Pipeline详解
    • 运行
  • 总结

Scrapy架构概览

Scrapy由以下主要组件构成:

  • 引擎(Engine):负责控制数据流在各个组件之间的流动,触发事务。
  • 调度器(Scheduler):接收引擎发过来的Request请求,去重后入队列,并在合适时机返回请求给引擎。
  • 下载器(Downloader):负责获取Scrapy引擎发送的Request请求对应的响应,并返回Response给引擎。
  • 爬虫(Spider):解析响应内容,提取Item字段数据或生成额外的Request请求。
  • 项目管道(Pipeline):处理爬虫提取出的Item,进行后续处理,例如数据清洗、存储等。
  • 下载器中间件(Downloader Middlewares):可以自定义扩展下载器的功能和行为。
  • 爬虫中间件(Spider Middlewares):可以自定义扩展爬虫的功能和行为。

在这里插入图片描述

Scrapy工作流程

  1. Engine打开一个网站(启动请求)并将其交给Scheduler入队
  2. Scheduler处理后出队,通过Downloader Middlewares发送给Downloader执行
  3. Downloader获取网页数据,并通过Downloader Middlewares返回Response
  4. Response经过Spider Middlewares发送给Spider
  5. Spider解析Response,提取Item和生成Request
  6. Item经过Spider Middlewares,发送给Item Pipeline处理
  7. Request经过Spider Middlewares,发送给Scheduler入队
  8. Scheduler发送新的Request给Downloader,重复2-7步

更形象的Scrapy工作流程

Scrapy就是一个采集工厂,组件对应如下:

角色对应

  • Engine - 主管
  • Scheduler - 仓库管理员
  • Downloader - 采购员
  • Spider - 加工组装工人
  • Item Pipeline - 质检部门和成品仓库
  • Downloader Middlewares - 采购助手
  • Spider Middlewares - 流水线管理工程师

工作流程

  1. 主管指示仓库管理员提供原材料 —— Engine打开网站,交给Scheduler
  2. 仓库管理员按顺序取出原材料清单 —— Scheduler处理后出队
  3. 将原材料清单给采购员采购 —— 通过Downloader Middlewares发送给Downloader
  4. 采购员出去采购,并由助手进行预处理 —— Downloader获取数据,通过Downloader Middlewares返回Response
  5. 将采购回来的原材料给工人加工组装 —— Response经Spider Middlewares发送给Spider
  6. 工程师检查工作流程的合规性,并优化 —— Spider解析Response,提取Item和生成Request
  7. 产品送到质检和成品仓库 —— Item经Spider Middlewares发送给Item Pipeline
  8. 工人反馈还需要原材料清单 —— Request经Spider Middlewares发送给Scheduler
  9. 重复2-8步,直到订单完成 —— Scheduler发送Request给Downloader,进入下一个循环

Scrapy安装

建议单独开新环境,使用Virtualenv环境或Conda环境
半自动化使用.bat手动打包迁移python项目

python3.9
scrapy 2.5.1 -> scrapy-redis(0.7.2)

注意, 由于scrapy的升级.
导致scrapy-redis无法正常使用.所以这里我们选择2.5.1这个版本作为学习.
后期可以根据scrapy-redis的升级而跟着升级
安装完成后. 请调整OpenSSL的版本.
总之, 最终你的控制台输入scrapy version和crapy version --verbose
能显示版本号. 就算成功了

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scrapy==2.5.1
pip install pyopenssl==22.0.0
pip install cryptography==36.0.2 
scrapy version
scrapy version --verbose 

Scrapy的工作流程

  1. 需要创建项目
    scrapy startproject 项目名
  2. 进入到项目目录
    cd 项目名
  3. 生成spider
    scrapy genspider 爬虫的名字 网站的域名
  4. 调整spider
    给出start_urls
    以及如何解析数据. parse

例如,你可以运行:

scrapy startproject demo
cd demo
scrapy genspider example example.com

你会得到

demo/demo/spiders/example.py
# 导入scrapy框架
import scrapy# 定义爬虫类 ExampleSpider,继承自scrapy.Spider
class ExampleSpider(scrapy.Spider):# 定义爬虫名称name = 'example' # 允许爬取的域名列表allowed_domains = ['example.com']# 起始URL列表start_urls = ['http://example.com/']# 解析响应内容的回调函数def parse(self, response):pass# 简单打印一下响应内容# print(response.text)# 可以在这里使用提取器提取数据# 使用yield关键字yield Request生成其他请求
  1. 调整settings配置文件
    干掉日志的信息(想留下有用的内容), 只需要调整日志记录级别.
    LOG_LEVEL = “WARNING”
demo/demo/settings.py# Scrapy项目的设置
#
# 为了简单起见,这个文件只包含了被认为重要或常用的设置。您可以在文档中找到更多设置:
#
#     https://docs.scrapy.org/en/latest/topics/settings.html
#     https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://docs.scrapy.org/en/latest/topics/spider-middleware.htmlBOT_NAME = 'demo'  # 机器人名称SPIDER_MODULES = ['demo.spiders']  # 爬虫模块位置
NEWSPIDER_MODULE = 'demo.spiders' # 新建爬虫的模块位置# 通过在User-Agent中标识自己(和自己的网站)来负责任地爬取
# USER_AGENT = 'demo (+http://www.yourdomain.com)'# 遵守robots.txt规则
ROBOTSTXT_OBEY = True# 配置Scrapy执行的最大并发请求数量(默认值: 16)(Scrapy默认是携程人物)
# CONCURRENT_REQUESTS = 32# 为相同网站的请求配置延迟(默认值: 0)建议打开调大
# 请参阅 https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# 还请参阅自动限速设置和文档
# DOWNLOAD_DELAY = 3# 下载延迟设置只会考虑以下之一:
# CONCURRENT_REQUESTS_PER_DOMAIN = 16
# CONCURRENT_REQUESTS_PER_IP = 16# 禁用Cookies(默认启用)
# COOKIES_ENABLED = False# 禁用Telnet控制台(默认启用)
# TELNETCONSOLE_ENABLED = False# 覆盖默认的请求头:
# DEFAULT_REQUEST_HEADERS = {
#    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#    'Accept-Language': 'en',
# }# 启用或禁用爬虫中间件
# 请参阅 https://docs.scrapy.org/en/latest/topics/spider-middleware.html
# SPIDER_MIDDLEWARES = {
#    'demo.middlewares.DemoSpiderMiddleware': 543,
# }# 启用或禁用下载器中间件
# 请参阅 https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# DOWNLOADER_MIDDLEWARES = {
#    'demo.middlewares.DemoDownloaderMiddleware': 543,
# }# 启用或禁用扩展
# 请参阅 https://docs.scrapy.org/en/latest/topics/extensions.html
# EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
# }# 配置Item管道
# 请参阅 https://docs.scrapy.org/en/latest/topics/item-pipeline.html
# ITEM_PIPELINES = {
#    'demo.pipelines.DemoPipeline': 300,
# }# 启用并配置自动限速扩展(默认禁用)
# 请参阅 https://docs.scrapy.org/en/latest/topics/autothrottle.html# 初始下载延迟
# AUTOTHROTTLE_START_DELAY = 5# 在高延迟情况下设置的最大下载延迟
# AUTOTHROTTLE_MAX_DELAY = 60# Scrapy应该并行发送到每个远程服务器的平均请求数
# AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0# 启用显示每个接收到的响应的限速统计信息:
# AUTOTHROTTLE_DEBUG = False# 启用并配置HTTP缓存(默认禁用)
# 请参阅 https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
# HTTPCACHE_ENABLED = True
# HTTPCACHE_EXPIRATION_SECS = 0
# HTTPCACHE_DIR = 'httpcache'
# HTTPCACHE_IGNORE_HTTP_CODES = []
# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
  1. 运行scrapy程序
    scrapy crawl 爬虫的名字

实例

创建

scrapy startproject xyx
cd xyx
scrapy genspider xiaoyx 4399.com

xyx/xyx/spiders/xiaoyx.py

import scrapyclass XiaoyxSpider(scrapy.Spider):name = 'xiaoyx'  # 爬虫的名称allowed_domains = ['4399.com']  # 允许爬取的域名start_urls = ['http://www.4399.com/flash/']  # 初始爬取的URL地址def parse(self, response):# 使用 XPath 提取数据li_list = response.xpath("//ul[@class='n-game cf']/li")  # 选择包含游戏信息的 li 元素列表for li in li_list:name = li.xpath("./a/b/text()").extract_first()  # 提取游戏名称fenlei = li.xpath("./em/a/text()").extract_first()  # 提取分类信息shijian = li.xpath("./em/text()").extract_first()  # 提取时间信息# 使用 yield 返回提取的数据yield {"name": name,      # 游戏名称"fenlei": fenlei,  # 分类信息"shijian": shijian  # 时间信息}

这段代码是一个使用 Scrapy 框架编写的网络爬虫,用于从 ‘http://www.4399.com/flash/’ 网站上提取游戏信息。以下是代码的详细解释:

  • import scrapy:导入 Scrapy 框架的模块。

  • class XiaoyxSpider(scrapy.Spider):定义了一个名为 ‘xiaoyx’ 的 Scrapy 爬虫类。

  • name = 'xiaoyx':指定了爬虫的名称。

  • allowed_domains = ['4399.com']:设置允许爬取的域名,确保只爬取指定域名下的页面。

  • start_urls = ['http://www.4399.com/flash/']:指定初始爬取的 URL 地址,爬虫将从这个地址开始运行。

  • def parse(self, response)::定义了处理响应的方法,Scrapy 会自动调用这个方法来处理从初始 URL 获取的响应。

  • li_list = response.xpath("//ul[@class='n-game cf']/li"):使用 XPath 选择器选取包含游戏信息的 li 元素列表。

  • 在循环中,使用 XPath 从每个 li 元素中提取游戏名称、分类信息和时间信息。

  • yield 语句将提取的数据以字典形式返回,每个字典代表一个游戏信息。

这个爬虫的主要功能是从指定网页上提取游戏信息,并将这些信息以字典的形式输出。这只是爬虫项目的一部分,通常你还需要配置其他设置和数据处理管道来保存或进一步处理爬取到的数据。

yield和return

Scrapy引擎内部是一个不停在执行next()的循环。Scrapy的引擎是一个事件驱动的异步框架,其核心工作方式可以概括为事件循环。这个事件循环就是一个不断迭代的过程,它负责以下工作:

  1. 调度请求(Scheduling Requests):引擎从爬虫的起始URL开始,生成初始的请求并将它们放入请求队列中。

  2. 请求下载(Downloading Requests):下载器(Downloader)从请求队列中获取请求,并通过下载器中间件(Downloader Middleware)发送HTTP请求,然后等待响应。

  3. 处理响应(Handling Responses):一旦下载器获取到响应,引擎会将响应发送给爬虫中间件(Spider Middleware)和爬虫回调函数(Spider Callback)。这是爬虫代码实际处理和解析页面内容的地方。

  4. 生成新请求(Generating New Requests):在爬虫回调函数中,可以生成新的请求并将它们放入请求队列中,以便后续处理。

  5. 重复上述过程:引擎会不断循环执行上述步骤,直到请求队列中没有更多的请求,或者达到了预定的爬取深度或其他终止条件。

这种事件循环的方式使得Scrapy能够高效地爬取数据,并在异步操作下执行多个请求。通过生成器的方式,Scrapy能够实现非阻塞的爬取,即当一个请求等待响应时,引擎可以继续处理其他请求,而不必等待当前请求完成。

这个事件循环和异步操作是Scrapy的关键特性,它有助于高效地处理大量的HTTP请求并提高爬虫的性能。同时,Scrapy还提供了许多配置选项和中间件,使得用户可以灵活地控制和定制爬取过程。

在这个Scrapy爬虫中,使用yield而不是return的原因是因为Scrapy框架是异步的。当使用yield时,它允许你以生成器的方式产生数据并将其返回给Scrapy引擎,然后Scrapy引擎可以将数据逐个处理并传递给后续的管道(pipelines)进行处理、保存或者其他操作。这种异步方式对于爬取大量数据或需要耗费较长时间的请求非常有用,因为它不会阻塞爬虫的执行,而是在数据准备好时才进行处理。

相比之下,如果使用return,它将会立即返回数据并结束parse方法的执行。这可能导致爬虫不够高效,因为它会等待数据处理完成后才能继续执行下一个请求。这样可能会导致爬虫的性能下降,尤其在需要爬取大量页面或需要等待一些异步操作完成时。

总之,使用yield允许你以异步的方式处理数据,从而提高了爬虫的效率和性能。使用return则会阻塞爬虫,可能导致效率低下。因此,在Scrapy爬虫中通常建议使用yield来生成和返回数据。

xyx/xyx/pipelines.py

注意!若使用管道settings.py中的ITEM_PIPELINES 需要打开

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'xyx.pipelines.XyxPipeline': 300,
}

这是一个 Scrapy 数据处理管道(pipeline)的代码示例,用于处理从爬虫中提取的数据并将其保存到一个名为 “data.csv” 的 CSV 文件中。以下是代码的详细解释:

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapterclass XyxPipeline:def process_item(self, item, spider):print("我是管道,我看到的东西是", item)with open("data.csv", mode="a", encoding="utf-8") as f:f.write(f"{item['name']},{item['fenlei']}{item['shijian']}\n")return item

这个代码是一个自定义的Scrapy管道,主要功能是将爬虫提取的数据保存到名为 “data.csv” 的CSV文件中,并在控制台打印出数据。

解释如下:

  • class XyxPipeline::定义了一个名为 XyxPipeline 的管道类。

  • process_item(self, item, spider)::这个方法是Scrapy管道必须实现的方法,它会被自动调用来处理从爬虫中传递过来的数据。在这个例子中,它接受两个参数:item 表示从爬虫传递过来的数据项,spider 表示正在执行的爬虫实例。

  • print("我是管道,我看到的东西是", item):这行代码会在处理数据时在控制台打印出数据项,用于调试和查看数据。

  • with open("data.csv", mode="a", encoding="utf-8") as f::这是一个文件操作,它会打开一个名为 “data.csv” 的CSV文件,用于将数据写入。mode="a" 表示以追加模式打开文件,确保不会覆盖之前的数据。

  • f.write(f"{item['name']},{item['fenlei']},{item['shijian']}\n"):这行代码将提取的数据按照CSV格式写入文件。

  • return item:最后,process_item 方法返回 item,表示数据处理完成。

要使用这个管道,你需要在Scrapy的设置中将它添加到 ITEM_PIPELINES 列表中,并配置合适的优先级。这样,当爬虫提取数据时,数据将被传递给该管道进行处理和保存。

Pipeline详解

在Scrapy的Pipeline中,数据项(item)是从爬虫传递到Pipeline的,而Pipeline的process_item方法接收两个参数:itemspider。下面重点说明这些参数的含义:

  1. itemitem 参数是一个包含了从爬虫中提取的数据的Python字典(或类似对象)。这个数据项包括了爬取到的各种字段和数据。在Pipeline的process_item方法中,你可以访问和处理这些字段,对数据进行清洗、验证、转换或存储等操作。

    例如:

    def process_item(self, item, spider):name = item['name']  # 访问数据项的字段# 对数据进行处理# ...return item  # 可选:返回处理后的数据项
    
  2. spiderspider 参数代表当前正在执行的爬虫实例。虽然在大多数情况下,Pipeline中的数据处理不需要使用spider参数,但它可以提供关于当前爬虫状态和配置的信息,以便更加灵活地处理数据。

总结:Pipeline的process_item方法接收爬虫提取的数据项(item)作为参数,对这些数据进行处理后,可选择性地返回处理后的数据项。返回的数据项将传递给下一个Pipeline(如果有多个Pipeline)或者用于最终的存储和输出。Pipeline的作用是在爬虫和存储之间进行数据处理和转换。

运行

干掉日志的信息(想留下有用的内容), 只需要调整日志记录级别.
LOG_LEVEL = “WARNING”

scrapy crawl xiaoyx

你也可以创建xyx/runner.py

# -*- coding = utf-8 -*-
"""
# @Time : 2023/9/16 22:55
# @Author : FriK_log_ff 374591069
# @File : runner.py
# @Software: PyCharm
# @Function: 请输入项目功能
"""
from scrapy.cmdline import executeif __name__ == "__main__":execute("scrapy crawl xiaoyx".split())

这段代码的作用是调用Scrapy命令行工具来运行名为 “xiaoyx” 的Scrapy爬虫。在执行之前,请确保你已经正确配置了Scrapy项目并且已经定义了名为 “xiaoyx” 的爬虫。

要运行此脚本,可以在命令行中执行它,确保你的工作目录位于包含Scrapy项目的根目录,并且已经安装了Scrapy。一旦执行,它将启动爬虫并开始抓取网页上的数据。

总结

Scrapy是一个强大的网络爬虫框架,适用于各种抓取数据的场景。通过理解其架构和工作流程,你可以更好地利用Scrapy来构建自己的爬虫项目。在本文中,我们介绍了Scrapy的基本概念,提供了安装步骤和示例爬虫代码,希望能够帮助你入门Scrapy,并在实际项目中应用这个强大的工具来获取所需的数据。在使用Scrapy时,记得遵循网站的规则和道德准则,以确保合法和道德的数据采集行为。

特别声明:
此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的记录分享学习技术的过程

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

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

相关文章

Redis的介绍以及简单使用

Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,它以键值对的形式将数据存在内存中,并提供灵活、高性能的数据访问方式。Redis具有高速读写能力和丰富的数据结构支持,可以广泛应用于缓存、消息队列、实…

华为云云耀云服务器L实例评测|轻量级应用服务器对决:基于 STREAM 深度测评华为云云耀云服务器L实例的内存性能

本文收录在专栏:#云计算入门与实践 - 华为云 专栏中,本系列博文还在更新中 相关华为云云耀云服务器L实例评测文章列表如下: 华为云云耀云服务器L实例评测 | 从零开始:云耀云服务器L实例的全面使用解析指南华为云云耀云服务器L实…

Outlook打开超链接用默认浏览器Microsoft outlook open hyperlink using default browser

这两天outlook打开超链接一直用edge,但我的默认浏览器是chrome。 解决方法 在outlook的选项中的高级设置里面,将超链接打开选为默认浏览器。

ESP8266 Windows下开发环境搭建

文章目录 1、SDK下载2、Windows下的开发工具链安装3、ESP8266专用工具链安装4、运行msys32目录下的mingw32.exe,初始化环境5、配置环境变量6、编译hello world例程7、SDK配置8、烧录9、在串口助手中查看 1、SDK下载 官方提供了两种SDK,OS版本和非OS版本…

java springboot 如何实现小程序支付

今天给大家分享java小程序支付 首先我们学习任何东西要先看官网 下面是支付业务流程 我们具体用代码去实现上面的业务流程 功能截图 代码截图 pay(){//调用后台生成订单var orderNumber "20210101123456";var amount 0.01;WxPay.wxpay(app, amount, orderNumber…

(一)探索随机变量及其分布:概率世界的魔法

文章目录 🍋引言🍋什么是随机变量?🍋离散随机变量🍋连续随机变量 🍋随机变量的概率分布🍋离散概率分布🍋0-1分布(Bernoulli分布)🍋二项分布&#…

Unity制作曲线进度条

unity制作曲线进度条 大家好,我是阿赵。   在使用Unity引擎做进度条的时候,有时会遇到一个问题,如果进度条不是简单的横向、纵向或者圆形,而是任意的不规则形状,那该怎么办呢?比如这样的: 一…

CentOS7安装Nginx+ModSecurity

一、介绍 当学习网络安全时,了解和使用安全设备是必不可少的一部分,其中一种常见的安全设备是Web应用防火墙(WAF)。市场上有许多商业化的WAF,但对于学习目的,我推荐使用一款免费开源的WAF,名为…

SpringMVC自定义注解和使用

一.引言 1.简介: 在Spring MVC中,我们可以使用自定义注解来扩展和定制化我们的应用程序。自定义注解是一种通过Java的注解机制定义的特殊注解,可以应用于控制器类、方法或者方法参数上,以实现不同的功能和行为。(注解…

【小记录】jupyter notebook新版本

手欠升级 😅今天手贱,在anaconda navigator里面更新了最新版本的spyder,然后莫名奇妙地jupyter notebook就打不开了😅,报错说缺少模块”ModuleNotFoundError: No module named jupyter_server.contents“,…

4G版本云音响设置教程腾讯云平台版本

文章目录 4G本云音响设置教程介绍一、申请设备三元素1.腾讯云物联网平台2.创建产品3.设置产品参数4.添加设备5.获取三元素 二、设置设备三元素1.打开MQTTConfigTools2.计算MQTT参数3.使用USB连接设备4.设置参数 三、腾讯云物联网套件协议使用说明1.推送协议信息2.topic规则说明…

解决连接数据库提示:Public Key Retrieval is not allowed

最近在使用新的用户连接mysql时,总是提示:Public Key Retrieval is not allowed 解决方法一:在(连接属性)添加allowPublicKeyRetrievaltrue 解决方法二(不建议):先在cmd上登录

分类预测 | Matlab实现RBF-Adaboost多特征分类预测

分类预测 | Matlab实现RBF-Adaboost多特征分类预测 目录 分类预测 | Matlab实现RBF-Adaboost多特征分类预测效果一览基本介绍研究内容程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于RBF-Adaboost数据分类预测(Matlab完整程序和数据) 2.多特征输入…

编译工具:CMake(八) | cmake 常用指令

编译工具:CMake(八) | cmake 常用指令 基本指令 基本指令 ADD_DEFINITIONS向 C/C编译器添加-D 定义,比如:ADD_DEFINITIONS(-DENABLE_DEBUG-DABC),参数之间用空格分割。 如果你的代码中定义了#ifdef ENABLE_DEBUG #end…

canvas-绘图库fabric.js简介

一般情况下简单的绘制,其实canvas原生方法也可以满足,比如画个线,绘制个圆形、正方形、加个文案。 let canvas document.getElementById(canvas);canvas.width 1200;canvas.height 600;canvas.style.width 1200px;canvas.style.height 6…

C++ - AVL 树 介绍 和 实现 (上篇)

前言 之前我介绍了 二叉搜索树,可看一下博客:C - 搜索二叉树_chihiro1122的博客-CSDN博客 二叉搜索树的效率可以达到 O(log n) 。这个复杂度的算法的效率是非常恐怖的,2 的 30 次方大概是 10亿左右。也就是说 如果用暴力查找 需要找 10 亿次&…

护网行动,最全攻略来啦!!!

随着网络技术的不断发展,网络领域被发现的安全威胁越来越多。 病毒入侵、数据窃取、网络攻击等安全事件时常发生,网络已然成为各国无声较量的重要战略空间。 为应对网络安全威胁,严守网络安全底线,公安部自2016年开始组织多家机构…

Windows:虚拟内存的使用

文章目录 简介如何开启并设置虚拟内存如何查看虚拟内存参考文献 简介 windows里什么是虚拟内存? 其实类似Linux里的交换内存/交换页,即将硬盘上一块空间作为虚拟的内存,当物理内存不足时,则可以将不常用的数据从物理内存中转移到…

Godot 和 VScode配置C#环境注意事项

前言 尽管有些博主会建议如果我们熟悉C#的话,最好还是使用GDscript,而且对于小白上手也相对简单,但是C#的性能终究还是比动态语言好,也相比CPP简单些,尽管现在Godot还是有些问题,比如不像unity那样适配swit…

学习笔记-接口测试(postman、jmeter)

目录 一、什么是接口测试 二、前端和后端 三、get请求和post请求的区别 四、cookie和session 五、接口测试的依据 六、HTTP状态码 七、通用接口用例 八、postman接口测试 九、Jmeter接口测试 一、什么是接口测试 通常做的接口测试指的是系统对外的接口,比…