16.网络爬虫—字体反爬(实战演示)
网络爬虫—字体反爬
- 一·字体反爬原理
- 二·字体反爬模块Fonttools
- TTF文件
- 三·FontCreator 14.0.0.2790
- FontCreatorPortable下载与安装
- 四·实战演示
- 五·后记
前言:
🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证
📝📝第一篇文章《1.认识网络爬虫》获得全站热榜第一,python领域热榜第一
。
🧾 🧾第四篇文章《4.网络爬虫—Post请求(实战演示)》全站热榜第八
。
🧾 🧾第八篇文章《8.网络爬虫—正则表达式RE实战》全站热榜第十二
。
🧾 🧾第十篇文章《10.网络爬虫—MongoDB详讲与实战》全站热榜第八,领域热榜第二
🧾 🧾第十三篇文章《13.网络爬虫—多进程详讲(实战演示)》全站热榜第十二
。
🧾 🧾第十四篇文章《14.网络爬虫—selenium详讲》测试领域热榜第二十
。
🎁🎁《Python网络爬虫》专栏累计发表十五篇文章,上榜六篇。欢迎免费订阅!欢迎大家一起学习,一起成长!!
💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。
一·字体反爬原理
🧾 🧾 Python字体反爬原理是指爬虫在爬取网站数据时,遇到了基于字体反爬的防护措施。这种反爬措施是通过将网站的文字转换成特定的字体文件,然后在页面上引用该字体文件来显示文字,使得爬虫无法直接获取文字内容。
🧾 具体原理如下:
-
网站将需要显示的文字转换成特定的字体文件,通常是
TrueType
或OpenType
格式的字体文件。 -
网站在页面上引用该字体文件,并使用CSS样式将需要显示的文字的字体设置为该字体文件。
-
爬虫在获取页面源代码时,无法直接获取到需要显示的文字内容,只能获取到字体文件的引用地址。
-
爬虫可以通过下载字体文件并解析其中的映射关系,将字体文件中的编码与对应的文字内容进行匹配,从而获取到需要显示的文字内容。
-
为了增加反爬难度,网站通常会对字体文件进行加密或混淆,使得爬虫无法直接解析。
🧾 为了应对这种反爬措施,爬虫可以采用以下方法:
-
下载字体文件并解析映射关系,从而获取需要显示的文字内容。
-
使用OCR技术对图片中的文字进行识别,从而获取需要显示的文字内容。
-
使用第三方库或工具对字体文件进行解密或混淆,从而获取需要显示的文字内容。
🔔🔔需要注意的是,字体反爬技术是一种比较高级的反爬措施,需要爬虫具备一定的技术水平才能应对。此外,爬虫在使用字体反爬技术时也需要注意遵守相关法律法规和网站的使用规定。
二·字体反爬模块Fonttools
安装Fonttools
pip install fonttools
如图所示,表示安装完成!
FontTools是一个开源的Python库,用于处理和转换字体文件。它可以读取和写入OpenType(OTF)
和TrueType(TTF)
字体文件,以及其他各种字体格式。FontTools可以用于许多用途。
例如:
-
字体编辑
:可以使用FontTools来修改字体文件中的字形、轮廓、度量等属性。 -
字体转换
:可以将字体文件从一种格式转换为另一种格式,例如将TTF文件转换为OTF文件。 -
字体分析
:可以使用FontTools来分析字体文件中的元数据、字符集、度量等属性,以便于字体设计和排版。
TTF文件
🧾 🧾TTF文件是TrueType字体文件,是一种字体文件格式,通常用于在计算机和打印机上显示文本。它是一种可缩放的字体,可以在不失真的情况下进行缩放。TTF文件通常具有.ttf文件扩展名,可以在Windows、Mac和Linux等操作系统中使用。
三·FontCreator 14.0.0.2790
🧾 🧾 FontCreator 14.0.0.2790是一款专业的字体设计软件,由高级字体编辑器、字形插值器、字体转换器等多个工具组成。
- 它可以帮助用户创建自定义的字体,包括TrueType、OpenType、Web字体等多种格式。
- FontCreator14.0.0.2790提供了一个友好的用户界面,使得用户能够轻松地创建、编辑和修复字形、设置字符间距、调整字体度量等。
- 还支持多语言字体设计,用户可以添加和修改各种字符集。
- FontCreator 14.0.0.2790还可以进行字体转换,将不同格式的字体文件相互转换,方便用户在不同场景下使用。
FontCreatorPortable下载与安装
🎁🎁点击FontCreator 14.0.0.2790进入即可下载
提取码:a3e8
下载完成后是这样的:
打开需要查看的ttf文件
如图所示,被编码的文字
每一个编码对应一个图,对,下面这些0,1,2,3,4,5,6,7,这些对不是字体,而是一张图,所以在后续解码操作中,我们需要手动输入这些数据。
四·实战演示
🎯🎯本次实战以某招聘网站为目标,获取其中数据,并对字体加密进行破解操作
如图所示:
🎯我们想要爬取的数据被加密,我们来一步一步对其进行破解。
先按正常方式将数据获取到本地
# coding = utf-8
import crawlesurl = 'https://www.shixiseng.com/app/interns/search/v2'cookies = {'RANGERS_WEB_ID': '7222273943993026082','RANGERS_SAMPLE': '0.797004667731563','adCloseOpen': 'true','utm_source_first': 'PC','Hm_lvt_03465902f492a43ee3eb3543d81eba55': '1681566719,1681626579','adClose': 'true','SXS_XSESSION_ID': '\"2|1:0|10:1681626608|15:SXS_XSESSION_ID|48:ZmIzNDc2MDgtM2MxOS00ZGMzLTg1OWYtZjZmZjliODI3ODBm|e0c74e6e5b304e78720e68feddc1ebc596b09b541b03cab0ad8f542aa7782cf4\"','SXS_XSESSION_ID_EXP': '\"2|1:0|10:1681626608|19:SXS_XSESSION_ID_EXP|16:MTY4MTcxMzAwOA==|f0de0b3a4d7235bb497a86fab85289c792654792ec9114ede5cd4e213074f3ab\"','position': 'pc_search_syss','utm_source': 'PC','utm_campaign': 'PC','Hm_lpvt_03465902f492a43ee3eb3543d81eba55': '1681640297',
}headers = {'authority': 'www.shixiseng.com','accept': 'application/json, text/plain, */*','accept-language': 'zh-CN,zh;q=0.9','cache-control': 'no-cache','content-type': 'application/x-www-form-urlencoded','pragma': 'no-cache','referer': 'https://www.shixiseng.com/interns?page=2&type=intern&keyword=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&area&months&days°ree&official&enterprise&salary=-0&publishTime&sortType&city=%E5%85%A8%E5%9B%BD&internExtend','sec-ch-ua': '\"Chromium\";v=\"112\", \"Google Chrome\";v=\"112\", \"Not:A-Brand\";v=\"99\"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '\"Windows\"','sec-fetch-dest': 'empty','sec-fetch-mode': 'cors','sec-fetch-site': 'same-origin','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
}params = {'build_time': '1681640300905','page': '1','type': 'intern','keyword': '数据挖掘','area': '','months': '','days': '','degree': '','official': '','enterprise': '','salary': '-0','publishTime': '','sortType': '','city': '全国','internExtend': '',
}response = crawles.get(url, headers=headers, params=params, cookies=cookies)
response = crawles.get(url, headers=headers, params=params, cookies=cookies)
print(response.text)
for i in response.json['msg']['data']:print(i)
🎯这是我们通过代码获取到本地的数据:
🎯接下来我们需要找到解密用的文件,在这里面找关于font的文件:
@font-face { font-family: myFont; src: url(/interns/iconfonts/file?rand=0.7027418610803815);}
🎯对获取的链接发起请求(获取字体文件,帮助我们对加密文件进行解码)
# font字体文件
# 1,查找相关链接,或者文本
# 2.获取文件(url) @font-face { font-family: myFont; src: url(/interns/iconfonts/file?rand=0.7027418610803815);}
# 3.对获取的链接发起请求(获取字体文件,帮助我们对加密文件进行解码)# 
import requests# 将请求到的数据存放到内存中,以便其他地方直接使用import io
from fontTools.ttLib import TTFontfont_file_uel = 'https://www.shixiseng.com/interns/iconfonts/file'
# 将请求到的数据存放到内存中,以便其他地方直接使用
ttf = TTFont(io.BytesIO(requests.get(font_file_uel).content)) # 将获取的数据保存到ttf文件中ttf.save('sxs.ttf')
🎯然后我们得到一个ttf文件,我们使用上面安装的软件对该文件进行查看。
🎯我们将上述数据换成xml来查看,方便我们对其解码操作:
# font字体文件
# 1,查找相关链接,或者文本
# 2.获取文件(url) @font-face { font-family: myFont; src: url(/interns/iconfonts/file?rand=0.7027418610803815);}
# 3.对获取的链接发起请求(获取字体文件,帮助我们对加密文件进行解码)# 
import requests# 将请求到的数据存放到内存中,以便其他地方直接使用import io
from fontTools.ttLib import TTFontfont_file_uel = 'https://www.shixiseng.com/interns/iconfonts/file'
# 将请求到的数据存放到内存中,以便其他地方直接使用
ttf = TTFont(io.BytesIO(requests.get(font_file_uel).content)) # 将获取的数据保存到ttf文件中# ttf.save('sxs.ttf')ttf.saveXML('sxs.xml')
🎯我们的思路如下,将加密字体一步一步转成我们需要的字体,然后再获取出来:
 -> 0xe283 -> uni30 -> 数据索引 -> 文字
 -> 0xe714 -> uni35 -> 7 -> 5
import ref = open('sxs.xml', 'r', encoding='utf-8') # 将数据读取出来
file_data = f.read()
f.close()x = re.findall('<map code="0x(.*?)" name="(.*?)"/>', file_data)
glyph = re.findall('<GlyphID id="(.*?)" name="(.*?)"/>', file_data)glyph_dict = {k: v for v, k in glyph}str_data = '0123456789一师x会四计财场DHLPT聘招工d周L端p年hx设程二五天tXG前KO网SWcgkosw广市月个BF告NRVZ作bfjnrvz三互生人政AJEI件M行QUYaeim软qu银y联'
str_list = [' ', ''] + [i for i in str_data]x_dict = {f'&#x{k}': str_list[int(glyph_dict[v])] for k, v in x}
print(x_dict)
🎯如上图所示,我们解密了一部分字体来展示如何操作,现在对整个网页的加密数据进行字体解密操作,解密后的数据如图所示,我们对有用的数据进行整理:
🎯整理后的数据如下:
🎁🎁完整代码:
import crawles
import json
import re
import requests
import io
from fontTools.ttLib import TTFont # pip install fonttoolsurl = 'https://www.shixiseng.com/app/interns/search/v2'cookies = {'RANGERS_WEB_ID': '7222273943993026082','RANGERS_SAMPLE': '0.797004667731563','adCloseOpen': 'true','utm_source_first': 'PC','Hm_lvt_03465902f492a43ee3eb3543d81eba55': '1681566719,1681626579','adClose': 'true','SXS_XSESSION_ID': '\"2|1:0|10:1681626608|15:SXS_XSESSION_ID|48:ZmIzNDc2MDgtM2MxOS00ZGMzLTg1OWYtZjZmZjliODI3ODBm|e0c74e6e5b304e78720e68feddc1ebc596b09b541b03cab0ad8f542aa7782cf4\"','SXS_XSESSION_ID_EXP': '\"2|1:0|10:1681626608|19:SXS_XSESSION_ID_EXP|16:MTY4MTcxMzAwOA==|f0de0b3a4d7235bb497a86fab85289c792654792ec9114ede5cd4e213074f3ab\"','position': 'pc_search_syss','utm_source': 'PC','utm_campaign': 'PC','Hm_lpvt_03465902f492a43ee3eb3543d81eba55': '1681640297',
}headers = {'authority': 'www.shixiseng.com','accept': 'application/json, text/plain, */*','accept-language': 'zh-CN,zh;q=0.9','cache-control': 'no-cache','content-type': 'application/x-www-form-urlencoded','pragma': 'no-cache','referer': 'https://www.shixiseng.com/interns?page=2&type=intern&keyword=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&area&months&days°ree&official&enterprise&salary=-0&publishTime&sortType&city=%E5%85%A8%E5%9B%BD&internExtend','sec-ch-ua': '\"Chromium\";v=\"112\", \"Google Chrome\";v=\"112\", \"Not:A-Brand\";v=\"99\"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '\"Windows\"','sec-fetch-dest': 'empty','sec-fetch-mode': 'cors','sec-fetch-site': 'same-origin','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
}params = {'build_time': '1681640300905','page': '1','type': 'intern','keyword': '数据挖掘','area': '','months': '','days': '','degree': '','official': '','enterprise': '','salary': '-0','publishTime': '','sortType': '','city': '全国','internExtend': '',
}response = crawles.get(url, headers=headers, params=params, cookies=cookies)
text = response.text
# 存储ttf文件 用于分析和后续操作
font_file_uel = 'https://www.shixiseng.com/interns/iconfonts/file'
# 将请求到的数据存放到内存中,以便其他地方直接使用
ttf = TTFont(io.BytesIO(requests.get(font_file_uel).content))
# ttf.save('sxs.ttf')
ttf.saveXML('sxs.xml')# 读取xml文件
f = open('sxs.xml', 'r', encoding='utf-8')
file_data = f.read()
f.close()x = re.findall('<map code="0x(.*?)" name="(.*?)"/>', file_data)glyph = re.findall('<GlyphID id="(.*?)" name="(.*?)"/>', file_data)
glyph_dict = {k: v for v, k in glyph}str_data = '0123456789一师x会四计财场DHLPT聘招工d周L端p年hx设程二五天tXG前KO网SWcgkosw广市月个BF告NRVZ作bfjnrvz三互生人政AJEI件M行QUYaeim软qu银y联'
str_list = [' ', ''] + [i for i in str_data]x_dict = {f'&#x{k}': str_list[int(glyph_dict[v])] for k, v in x}
# print(x_dict)# 对整个文本数据进行替换解码操作
for k, v in x_dict.items():text = text.replace(k, v)# 将数据转化回方便使用的格式
text_1 = json.loads(text)for item in text_1['msg']['data']:max_salary = item['maxsal'] + '元/天' # 最高薪资min_salary = item['minsal'] + '元/天' # 最低薪资city = item['city'] # 所在城市scale = item['scale'] # 公司规模degree = item['degree'] # 学历要求c_tags = item['c_tags'] # 公司标签i_tags = item['i_tags'] # 实习标签name = item['name'] # 职位名称industry = item['industry'] # 所属行业print('最高薪资:', max_salary)print('最低薪资:', min_salary)print('所在城市:', city)print('公司规模:', scale)print('学历要求:', degree)print('公司标签:', c_tags)print('实习标签:', i_tags)print('职位名称:', name)print('所属行业:', industry)print(text_1)
五·后记
👉👉本专栏所有文章是博主学习笔记,仅供学习使用,爬虫只是一种技术,希望学习过的人能正确使用它。
博主也会定时一周三更爬虫相关技术更大家系统学习,如有问题,可以私信我,没有回,那我可能在上课或者睡觉,写作不易,感谢大家的支持!!🌹🌹🌹
相关文章:

16.网络爬虫—字体反爬(实战演示)
网络爬虫—字体反爬 一字体反爬原理二字体反爬模块FonttoolsTTF文件 三FontCreator 14.0.0.2790FontCreatorPortable下载与安装 四实战演示五后记 前言: 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域…...

BOM概述
目录 什么是BOM 浏览器对象模型(Browser Object Model (BOM)) Window对象 一些常用方法 JavaScript Window Screen Window Screen Window Screen 高度 Window Screen 可用宽度 Window Screen 可用高度 Window Screen 色深 Window Screen 像素深…...

3.Docker实用技术
Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…...
群体无人机:协同作战的未来
摘要:本文将探讨群体无人机技术的发展及其在多个领域的应用,特别是在军事作战、救援任务和物流方面的潜力。我们将分析群体无人机在协同作战中的优势,以及如何通过协同控制和通信技术实现更高效的任务完成。 内容: 引言 简要介绍…...

如何在Windows AD域中驻留ACL后门
前言 当拿下域控权限时,为了维持权限,常常需要驻留一些后门,从而达到长期控制的目的。Windows AD域后门五花八门,除了常规的的添加隐藏用户、启动项、计划任务、抓取登录时的密码,还有一些基于ACL的后门。 ACL介绍 …...

LVGL移植——stm32f4
LVGL移植说明 移植LVGL版本:8.3.6 主控:STM32F407ZGT6 github链接:https://github.com/lvgl/lvgl.git 文章目录 LVGL移植说明STM32移植LVGL①需要的依赖文件②移植显示驱动文件③将文件加入工程当中④配置心跳④修改栈堆的空间⑤编译链接 STM…...

ASEMI代理ADP5054ACPZ-R7原装ADI车规级ADP5054ACPZ-R7
编辑:ll ASEMI代理ADP5054ACPZ-R7原装ADI车规级ADP5054ACPZ-R7 型号:ADP5054ACPZ-R7 品牌:ADI/亚德诺 封装:LFCSP-48 批号:2023 引脚数量:48 工作温度:-40C~125C 安装类型:表…...
TCP/IP相关面试题
1. 什么是TCP/IP协议?它的作用是什么? TCP/IP(Transmission Control Protocol/Internet Protocol)互联网中最常用的协议,是计算机网络通信的基础。由TCP协议和IP协议两部分组成。IP协议负责数据的传输和路由选择&#…...
MySQL数据库——MySQL存储过程是什么?
我们前面所学习的 MySQL 语句都是针对一个表或几个表的单条 SQL 语句,但是在数据库的实际操作中,经常会有需要多条 SQL 语句处理多个表才能完成的操作。 例如,为了确认学生能否毕业,需要同时查询学生档案表、成绩表和综合表&…...

消息队列中的事务消息
大家好,我是易安!今天我们谈一谈消息队列中的事务消息这个话题。 一说起事务,你可能自然会联想到数据库。我们日常使用事务的场景,绝大部分都是在操作数据库的时候。像MySQL、Oracle这些主流的关系型数据库,也都提供了…...
03. 路由参数.重定向.视图
学习要点: 1.路由参数 2.路由重定向 3.路由视图 本节课我们来开始进入学习路由的参数设置、重定向和路由的视图。 一.路由参数 1. 上一节课,我们已经学习了部分路由参数的功能,比如动态传递{id}; 2. 那么,有…...

Flowable入门
Flowable初体验 Flowable是什么 Flowable 是一个使用 Java 编写的轻量级业务流程引擎,常用于需要人工审批相关的业务,比如请假、报销、采购等业务。 为什么要使用工作流呢? 对于复杂的业务流程,通过数据库的状态字段难以控制和…...

Scala Option类型,异常处理,IO,高阶函数
Option类型 实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效的避免空指针异常。S…...
unity进阶学习笔记:单例模式
游戏框架: 游戏框架一般包括消息框架,状态机,管理器,工具类。 消息框架指游戏物体之的通信框架,虽然unity引擎自带一套消息框架,但该框架只能用于父子物体之间通信,无法实现大部分非父子关系的…...

软件测试——性能指标
登录功能示例: 并发用户数500; 响应时间2S; TPS到500; CPU不得超过75%; 性能指标有哪些? 响应时间 并发用户数 TPS CPU 内存 磁盘吞吐量 网络吞吐量 移动端FPS 移动端耗电量 APP启动时间 性能…...
leetcode 405. 数字转换为十六进制数
题目描述解题思路执行结果 leetcode 405. 数字转换为十六进制数. 题目描述 数字转换为十六进制数 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制…...

部门来了个软件测试,听说是00后,上来一顿操作给我看呆了...
前段时间公司新来了个同事,听说大学是学的广告专业,因为喜欢IT行业就找了个培训班,后来在一家小公司干了三年,现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍,服务器缩减一半,性能反而提升4倍!给…...

使用篇丨链路追踪(Tracing)很简单:链路拓扑
作者:涯海 最近一年,小玉所在的业务部门发起了轰轰烈烈的微服务化运动,大量业务中台应用被拆分成更细粒度的微服务应用。为了迎接即将到来的双十一大促重保活动,小玉的主管让她在一周内梳理出订单中心的全局关键上下游依赖&#…...
2023年厦门等保二级备案办理流程
根据规定,已运营/运行或新建的第二级以上信息系统的企业,事业单位/行政机关/民办非企业单位/社团组织/其他组织必须办理等保备案。 2023年厦门等保二级备案办理流程 办理机构:公安局 办结时限:受理后10个工作日 办理方式:网上…...
提高开发效率,从这些小技巧开始——5个让你爱上IDEA的增加体验小技巧
前言 如果你是一名Java开发人员,那么你一定会使用IntelliJ IDEA这个IDE。IntelliJ IDEA作为目前最受欢迎的Java IDE之一,已经成为了众多Java开发人员必备的工具之一。但是,你是否知道如何利用IDEA中的一些小技巧来提高你的开发效率和体验呢&a…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...