Python爬虫——scrapy-3

news2024/11/18 17:37:24

目录

免责声明

任务

文件简介

爬取当当网内容单管道

pipelines.py

items.py

setting

dang.py

当当网多管道下载图片

pipelines.py

settings

当当网多页下载

dang.py

pielines.py

settings

items.py

总结


免责声明

该文章用于学习,无任何商业用途

文章部分图片来自尚硅谷

任务

爬取当当网汽车用品_汽车用品【价格 品牌 推荐 正品折扣】-当当网页面的全部商品数据

文件简介

在Scrapy框架中,pipelines和items都是用于处理和存储爬取到的数据的工具。

  • Items:Items是用于存储爬取到的数据的容器。它类似于一个Python字典,可以存储各种字段和对应的值。在Scrapy中,你可以定义一个自己的Item类,然后在爬虫中创建Item对象,并将爬取到的数据填充到Item对象中。Items可以在爬取过程中传递给pipelines进行进一步处理和存储。

  • Pipelines:Pipelines是用于处理和存储Item对象的组件。当爬虫爬取到数据后,它会将数据填充到Item对象中,并通过Pipeline进行处理和存储。Pipeline可以在爬取过程中执行各种操作,比如数据的清洗、去重、验证、存储等。你可以定义多个Pipeline,并按优先级顺序执行它们。

在我们的这个项目中就需要用到了


爬取当当网内容单管道

下面的图片来自尚硅谷

pipelines.py

# 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 ItemAdapter

# 如果想使用管道的话,就要在setting中开启
class ScrapyDangdang060Pipeline:
    """
        在爬虫文件开始之前执行
    """
    def open_spider(self, spider):
        print("++++++++++=========")
        self.fp = open('book.json', 'w', encoding='utf-8')


    # item 就是yield后面的book对象
    # book = ScrapyDangdang060Pipeline(src=src, name=name, price=price)
    def process_item(self, item, spider):
        # TODO 一下这种方法并不推荐,因为每传递过来一个对象就打开一个文件
        # TODO 对文件的操作过于频繁
        # (1) write方法必须是字符串,而不能是其他的对象
        # w 会每一个对象都打开一次文件,然后后一个文件会将前一个文件覆盖
        # with open('book.json', 'a', encoding='utf-8') as fp:
        #     fp.write(str(item))

        # todo 这样就解决了文件的打开过于频繁
        self.fp.write(str(item))

        return item

    """
        在爬虫文件执行完成之后执行
    """
    def close_spider(self, spider):
        print("------------------==========")
        self.fp.close()

在setting中解除注释,开启pipelines

ITEM_PIPELINES = {
   # 管道可以有很多个,管道也存在优先级,范围1~1000,值越小,优先级越高
   
   "scrapy_dangdang_060.pipelines.ScrapyDangdang060Pipeline": 300,
}

items.py

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class ScrapyDangdang060Item(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 通俗的说就是我们要下载的数据都有什么

    # 图片
    src = scrapy.Field()
    # 名字
    name = scrapy.Field()
    # 价格
    price = scrapy.Field()

setting

# Scrapy settings for scrapy_dangdang_060 project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     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.html

BOT_NAME = "scrapy_dangdang_060"

SPIDER_MODULES = ["scrapy_dangdang_060.spiders"]
NEWSPIDER_MODULE = "scrapy_dangdang_060.spiders"


# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = "scrapy_dangdang_060 (+http://www.yourdomain.com)"

# Obey robots.txt rules
ROBOTSTXT_OBEY = True

# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)
#COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False

# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
#    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
#    "Accept-Language": "en",
#}

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    "scrapy_dangdang_060.middlewares.ScrapyDangdang060SpiderMiddleware": 543,
#}

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    "scrapy_dangdang_060.middlewares.ScrapyDangdang060DownloaderMiddleware": 543,
#}

# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    "scrapy.extensions.telnet.TelnetConsole": None,
#}

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
# 管道可以有很多个,管道也存在优先级,范围1~1000,值越小,优先级越高
ITEM_PIPELINES = {
   "scrapy_dangdang_060.pipelines.ScrapyDangdang060Pipeline": 300,
}

# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)
# See 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"

# Set settings whose default value is deprecated to a future-proof value
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
FEED_EXPORT_ENCODING = "utf-8"

dang.py

import scrapy
# 这里报错是编译器的问题,但是并不影响下面的代码
from scrapy_dangdang_060.items import ScrapyDangdang060Item

class DangSpider(scrapy.Spider):
    name = "dang"
    allowed_domains = ["category.dangdang.com"]
    start_urls = ["https://category.dangdang.com/cid4002429.html"]

    def parse(self, response):
        print("===============成功================")

        # pipelines 管道用于下载数据
        # items     定义数据结构的
        # src = //ul[@id="component_47"]/li//img/@src
        # alt = //ul[@id="component_47"]/li//img/@alt
        # price = //ul[@id="component_47"]/li//p/span/text()
        # 所有的seletor的对象都可以再次调用xpath
        li_list = response.xpath('//ul[@id="component_47"]/li')
        for li in li_list:
            # 这里页面使用了懒加载,所以不能使用src了
            src = li.xpath('.//a//img/@data-original').extract_first()
            # 前几张图片的和其他图片你的标签属性并不一样
            # 第一章图片的src是可以使用的,其他的图片的地址是data-original
            if src:
                src = src
            else:
                src = li.xpath('.//a//img/@src').extract_first()

            name = li.xpath('.//img/@alt').extract_first()
            # /span/text()
            price = li.xpath('.//p[@class="price"]/span[1]/text()').extract_first()
            # print(src, name, price)

            book = ScrapyDangdang060Item(src=src, name=name, price=price)

            # 获取一个book就将book交给pipelines
            yield book



这样之后就可以拿下book.json也就是当当网这一页的全部json数据了。


当当网多管道下载图片

# (1)定义管道类
# (2)在settings中开启管道
#  "scrapy_dangdang_060.pipelines.DangDangDownloadPipeline": 301,

pipelines.py

# 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 ItemAdapter

# 如果想使用管道的话,就要在setting中开启
class ScrapyDangdang060Pipeline:
    """
        在爬虫文件开始之前执行
    """
    def open_spider(self, spider):
        print("++++++++++=========")
        self.fp = open('book.json', 'w', encoding='utf-8')


    # item 就是yield后面的book对象
    # book = ScrapyDangdang060Pipeline(src=src, name=name, price=price)
    def process_item(self, item, spider):
        # TODO 一下这种方法并不推荐,因为每传递过来一个对象就打开一个文件
        # TODO 对文件的操作过于频繁
        # (1) write方法必须是字符串,而不能是其他的对象
        # w 会每一个对象都打开一次文件,然后后一个文件会将前一个文件覆盖
        # with open('book.json', 'a', encoding='utf-8') as fp:
        #     fp.write(str(item))

        # todo 这样就解决了文件的打开过于频繁
        self.fp.write(str(item))

        return item

    """
        在爬虫文件执行完成之后执行
    """
    def close_spider(self, spider):
        print("------------------==========")
        self.fp.close()

import urllib.request

# 多条管道开启
# (1)定义管道类
# (2)在settings中开启管道
#  "scrapy_dangdang_060.pipelines.DangDangDownloadPipeline": 301,

class DangDangDownloadPipeline:
    def process_item(self, item, spider):
        url = 'https:' + item.get('src')
        filename = './books/' + item.get('name') + '.jpg'

        urllib.request.urlretrieve(url=url, filename=filename)


        return item



settings

ITEM_PIPELINES = {
   "scrapy_dangdang_060.pipelines.ScrapyDangdang060Pipeline": 300,
   # DangDangDownloadPipeline
   "scrapy_dangdang_060.pipelines.DangDangDownloadPipeline": 301,
}

就修改这两处文件,其他的无需变化


当当网多页下载

dang.py

这里寻找了一下不同page页之间的区别,然后使用parse方法来爬取数据

import scrapy
# 这里报错是编译器的问题,但是并不影响下面的代码
from scrapy_dangdang_060.items import ScrapyDangdang060Item

class DangSpider(scrapy.Spider):
    name = "dang"
    # 如果要多页爬取,那么需要调整allowed_domains的范围一般情况下只写域名
    allowed_domains = ["category.dangdang.com"]
    start_urls = ["https://category.dangdang.com/cid4002429.html"]

    base_url = 'https://category.dangdang.com/pg'
    page = 1
    def parse(self, response):
        print("===============成功================")

        # pipelines 管道用于下载数据
        # items     定义数据结构的
        # src = //ul[@id="component_47"]/li//img/@src
        # alt = //ul[@id="component_47"]/li//img/@alt
        # price = //ul[@id="component_47"]/li//p/span/text()
        # 所有的seletor的对象都可以再次调用xpath
        li_list = response.xpath('//ul[@id="component_47"]/li')
        for li in li_list:
            # 这里页面使用了懒加载,所以不能使用src了
            src = li.xpath('.//a//img/@data-original').extract_first()
            # 前几张图片的和其他图片你的标签属性并不一样
            # 第一章图片的src是可以使用的,其他的图片的地址是data-original
            if src:
                src = src
            else:
                src = li.xpath('.//a//img/@src').extract_first()

            name = li.xpath('.//img/@alt').extract_first()
            # /span/text()
            price = li.xpath('.//p[@class="price"]/span[1]/text()').extract_first()
            # print(src, name, price)

            book = ScrapyDangdang060Item(src=src, name=name, price=price)

            # 获取一个book就将book交给pipelines
            yield book

# 每一页的爬取逻辑都是一样的,所以我们只需要将执行的那个页的请求再次调用parse方法即可
# 第一页:https://category.dangdang.com/cid4002429.html
# 第二页:https://category.dangdang.com/pg2-cid4002429.html
# 第三页:https://category.dangdang.com/pg3-cid4002429.html
        if self.page < 100:
            self.page = self.page + 1

            url = self.base_url + str(self.page) + '-cid4002429.html'
            # 调用parse方法
            # 下面的代码就是scrapy的get请求
            # 这里的parse千万不要加括号()
            yield scrapy.Request(url=url, callback=self.parse)




pielines.py

# 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 ItemAdapter

# 如果想使用管道的话,就要在setting中开启
class ScrapyDangdang060Pipeline:
    """
        在爬虫文件开始之前执行
    """
    def open_spider(self, spider):
        print("++++++++++=========")
        self.fp = open('book.json', 'w', encoding='utf-8')


    # item 就是yield后面的book对象
    # book = ScrapyDangdang060Pipeline(src=src, name=name, price=price)
    def process_item(self, item, spider):
        # TODO 一下这种方法并不推荐,因为每传递过来一个对象就打开一个文件
        # TODO 对文件的操作过于频繁
        # (1) write方法必须是字符串,而不能是其他的对象
        # w 会每一个对象都打开一次文件,然后后一个文件会将前一个文件覆盖
        # with open('book.json', 'a', encoding='utf-8') as fp:
        #     fp.write(str(item))

        # todo 这样就解决了文件的打开过于频繁
        self.fp.write(str(item))

        return item

    """
        在爬虫文件执行完成之后执行
    """
    def close_spider(self, spider):
        print("------------------==========")
        self.fp.close()

import urllib.request

# 多条管道开启
# (1)定义管道类
# (2)在settings中开启管道
#  "scrapy_dangdang_060.pipelines.DangDangDownloadPipeline": 301,

class DangDangDownloadPipeline:
    def process_item(self, item, spider):
        url = 'https:' + item.get('src')
        filename = './books/' + item.get('name') + '.jpg'

        urllib.request.urlretrieve(url=url, filename=filename)

        return item



settings

# Scrapy settings for scrapy_dangdang_060 project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     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.html

BOT_NAME = "scrapy_dangdang_060"

SPIDER_MODULES = ["scrapy_dangdang_060.spiders"]
NEWSPIDER_MODULE = "scrapy_dangdang_060.spiders"


# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = "scrapy_dangdang_060 (+http://www.yourdomain.com)"

# Obey robots.txt rules
ROBOTSTXT_OBEY = True

# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)
#COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False

# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
#    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
#    "Accept-Language": "en",
#}

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    "scrapy_dangdang_060.middlewares.ScrapyDangdang060SpiderMiddleware": 543,
#}

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    "scrapy_dangdang_060.middlewares.ScrapyDangdang060DownloaderMiddleware": 543,
#}

# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    "scrapy.extensions.telnet.TelnetConsole": None,
#}

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
# 管道可以有很多个,管道也存在优先级,范围1~1000,值越小,优先级越高
ITEM_PIPELINES = {
   "scrapy_dangdang_060.pipelines.ScrapyDangdang060Pipeline": 300,
   # DangDangDownloadPipeline
   "scrapy_dangdang_060.pipelines.DangDangDownloadPipeline": 301,
}

# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)
# See 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"

# Set settings whose default value is deprecated to a future-proof value
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
FEED_EXPORT_ENCODING = "utf-8"

items.py

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class ScrapyDangdang060Item(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 通俗的说就是我们要下载的数据都有什么

    # 图片
    src = scrapy.Field()
    # 名字
    name = scrapy.Field()
    # 价格
    price = scrapy.Field()

总结

虽然难,但是男人不能说这难┭┮﹏┭┮

ヾ( ̄▽ ̄)Bye~Bye~

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

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

相关文章

深度学习-2.3损失函数

文章目录 损失函数深度学习优化思想回归&#xff1a;误差平方和SSE二分类交叉熵损失函数1. 极大似然函数估计求解二分类交叉熵函数2.用tensor实现二分类交叉熵损失 多分类交叉熵损失函数1.由二分类推广到多分类2.用PyTorch实现多分类交叉熵损失 损失函数 在之前的文章中&#…

OpenAI劲敌吹新风! Claude 3正式发布,Claude3使用指南

Claude 3是什么&#xff1f; 是Anthropic 实验室近期推出的 Claude 3 大规模语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;系列&#xff0c;代表了人工智能技术的一个显著飞跃。 该系列包括三个不同定位的子模型&#xff1a;Claude 3 Haiku、Claude 3…

Chapter20-Ideal gases-CIE课本要点摘录、总结(编辑中)

20.1 Particles of a gas Brownian motion Fast modules 速率的数值大概了解下&#xff1a; average speed of the molecules:400m/s speed of sound:approximately 330m/s at STP&#xff08;standard temperature and pressure&#xff09; Standard Temperature and Pres…

如何使用WinSCP结合Cpolar实现公网远程访问内网Linux服务器

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

linux上安装fastdfs及配置

一、基础环境准备 1、所需软件 名称说明libfastcommonfastdfs分离出的一些公用函数包fastdfsfastdas软件包fastdfs-nginx-modulefastdfst和nginx的关联模块nginxnginxl软件包 2、编辑环境 安装一些基础的支持环境 yum install git gccc gcc-c make automake autoconf libto…

图遍历算法

图的遍历算法有两种&#xff1a;深度优先遍历、广度优先遍历算法。 深度优先遍历算法就是从起始结点开始&#xff0c;只要有相邻且未被访问的结点就要直接进行访问&#xff0c;直到最后不能向下遍历为止&#xff0c;再回溯寻找下一个策略。 广度优先遍历算法&#xff0c;就是从…

线性代数笔记13--正交向量和正交子空间

0. 四个子空间 1. 正交向量 两向量点乘为0&#xff0c;向量正交。 A ⊤ B 0 A^{\top}B0 A⊤B0 勾股定理 ∣ ∣ x ∣ ∣ 2 ∣ ∣ y 2 ∣ ∣ ∣ ∣ x y ∣ ∣ 2 ||x||^2||y^2||||xy||^2 ∣∣x∣∣2∣∣y2∣∣∣∣xy∣∣2 验证正交条件 ∣ ∣ x ∣ ∣ 2 x ⊤ x x x ⊤ ∣…

vue2【详解】生命周期(含父子组件的生命周期顺序)

1——beforeCreate&#xff1a;在内存中创建出vue实例&#xff0c;数据观测 (data observer) 和 event/watcher 事件配置还没调用&#xff08;data 和 methods 属性还没初始化&#xff09; 【执行数据观测 (data observer) 和 event/watcher 事件配置】 2——created&#xf…

前TVB「御用泼妇」原来是亿万富婆,离婚后狂买楼养大子女。

今年72岁的昔日TVB老戏骨陈曼娜Manna姐最近突然亮相隔壁ViuTV的新剧《飞黄腾达》&#xff0c;本色出演炒股女富豪&#xff0c;她大赞剧集监制、导演有眼光&#xff0c;角色的背景与她本身十分相似&#xff0c;演起来可谓得心应手。 众所周知&#xff0c;陈曼娜最爱「买砖头」&a…

跟无神学AI之Tensorflow笔记搭建网络八股

虽然Pytorch在论文中使用较多&#xff0c;但是像Alphafold在蛋白质结构预测的模型&#xff0c;仍然是用Tensorflow写成&#xff0c;遂近期在学其中的语法。 本系列来自慕课北大软微曹健老师的Tensorflow笔记&#xff0c;摘选其中重要部分。 1.导包 2.定义训练集测试集和数据…

平台工程指南:从架构构建到职责分工

平台工程只是 DevOps 专业化的另一个术语&#xff0c;还是另有所指&#xff1f;事实可能介于两者之间。DevOps 及其相关的 DevXOps 有着浓厚的文化色彩&#xff0c;以各个团队为中心。不幸的是&#xff0c;在许多地方&#xff0c;DevOps 引发了新的问题&#xff0c;如工具激增和…

leetcode 热题 100_三数之和

题解一&#xff1a; 双指针遍历&#xff1a;暴力解法的三层遍历会超时&#xff0c;因此需要优化遍历的过程。首先是需要对结果进行去重&#xff0c;这里采用排序跳过重复值的做法&#xff0c;在指针遍历时跳过已经遍历过的相同值。在第一层循环确定第一个值后&#xff0c;剩下两…

【你也能从零基础学会网站开发】Web建站之HTML+CSS入门篇 常用HTML标签(3)

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 HTML框架集…

吴恩达机器学习笔记十五 什么是导数 计算图 大型神经网络案例

假设函数 J(w)w^2&#xff0c;当 w3 时&#xff0c; J(w)3*39 当我们给w增加一个很小的量时&#xff0c;观察J(w)如何变化。 例如 w30.001&#xff0c; 则J&#xff08;w&#xff09;9.006001&#xff0c;因此当w3且增加一个变化量 ε 时&#xff0c;J(w)将会增加 6ε&#x…

SpringCloud 微服务架构编码构建

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第一篇&#xff0c;即不使用 SpringCloud 组件进行模块之间的调用&#xff0c;后续会有很多的文章循序渐…

【学习心得】websocket协议简介并与http协议对比

一、轮询和长轮询 在websocket协议出现之前&#xff0c;要想实现服务器和客户端的双向持久通信采取的是Ajax轮询。它的原理是每隔一段时间客户端就给服务器发送请求找服务器要数据。 让我们通过一个生活化的比喻来解释轮询和长轮询假设你正在与一位不怎么主动说话的老大爷&…

软考68-上午题-【面向对象技术2-UML】-事物

一、事物 UML中有4种事物&#xff1a; 结构事物&#xff1b;&#xff08;模型的静态部分&#xff09;行为事物&#xff1b;&#xff08;模型的动态部分&#xff09;分组事物&#xff1b;注释事物。 1-1、结构事物 1-2、行为事物 1-3、分组事物 1-4、注释事物 二、真题 真题1…

excel统计分析——裂区设计

参考资料&#xff1a;生物统计学 裂区设计&#xff08;split-plot design&#xff09;是安排多因素试验的一种方法&#xff0c;裂区设计对因素的安排有主次之分&#xff0c;适用于安排对不同因素试验精度要求不一的试验。 裂区设计时&#xff0c;先按第一因素的处理数划分主区&…

PyCharm Community Edition 2023.3.3,UI界面设置成旧版

File->Settings->Appearance & Behavior->New UI->Enable new UI(取消勾选)->重启PyCharm 旧版UI: 新版UI&#xff1a;

卫星导航 | 坐标系---地理坐标系与UTM坐标系

卫星导航 | 坐标系---地理坐标系与UTM坐标系 世界坐标系地理坐标系UTM坐标系 全球卫星导航系统(Global Navigation Satelite System,GNSS)&#xff0c;简称卫星导航&#xff0c;是室外机器人定位的一个主要信息来源。 卫星导航能给机器人提供什么信息&#xff1f; 正常工作时&…