爬虫系列----Python解析Json网页并保存到本地csv

Python解析JSON

  • 1 知识小课堂
    • 1.1 爬虫
    • 1.2 JSON
    • 1.3 Python
    • 1.4 前言技术
      • 1.4.1 range
      • 1.4.2 random
      • 1.4.3 time.sleep
      • 1.4.4 with open() as f:
  • 2 解析过程
    • 2.1 简介
    • 2.2 打开调试工具
    • 2.3 分析网址
      • 2.3.1 网址的规律
      • 2.3.2 网址的参数
    • 2.4 爬取第一页内容
    • 2.5 存入字典并获取
    • 2.6 循环主体数据
    • 2.7 公告和日期改进
    • 2.8 循环获取前三页内容
    • 2.9 保存到CSV中
  • 3 完整代码

1 知识小课堂

1.1 爬虫

在这里插入图片描述

  • Python爬虫(Python Spider)是一种使用Python编程语言编写的程序,用于自动从互联网上抓取数据。这些数据可以是网页内容、图片、视频或其他资源。爬虫程序通常用于数据挖掘、信息收集、竞争情报分析等领域。
  • Python爬虫通常使用第三方库来实现,如BeautifulSoup、Scrapy等。这些库提供了方便的API和工具,使得开发者可以轻松地编写爬虫程序。

1.2 JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

JSON具有以下特点:

  • 易于人阅读和编写,可以在多种语言之间进行数据交换。
  • 简洁和清晰的层次结构使得JSON成为理想的数据交换语言。
  • 易于机器解析和生成,并有效地提升网络传输效率。
  • JSON的语法规则包括:

JSON对象:对象是一个无序的"名称/值"对集合。一个对象以"{(“开始,”}(“结束。每个"名称"后跟一个”:“(冒号);“名称/值"对之间使用”,”(逗号)分隔。
JSON数组:数组是一个有序的"值"集合,一个数组以"[(“开始,”](“结束,值之间使用”,"(逗号)分隔。JSON对象、JSON数组可以嵌套。
JSON的应用非常广泛,包括但不限于数据交换、配置文件、API请求等场景。由于其易于读写、解析和生成的特点,使得JSON成为了一种理想的数据交换格式。

1.3 Python

当然可以,Python是一种广泛使用的编程语言,可以用于各种不同的任务,包括数据分析和处理。Python有许多库和工具可以用于处理JSON数据,其中最常用的是json模块。

1.4 前言技术

1.4.1 range

在Python中,range()是一个内置函数,用于生成一个整数序列。它通常用于循环结构(如for循环)中,以控制循环的迭代次数。

range()函数可以接受1到3个参数:

  1. 只有一个参数(例如 range(5)),则表示从0开始,到该参数的整数(但不包括该参数的整数),即 [0, 1, 2, 3, 4]。
  2. 有两个参数(例如 range(1, 5)),则表示从第一个参数的整数开始,到第二个参数的整数(但不包括该参数的整数),即 [1, 2, 3, 4]。
  3. 有三个参数(例如 range(1, 5, 2)),则表示从第一个参数的整数开始,到第二个参数的整数(但不包括该参数的整数),步长为第三个参数的整数。例如,range(1, 5, 2)会生成 [1, 3, 5]。

此外,还可以使用range()函数与切片操作结合使用,以生成指定范围的序列。例如:

# 从1到5(包含5)  
numbers = list(range(1, 6))  # 结果:[1, 2, 3, 4, 5]  
  
# 从0开始,每次加2,直到10(包含10)  
even_numbers = list(range(0, 11, 2))  # 结果:[0, 2, 4, 6, 8, 10]

1.4.2 random

Python的random模块提供了一系列的函数用于生成随机数。下面是一些最常用的random模块方法:

  1. random():返回[0.0, 1.0)范围内的下一个随机浮点数。
import random  
print(random.random())  # 输出类似于0.123456789的随机数

  1. randint(a, b):返回指定范围内的随机整数,包含端点a和b。
import random  
print(random.randint(1, 10))  # 输出1到10之间的随机整数,包括1和10

  1. randrange(start, stop[, step]):返回指定范围内的随机整数,类似于内建函数range()。可以指定步长。
import random  
print(random.randrange(1, 10, 2))  # 输出1到9之间的随机奇数
  1. choice(seq):从非空序列seq中返回一个随机元素。如果seq为空,则引发IndexError。
import random  
my_list = [1, 2, 3, 4, 5]  
print(random.choice(my_list))  # 从my_list中随机选择一个元素并输出
  1. shuffle(seq[, random]):将序列seq的所有元素随机排序。可选参数random是一个0到1之间的浮点数,用于指定随机算法的种子值。
import random  
my_list = [1, 2, 3, 4, 5]  
random.shuffle(my_list)  
print(my_list)  # 输出类似于[2, 1, 5, 3, 4]的随机排序列表
  1. uniform(a, b):返回指定范围内的随机浮点数,范围在a和b之间(包含a和b)。
import random  
print(random.uniform(1.0, 2.0))  # 输出1.0到2.0之间的随机浮点数,包括1.0和2.0
  1. seed(a[, version]):使用种子值a初始化随机数生成器。如果不提供种子值,则使用系统时间作为默认种子。可选参数version用于指定随机数生成器的版本,默认为2。
import random  
random.seed(1)  # 设置种子值为1,确保每次运行程序时生成的随机数序列相同  
print(random.random())  # 输出相同的随机数,因为种子值固定了随机数生成器的起始状态

1.4.3 time.sleep

time.sleep() 是 Python 标准库中 time 模块的一个方法,用于使程序暂停执行指定的秒数。

示例:

import time  
  
print("开始")  
time.sleep(2)  # 暂停2秒  
print("结束")

输出:

开始  
(程序会暂停2)  
结束

1.4.4 with open() as f:

with open(文件地址,‘a’ ,newline = '',encoding='utf-8-sig') as f:

2 解析过程

2.1 简介

  • 将网站中的json文件爬取下来存到本地表格中。爱购云-商机发现

2.2 打开调试工具

本文尝试使用的是【google】
选择【Fetch/XHR】点击做上交的在这里插入图片描述按钮,清空管理台。

在这里插入图片描述
清空管理台
在这里插入图片描述

2.3 分析网址

2.3.1 网址的规律

打开网址,滑倒下面分页,选择【2】点击,发现左侧出现一个文件。
在这里插入图片描述
在这里插入图片描述

点开找个文件,发现是JSon数据。
在这里插入图片描述
将它在新标签页中打开。
在这里插入图片描述
在新页面中打开。复制一下网址。
在这里插入图片描述
返回到分页处,点【3】,发现右侧又出现一个文件。
在这里插入图片描述
同理,在新标签页中打开,并复制网址。
在这里插入图片描述
同样的方法复制页码【1】的网址。

页码【1】https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=0&pageSize=24&noticestate=1
页码【2】https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=1&pageSize=24&noticestate=1
页码【3】https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=2&pageSize=24&noticestate=1

由以上分析可知,只有pageNo不同,并据此可推断出,第N页的网址应该是pageNo=N-1,到此为止,我们已经推断出来网址的规律。另外两个参数是什么?

2.3.2 网址的参数

由上小结的页码一为例:页码【1】https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=0&pageSize=24&noticestate=1
网址包括

  • 域名:https://www.igoyun.cn
  • 文件路径:/igo-cloud-bizdiscovery/espurbid/fineespurbid?
  • 参数:【pageNo=0】表示当前页码
  • 参数:【pageSize=24】表示每页的数量
  • 参数:【noticestate=1】还未知,我们来猜测一下。
    进入网页:https://www.igoyun.cn/#/portal/search/business

在这里插入图片描述
点击页码【2】,查看右侧的json文件网址:

https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=1&pageSize=24&noticestate=1

在这里插入图片描述
返回网页:切换到以下选项
在这里插入图片描述
同样选择【2】,点开右侧json文件,查看网址。

https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=1&pageSize=24&noticestate=2在这里插入图片描述
将以上两个网址放在一起比较:

进行中:https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=1&pageSize=24&noticestate=1
全部:https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=1&pageSize=24&noticestate=2

有分析可知:二者变量为:【全部/进行中】,网址区别为【noticestate=1/2】在此可以猜测,【noticestate】参数控制【全部/进行中】。为进一步确认推测是否正确,可以根据json文件数据和原网页进行对比。对比结果可知,二者是一致的。
回顾三个参数
由上小结的页码一为例:页码【1】https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=0&pageSize=24&noticestate=1
网址包括

  • 域名:https://www.igoyun.cn
  • 文件路径:/igo-cloud-bizdiscovery/espurbid/fineespurbid?
  • 参数:【pageNo=0】表示当前页码
  • 参数:【pageSize=24】表示每页的数量
  • 参数:【noticestate=1】全部/进行中
    根据需要进行爬取,这里选择noticestate= 2.

2.4 爬取第一页内容

url:https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=0&pageSize=24&noticestate=2

import requests
import random
import json
import time
now_time = int(time.time())
timeStamp = now_time*1000
url = 'https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo={}&pageSize=24&noticestate=2'.format(a)
headers = {
"User-Agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
response = requests.get(url = url.format(timeStamp),headers = headers)
print(response.content.decode('utf-8'),type(response.content.decode('utf-8')))

代码解释:

  • url 是网址
  • headers 伪装成浏览器访问,
  • response :用response 进行访问网址,对返回的数据进行UTF-8处理,显示能看懂的数据

运行文件,显示如下,表示已经获取json数据,接下来就是对这些数据进行处理。
在这里插入图片描述

2.5 存入字典并获取

1、存入数据字典

#爬取腾讯招聘网站
import requests
import json
import time
now_time = int(time.time())
timeStamp = now_time*1000
url = 'https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=0&pageSize=24&noticestate=2'
headers = {
"User-Agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
response = requests.get(url = url.format(timeStamp),headers = headers)
# print(response.content.decode('utf-8'),type(response.content.decode('utf-8')))
content = response.content.decode('utf-8')
#需要将content(json.str)--->python对象的(json-dict)
content_dict = json.loads(content)
print(type(content_dict))

在这里插入图片描述
由打印可知,content_dict 的类型为【dict】字典类型

2、获取数据
主体数据保存在【content】中,那么怎么获取到这里的数据呢?
很简单,目前为止,已经获取到全部的数据,并将数据存到字典中【content_dict】
在这里插入图片描述

post_list = content_dict['result']['content']
  • post_list 即为content的数据。
#爬取腾讯招聘网站
import requests
import json
import time
now_time = int(time.time())
timeStamp = now_time*1000
url = 'https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=0&pageSize=24&noticestate=2'
headers = {
"User-Agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
response = requests.get(url = url.format(timeStamp),headers = headers)
# print(response.content.decode('utf-8'),type(response.content.decode('utf-8')))
content = response.content.decode('utf-8')
#需要将content(json.str)--->python对象的(json-dict)
content_dict = json.loads(content)
# print(type(content_dict))
post_list = content_dict['result']['content']
print(post_list)

在这里插入图片描述

2.6 循环主体数据

目前已经获取到【post_list】,可以对数据进行循环获取每一个数据的值。
需要获取的数据有:

  • 公司名:-pubcomname
  • 公告类型-noticetype
  • 项目类型-catalogname
  • 项目名称-noticetitle
  • 发布时间-pubtime
  • 截止时间-exptime
#爬取腾讯招聘网站
import requests
import json
import time
now_time = int(time.time())
timeStamp = now_time*1000
url = 'https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=0&pageSize=24&noticestate=2'
headers = {
"User-Agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
response = requests.get(url = url.format(timeStamp),headers = headers)
content = response.content.decode('utf-8')
#需要将content(json.str)--->python对象的(json-dict)
content_dict = json.loads(content)
# print(type(content_dict))
post_list = content_dict['result']['content']
print(post_list)
# #将字典中的每一个dict都迭代出来
for value_dict in post_list:
# # #     #公司名:-pubcomname
    pubcomname = value_dict['pubcomname']
# # #     #公告类型-noticetype
    noticetype = value_dict['noticetype']
# # #     #项目类型-catalogname
    catalogname = value_dict['catalogname']
# #       项目名称-noticetitle
    noticetitle = value_dict['noticetitle']
# #       发布时间-pubtime
    pubtime = value_dict['pubtime']
# #       截止时间-exptime
    exptime = value_dict['exptime']
# # #     #print看看是否有打印出来
    print(pubcomname,noticetype,catalogname,noticetitle,pubtime,exptime)

运行可知,打印了第一页所需要的内容
在这里插入图片描述

2.7 公告和日期改进

1、公告改进
由输出结果可知,公告类型不是页面中的文字,而是数字代替。经过分析可知

  • newNoticetype=1 为:‘询价公告’
  • newNoticetype=2 为:‘采购/招标公告’
  • newNoticetype=4 为:‘竞价公告’
  • newNoticetype=5 为:‘中标公示’
  • newNoticetype=6 为:‘竞争性谈判’
    改进代码:
 noticetype = value_dict['noticetype']
    if noticetype=='1' :
        newNoticetype='询价公告'
    elif noticetype=='2' :
        newNoticetype='采购/招标公告'
    elif noticetype=='4' :
        newNoticetype='竞价公告'
    elif noticetype=='5' :
        newNoticetype='中标公示'
    elif noticetype=='6' :
        newNoticetype='竞争性谈判'
    else :
        newNoticetype=noticetype

2、日期改进
日期显示的格式 2023-12-23T14:29:03.000+0000,我们可以只取年月日,这样就需要对数据进行截取。

# #       发布时间-pubtime
    pubtime = value_dict['pubtime'][0:10]
# #       截止时间-exptime
    exptime = value_dict['exptime'][0:10]

代码:

#爬取腾讯招聘网站
import requests
import json
import time
now_time = int(time.time())
timeStamp = now_time*1000
url = 'https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo=0&pageSize=24&noticestate=2'
headers = {
"User-Agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
response = requests.get(url = url.format(timeStamp),headers = headers)
content = response.content.decode('utf-8')
#需要将content(json.str)--->python对象的(json-dict)
content_dict = json.loads(content)
post_list = content_dict['result']['content']
# #将字典中的每一个dict都迭代出来
for value_dict in post_list:
# # #     #公司名:-pubcomname
    pubcomname = value_dict['pubcomname']
# # #     #公告类型-noticetype
    noticetype = value_dict['noticetype']
    if noticetype=='1' :
        newNoticetype='询价公告'
    elif noticetype=='2' :
        newNoticetype='采购/招标公告'
    elif noticetype=='4' :
        newNoticetype='竞价公告'
    elif noticetype=='5' :
        newNoticetype='中标公示'
    elif noticetype=='6' :
        newNoticetype='竞争性谈判'
    else :
        newNoticetype=noticetype
# # #     #项目类型-catalogname
    catalogname = value_dict['catalogname']
# #       项目名称-noticetitle
    noticetitle = value_dict['noticetitle']
# #       发布时间-pubtime
    pubtime = value_dict['pubtime'][0:10]
# #       截止时间-exptime
    exptime = value_dict['exptime'][0:10]
# # #     #print看看是否有打印出来
    print(pubcomname,newNoticetype,catalogname,noticetitle,pubtime,exptime)

在这里插入图片描述

2.8 循环获取前三页内容

1、循环
在最开始加上下面代码。

 for a in range(3):

2、为了爬取的安全性,在获取一次请求之后,休眠1-3秒
引入:import random
在第二层循环中加上以下代码

time.sleep(random.randrange(1,3))

2.9 保存到CSV中

1、首先引入import csv
2、在第二层循环中加上

in_fo_list =[pubcomname,newNoticetype,catalogname,noticetitle,pubtime,exptime]
  with open('E:/langchao.csv','a',newline = '',encoding='utf-8-sig') as f:
      writer = csv.writer(f)
      writer.writerow(in_fo_list)

-in_fo_list 表示暂时的存储序列
-encoding 表示存储的编码类型

3 完整代码

#爬取爱购云网站
import requests
import random
import json
import csv
import time
now_time = int(time.time())
timeStamp = now_time*1000
for a in range(3):
    url = 'https://www.igoyun.cn/igo-cloud-bizdiscovery/espurbid/fineespurbid?&pageNo={}&pageSize=24&noticestate=2'.format(a)
    headers = {
    "User-Agent":'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
    }
    response = requests.get(url = url.format(timeStamp),headers = headers)
    # response = requests.get(url = url,headers = headers)
    # print(response.content.decode('utf-8'),type(response.content.decode('utf-8')))
    content = response.content.decode('utf-8')
    #需要将content(json.str)--->python对象的(json-dict)
    content_dict = json.loads(content)
    # print(content_dict,type(content_dict))
    post_list = content_dict['result']['content']
    # print(post_list)
    #将字典中的每一个dict都迭代出来
    time.sleep(random.randrange(1,3))
    print(a)
    for value_dict in post_list:
    # #     #公司名:-pubcomname
        pubcomname = value_dict['pubcomname']
    # #     #公告类型-noticetype
        noticetype = value_dict['noticetype']
        if noticetype=='1' :
            newNoticetype='询价公告'
        elif noticetype=='2' :
            newNoticetype='采购/招标公告'
        elif noticetype=='4' :
            newNoticetype='竞价公告'
        elif noticetype=='5' :
            newNoticetype='中标公示'
        elif noticetype=='6' :
            newNoticetype='竞争性谈判'
        else :
            newNoticetype=noticetype
    # #     #项目类型-catalogname
        catalogname = value_dict['catalogname']
    #       项目名称-noticetitle
        noticetitle = value_dict['noticetitle']
    #       发布时间-pubtime
        pubtime = value_dict['pubtime'][0:10]
    #       截止时间-exptime
        exptime = value_dict['exptime'][0:10]
    # #     #print看看是否有打印出来
    #     print(pubcomname,newNoticetype,catalogname,noticetitle,pubtime,exptime)
    # #     #由于我们是要保存在CSV格式中,所以我们先把数据转化成列表模式.
        in_fo_list =[pubcomname,newNoticetype,catalogname,noticetitle,pubtime,exptime]
        with open('E:/langchao.csv','a',newline = '',encoding='utf-8-sig') as f:
            writer = csv.writer(f)
            writer.writerow(in_fo_list)

在这里插入图片描述

根据路径打开文件:
在这里插入图片描述

爬取成功!
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode刷题笔记(13-1)】【Python】【回文数】【反转整数】【简单】

文章目录 引言回文数题目描述提示 题意分析解决方案1:【反转字符串】解决方案2:【反转整数】题外话结束语 9. 回文数 引言 编写通过所有测试案例的代码并不简单,通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例&#xff0…

blender scripting 编写

blender scripting 编写 一、查看ui按钮对应的代码二、查看或修改对象名称三、案例:渲染多张图片并导出对应的相机参数 一、查看ui按钮对应的代码 二、查看或修改对象名称 三、案例:渲染多张图片并导出对应的相机参数 注:通过ui交互都设置好…

基于springboot+vue的教材管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

windows操作系统蓝屏错误日志分析日志通用方法全网唯一程序员必学技能

windows11操作系统蓝屏错误分析日志通用方法全网唯一程序员必学技能 一、背景介绍 本人是一个老程序员,DBA,架构师,开发工作10年了,我们平常用的开发电脑以及游戏电脑时不时会遇到操作系统突然蓝屏,一般情况下都是一…

C++力扣题目232--用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…

ThingsBoard 3.4 -- 规则链使用

规则链的使用 创建规则链 调试模式用于调试日志的输出,测试阶段建议选择 配置规则 点击规则链,进入详情页面 打开规则链进行规则配置 规则链节点类型分为6类,每一类下面又包含多个小类 过滤器/筛选器:过滤器节点用于消息过滤…

springboot对接WebSocket实现消息推送

1.修改pom文件 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 2.增加配置WebSocketConfig.java import org.springframework.context.annotation.Bean…

网络隔离后,怎样建立高效安全的数据安全交换通道?

数据安全对企业生存发展有着举足轻重的影响&#xff0c;数据资产的外泄、破坏都会导致企业无可挽回的经济损失和核心竞争力缺失。数据流动才能让其释放价值&#xff0c;想要保护企业核心资产&#xff0c;就要实现数据安全交换。 很多企业为了防止知识产权、商业机密数据泄露&am…

2023安洵杯-秦岭防御军wp

reverse 感觉有点点简单## import base64 def ba64_decode(str1_1):mapp "4KBbSzwWClkZ2gsr1qAQu0FtxOm6/iVcJHPY9GNp7EaRoDf8UvIjnL5MydTX3eh"data_1 [0] * 4flag_1 [0] * 3for i in range(32, 127):for y in range(32, 127):for k in range(32, 127):flag_1[0]…

【目标跟踪】解决多目标跟踪遮挡问题

文章目录 前言一、判定遮挡目标二、扩展目标框三、结论 前言 目标跟踪在发生遮挡时&#xff0c;极其容易发生Id Switch。网上许多算法忽视跟踪遮挡问题,同时网上相关资料也很少。博主为了解决跟踪遮挡&#xff0c;翻阅大量论文。分享其中一篇论文。论文链接&#xff1a;https:…

dl转置卷积

转置卷积 转置卷积&#xff0c;顾名思义&#xff0c;通过名字我们应该就能看出来&#xff0c;其作用和卷积相反&#xff0c;它可以使得图像的像素增多 上图的意思是&#xff0c;输入是22的图像&#xff0c;卷积核为22的矩阵&#xff0c;然后变换成3*3的矩阵 代码如下 import…

Python 运维(四):使用 PyInstaller 将 Python 程序打包成可执行文件

大家好&#xff0c;我是水滴~~ PyInstaller是一款强大的Python打包工具&#xff0c;通过将Python程序转换成可执行文件&#xff0c;它简化了程序的分享和分发过程。本文从简介、安装、使用以及典型案例四个方面对PyInstaller进行了介绍。 文章内容包含大量的示例代码&#xf…

Vue学习之第一、二章——Vue核心与组件化编程

第一章. Vue核心 1.1 Vue简介 1.1.1 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ 1.1.2 Vue特点 遵循 MVVM 模式编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发它本身只关注 UI, 也可以引入其它第三方库开发项目 1.2 初始Vue 这里可以参考&a…

uni-app 命令行创建

1. 首先创建项目&#xff0c;命令如下: npx degit dcloudio/uni-preset-vue#vite-ts uni-app-demo如果出现报错&#xff0c;如下图. 大概率就是没有目录C:\Users\Administrator\AppData\Roaming\npm 解决办法&#xff1a; 创建目录 C:\Users\Administrator\AppData\Roaming\n…

关于Zoom ZTP和AudioCodes Ltd桌面电话缺陷暴露,导致用户遭受窃听的动态情报

一、基本内容 近期SySS安全研究员发布分析报告显示&#xff0c;Zoom的零接触&#xff08;ZTP&#xff09;和AudioCodes Ltd桌面电话配置功能中发现高危漏洞&#xff0c;可以获得对设备的完全远程控制并不受限制的访问可以被武器化&#xff0c;以窃听房间或电话、通过设备并攻击…

LazyForEach常见使用问题

目录 1、渲染结果非预期 2、重新渲染时图片闪烁 3、ObjectLink属性变化UI未更新 上篇文章中我们介绍了LazyForEach的基本使用&#xff0c;展示了如何使用LazyForEach构造一个列表&#xff0c;并演示数据的添加、删除、修改如何与LazyForEach配合并正确的更新UI。本篇将介绍使…

【kafka消息里会有乱序消费的情况吗?如果有,是怎么解决的?】

文章目录 什么是消息乱序消费了&#xff1f;顺序生产&#xff0c;顺序存储&#xff0c;顺序消费如何解决乱序数据库乐观锁是怎么解决这个乱序问题吗 保证消息顺序消费两种方案固定分区方案乐观锁实现方案 前几天刷着视频看见评论区有大佬问了这个问题&#xff1a;你们的kafka消…

策略模式(组件协作)

策略模式&#xff08;组件协作&#xff09; 链接&#xff1a;策略模式实例代码 注解 目的 正常情况下&#xff0c;一个类/对象中会包含其所有可能会使用的内外方法&#xff0c;但是一般情况下&#xff0c;这些常使用的类都是由不同的父类继承、组合得来的&#xff0c;来实现…

《软件需求分析报告》

第1章 序言 第2章 引言 2.1 项目概述 2.2 编写目的 2.3 文档约定 2.4 预期读者及阅读建议 第3章 技术要求 3.1 软件开发要求 第4章 项目建设内容 第5章 系统安全需求 5.1 物理设计安全 5.2 系统安全设计 5.3 网络安全设计 5.4 应用安全设计 5.5 对用户安全管理 …

创建servlet的三种方式

目录 ​编辑 1.实现Servlet接口的方式 2.继承GenericServlet抽象类的方式 3.继承HttpServlet的方式 1.实现Servlet接口的方式 因为是实现 Servlet 接口&#xff0c;所以我们需要实现接口里的方法。 import javax.servlet.*; import javax.servlet.annotation.WebServlet;…