目录
一、概述
二、原理
三、爬虫分类
1、传统爬虫
2、聚焦爬虫
3、通用网络爬虫(全网爬虫)
四、网页抓取策略
1、宽度优先搜索:
2、深度优先搜索:
3、最佳优先搜索:
4、反向链接数策略:
5、Partial PageRank策略:
五、网页抓取的方法
1、分布式爬虫
2、Java爬虫
3、非Java爬虫
六、项目实战
1、抓取指定网页
2、抓取包含关键词网页
3、下载贴吧中图片
4、股票数据抓取
六、结语
一、概述
网络爬虫(Web crawler),又称为网络蜘蛛(Web spider)或网络机器人(Web robot),主要用来爬取目标网站内容的程序或脚本。
从功能上来区分网络爬虫:
数据采集
数据处理
数据储存
以上三个部分,基本工作框架流程如下图:
二、原理
功能:下载网页数据,为搜索引擎系统提供数据来源。组件:控制器、解析器、资源库。
Web网络爬虫系统首先将种子URL放入下载队列,然后简单地从队首中取出一个URL下载其对应的网页。得到网页的内容将其储存后,再经过解析网页中的链接信息可以得到一些新的URL,将这些URL加入下载队列。然后取出一个URL,对其对应的网页进行下载,再解析,如此反复进行,直到遍历了整个网络或满足某种条件后才会停止下来。
三、爬虫分类
1、传统爬虫
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
2、聚焦爬虫
聚焦爬虫工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用链接并将其放入等待抓取URL队列。然后它将根据一定搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统某一条件时停止。另外所有被爬虫抓取的网页将会被系统存储,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
3、通用网络爬虫(全网爬虫)
通用网络爬虫又称全网爬虫, 爬行对象从一些种子URL扩充到整个Web,主要为门户站点搜索引擎和大型Web服务提供商采集数据。这类网络爬虫的爬行范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面顺序要求相对较低,同时由于待刷新页面太多,通常采用并行工作方式,但需要较长时间才能刷新一次页面。虽然存在一定缺陷, 但通用网络爬虫适用于为搜索引擎搜索广泛的主题,有较强应用价值。
实际的网络爬虫系统通常是几种爬虫技术相结合实现的。
四、网页抓取策略
在爬虫系统中,待抓取URL队列是很重要的一部分。队列中URL以什么样顺序排列也是一个很重要的问题,因为这涉及先抓取哪个页面,后抓取哪个页面。
而决定这些URL排列顺序的方法,称之为抓取策略。
1、宽度优先搜索:
在抓取过程中,在完成当前层次搜索后,才进行下一层次搜索。
优点:算法设计和实现相对简单。缺点:随着抓取网页增多,大量无关网页将被下载并过滤,算法效率将变低。
2、深度优先搜索:
从起始网页开始,选择一个URL进入,分析这个网页中的URL,一个链接一个链接地抓取下去,直到处理完一条路线之后再处理下一条URL中的路线。
例如,下图中深度优先搜索的遍历方式时 A 到 B 到 D 到 E 到 F(ABDECF),而宽度优先搜索的遍历方式是 A B C D E F 。
3、最佳优先搜索:
按照一定的网页分析法,预测候选URL与目标网页的相似度,或者与主题的相关性,并选取评价最好的一个或几个URL进行抓取。
4、反向链接数策略:
反向链接数是指一个网页被其他网页链接指向的数量。反向链接数表示的是一个网页的内容受到其他人的推荐程度。
5、Partial PageRank策略:
Partial PageRank算法借鉴了PageRank算法的思想,对于已经下载的网页,连同待抓取URL队列中的URL,形成网页集合,计算每个页面的PageRank值,计算完之后,将待抓取URL队列中的URL按照PageRank值的大小排列,并按照该顺序抓取页面。
五、网页抓取的方法
1、分布式爬虫
用于目前互联网中海量URL管理,它包含多个爬虫(程序),每个爬虫(程序)需要完成的任务和单个爬行器类似。它们从互联网上下载网页,并把网页保存在本地的磁盘,从中抽取URL并沿着这些URL的指向继续爬行。由于并行爬行器需要分割下载任务,可能爬虫会将自己抽取的URL发送给其他爬虫。
这些爬虫可能分布在同一个局域网之中,或分散在不同地理位置。
现在比较流行的分布式爬虫:
Apache Nutch: 依赖hadoop运行,hadoop本身会消耗很多时间。Nutch是为搜索引擎设计的爬虫,如果不是要做搜索引擎,尽量不要选择Nutch。
2、Java爬虫
用Java开发的抓取网络资源的小程序,常用的工具包括Crawler4j、WebMagic、WebCollector等。
3、非Java爬虫
Scrapy: 由Python编写的,轻量级的、高层次的屏幕抓取框架。最吸引人的地方在于Scrapy是一个框架,任何使用者可以根据自己的需求进行进行修改,并具有一些高级函数,可以简化抓取过程。
六、项目实战
1、抓取指定网页
抓取某网首页
使用urllib模块,此模块提供了读取Web页面数据接口,可以像读取本地文件一样读取www和ftp上的数据。urllib是一个URL处理包,这个包中集合了一些处理URL的模块。
urllib.request 模块: 用来打开和读取URLs的。urllib.error 模块: 包含一些由 urllib.request 产生的错误,可以用try进行捕捉处理。urllib.parse 模块: 包含一些解析 URLs的方法。urllib.robotparser: 用来解析 robots.txt 文本文件。它提供了一个单独的 RobotFileParser 类,通过该类提供的 can_fetch() 方法测试爬虫是否可以下载一个页面。
以下代码为抓取某网页的代码:
import urllib.request
url = "https://www.douban.com/"
# 这边需要模拟浏览器才能进行抓取
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'}
request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
data = response.read()
# 这边需要转码才能正常显示
print(str(data, 'utf-8'))
# 下面代码可以打印抓取网页的各类信息
print(type(response))
print(response.geturl())
print(response.info())
print(response.getcode())
2、抓取包含关键词网页
代码如下:
import urllib.request
data = {'word': '海贼王'}
url_values = urllib.parse.urlencode(data)
url = "http://www.baidu.com/s?"
full_url = url + url_values
data = urllib.request.urlopen(full_url).read()
print(str(data, 'utf-8'))
3、下载贴吧中图片
代码如下:
import re
import urllib.request
# 获取网页源代码
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html
# 获取网页所有图片
def getImg(html):
reg = r'src="([.*\S]*\.jpg)" pic_ext="jpeg"'
imgre = re.compile(reg)
imglist = re.findall(imgre, html)
return imglist
html = getHtml('https://tieba.baidu.com/p/3205263090')
html = html.decode('utf-8')
imgList = getImg(html)
imgName = 0
# 循环保存图片
for imgPath in imgList:
f = open(str(imgName) + ".jpg", 'wb')
f.write((urllib.request.urlopen(imgPath)).read())
f.close()
imgName += 1
print('正在下载第 %s 张图片 ' % imgName)
print('该网站图片已经下载完')
4、股票数据抓取
代码如下:
import random
import re
import time
import urllib.request
# 抓取所需内容
user_agent = ["Mozilla/5.0 (Windows NT 10.0; WOW64)", 'Mozilla/5.0 (Windows NT 6.3; WOW64)',
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko)',
'Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1',
'Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3',
'Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12',
'Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Maxthon/4.0.6.2000 Chrome/26.0.1410.43 Safari/537.1 ',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; QQBrowser/7.3.9825.400)',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0 ',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.92 Safari/537.1 LBBROWSER',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BIDUBrowser 2.x)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/3.0 Safari/536.11']
stock_total = []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'}
for page in range(1, 8):
url = 'http://quote.stockstar.com/stock/ranklist_a_3_1_' + str(page) + '.html'
request = urllib.request.Request(url=url, headers={"User-Agent": random.choice(user_agent)})
response = urllib.request.urlopen(request)
content = str(response.read(), 'gbk')
pattern = re.compile('(.*?)<')
# 正则匹配
stock_page = re.findall(pattern, body[0])
stock_total.extend(stock_page)
time.sleep(random.randrange(1, 4))
# 删除空白字符
stock_last = stock_total[:]
print(' 代码', '\t', ' 简称', '\t', '最新价', '\t', '涨跌幅', '\t', '涨跌额', '\t', '5分钟涨幅')
for i in range(0, len(stock_last), 13):
print(stock_last[i], '\t', stock_last[i + 1], '\t', stock_last[i + 2], ' ', '\t', stock_last[i + 3], ' ', '\t',
stock_last[i + 4], '\t', stock_last[i + 5])
六、结语
以上使用Python版本为 3.9。
本篇内容参考自《Python3 数据分析与机器学习实战》一书,编写此篇以学习为主。
写完就有点懒洋洋的咩~(+ω+)
到此这篇关于python网络爬虫实战的文章就介绍到这了,更多相关python 爬虫内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
你可能感兴趣的:(python网络爬虫实战)
Java 领域 Dubbo 服务注册与发现机制详解
Java大师兄学大数据AI应用开发
java dubbo 开发语言 ai
Java领域Dubbo服务注册与发现机制详解关键词:Dubbo、服务注册、服务发现、微服务、RPC、Zookeeper、负载均衡摘要:本文深入剖析了Dubbo框架中的服务注册与发现机制,从核心概念到实现原理,再到实际应用场景和最佳实践。我们将通过源码分析、架构图解和实战案例,全面讲解Dubbo如何实现高效的服务治理,包括注册中心的作用、服务提供者与消费者的交互流程、负载均衡策略等关键内容。文章还将
Zabbix 企业级分布式监控部署
伤不起bb
zabbix 分布式
目录一、监控系统基础认知1.为什么需要监控?2.监控的5个层次(从底层到上层)3.监控系统的基本原理二、Zabbix系统详解1.Zabbix是什么?2.Zabbix核心功能3.Zabbix核心组件三、Zabbix部署实战(分布式架构)1.环境准备(4台服务器)2.部署ZabbixServer(核心步骤)步骤1:添加Zabbix源并安装依赖步骤2:配置数据库步骤3:导入Zabbix初始数据步骤4:配
Java全栈开发性能优化全攻略:从数据库到前端
AI天才研究院
计算 AI大模型企业级应用开发实战 AI人工智能与大数据 java 性能优化 数据库 ai
Java全栈开发性能优化全攻略:从数据库到前端关键词:Java全栈、性能优化、数据库索引、后端缓存、前端渲染、响应时间、系统瓶颈摘要:本文从全栈视角出发,系统讲解Java开发中数据库、后端服务、前端页面三大核心层的性能优化方法。通过生活类比、代码示例和实战案例,带你一步步理解索引设计、缓存策略、懒加载、防抖节流等关键技术,掌握从“发现瓶颈”到“精准优化”的完整流程,最终实现用户体验与资源效率的双重
操作系统视角下鸿蒙应用多语言的多媒体处理实践
操作系统内核探秘
操作系统内核揭秘 OS harmonyos wpf 华为 ai
操作系统视角下鸿蒙应用多语言的多媒体处理实践关键词:鸿蒙操作系统、多语言支持、多媒体处理、分布式架构、应用开发实践摘要:本文从鸿蒙操作系统的底层设计出发,结合多语言适配与多媒体处理两大核心场景,通过“系统能力-应用开发-用户体验”的全链路分析,揭示鸿蒙如何通过分布式架构、统一资源管理和多端协同特性,简化开发者在多语言多媒体应用中的开发复杂度。文章包含原理讲解、代码示例和实战案例,帮助开发者快速掌握
用 ArkTS 的 Repeat 组件玩转正向循环渲染:从基础到实战
初始化萧何
harmonyos 华为 深度学习
如果你经常开发HarmonyOS应用,肯定遇到过长列表渲染的问题——数据太多时页面卡得动不了,滑动时一顿一顿的,用户体验贼差。别担心,ArkTS的Repeat组件就是来解决这个问题的!它就像个"智能管家",能按需加载组件、自动回收复用,让长列表滑动如丝般顺滑。今天咱们就用大白话聊聊Repeat怎么用,从基础用法到高级技巧,保证看完你就能上手~一、Repeat是啥?先搞懂它的核心优势咱们先拿生活中的
如何让用户回到上次阅读的位置?
玛卡巴卡半夜不睡觉
状态模式
【前端实战】如何让用户回到上次阅读的位置?在阅读类、资讯类、博客类网站中,记忆用户上次阅读到的位置,并在下次访问时自动滚动回那个位置,可以大大提升用户体验感。今天我们就来详细讲一讲:前端如何实现用户回到上次阅读的位置,包括基础scroll方法+优化、IntersectionObserverAPI+探针追踪、锚点URLHASH定位跳转等策略实现一个流畅且高效的方案。一、总体思路1、核心目标在用户滚动
Spring Cloud Gateway过滤器精确控制异常返回(实战,控制http返回码和message字段)
程序员欣宸
欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览前文《SpringCloudGateway过滤器精确控制异常返回(分析篇)》咱们阅读源码,了解到SpringCloudGateway是如何处理全局异常信息的,学了那么多理论,不免手痒想实战验证学习效果,今天咱们就来写代码,最终目标是改写下图两个红框中
Android 蓝牙通讯全解析:从基础到实战
Monkey-旭
microsoft java android 蓝牙通讯
蓝牙作为一种短距离无线通信技术,在Android设备中应用广泛——从蓝牙耳机、蓝牙音箱等音频设备,到蓝牙打印机、蓝牙传感器等数据传输设备,再到蓝牙手表等穿戴设备,都依赖蓝牙通讯实现交互。本文将从蓝牙技术基础出发,详解Android蓝牙通讯的两种核心模式(经典蓝牙、低功耗蓝牙)及开发实战,帮助开发者快速实现蓝牙设备连接与数据交互。一、Android蓝牙技术基础1.1蓝牙技术分类与应用场景Androi
RxJava 全解析:从原理到 Android 实战
Monkey-旭
java rxjava 响应式编程 android
在Android开发中,异步任务处理是绕不开的核心场景——网络请求、数据库操作、文件读写等都需要在后台执行,而结果需回调到主线程更新UI。传统的“Handler+Thread”或AsyncTask不仅代码冗余,还容易陷入“回调地狱”(嵌套回调导致代码可读性差)。RxJava作为一款基于响应式编程思想的异步框架,通过“链式调用”和“操作符”完美解决了这些问题,成为Android开发者的必备工具。本文
SSH服务与rsync服务配置实战
SSH服务与rsync服务SSHssh服务,一种远程管理连接工具,在CentOS7系统中默认安装并开机自启的。SSH(SecureShell)是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能。监听tcp的22号端口。软件包名称:openssh配置文件目录:/etc/ssh,sshd_config服务端配置文件;ssh_config客户端配置文件。客户端提供:ssh、scp、sft
高阶知识库搭建实战五、(向量数据库Milvus安装)
伯牙碎琴
大模型 数据库 milvus 大模型 AI
以下是关于在Windows环境下直接搭建Milvus向量数据库的教程:本教程分两部分,第一部分是基于docker安装,在Windows环境下直接安装Milvus向量数据库,目前官方推荐的方式是通过Docker进行部署,因为Milvus的运行环境依赖于Linux系统。如果你希望在Windows上直接运行Milvus,可以考虑使用MilvusLite版本,这是一个轻量级的Python库,适用于快速原型
社交应用全栈开发实战:前后端与数据库整合
本文还有配套的精品资源,点击获取简介:本资源包详细介绍了构建一个社交应用程序的全过程,包括前端、后端以及数据库管理的核心组件和关键功能。Uniapp框架用于开发跨平台的移动端用户界面,Java后端负责处理业务逻辑和数据交互,MySQL数据库用于管理用户信息和动态数据。项目还包括前后端通信、身份验证、性能优化和推送通知服务的实现。学习这些代码可以提升开发者的技能,帮助快速构建社交应用。1.社交APP
新版进销存管理系统完整教程:PB9.0与SQL Server 2000的实战应用
语嫣凝冰
本文还有配套的精品资源,点击获取简介:本文档提供了一个基于PowerBuilder9.0和SQLServer2000开发的进销存管理系统的全面教程。系统涵盖了企业管理中的采购、销售和库存管理环节,通过强大的数据窗口组件和三层架构设计,实现了业务逻辑和数据库的有效交互。文章详细解释了系统的技术栈、核心功能、系统架构、数据窗口组件、数据库设计、报表分析及权限安全管理等关键点,旨在帮助用户深入理解进销存
从0构建 HarmonyOS 本地语音识别项目:Whisper 完整落地教程
观熵
国产大模型部署实战全流程指南 harmonyos 语音识别 whisper 深度学习 机器学习
第一章:鸿蒙手机语音识别项目实战(基于Whisper本地推理)项目目标:构建一个可以在鸿蒙系统手机本地运行的语音识别应用,使用Whisper模型识别用户语音为文字,全程无需联网。1.为什么要在鸿蒙手机本地部署语音识别?在很多移动场景下(驾驶、弱网环境、隐私敏感场景等),云端语音识别存在如下痛点:⏳网络延迟高、体验割裂⚠️数据隐私风险大网络依赖强,弱网/无网直接无法使用而将语音识别模型部署在鸿蒙设备
【速通RAG实战:数据库】6.RAG向量数据库原理
无心水
速通 RAG 实战!解锁 AI 2.0 高薪密码 速通RAG实战 RAG快速开发实战 RAG RAG向量数据库 相似度 FAISS Chroma
在RAG(检索增强生成)系统中,向量数据库扮演着至关重要的角色,它负责存储文本经过Embedding处理后的向量表示,并能高效地进行向量检索,以找出与查询向量最相似的文档。1.向量数据库原理1.向量表示在RAG系统里,文本首先会通过Embedding模型(如OpenAIEmbeddings、SentenceTransformers等)转化为固定维度的向量。这些向量能够捕捉文本的语义信息,使得语义相
集群技术笔记-HAProxy 与 Keepalived 高可用负载均衡实战
目录前言HAProxy一、HAProxy介绍(一)定义(二)核心优势(三)调度算法速查表(四)工作模式(五)配置文件结构(六)健康检查字段二、搭建负载均衡集群(一)准备基本环境(二)配置流程配置真实服务器配置代理服务器(三)客户端验证三、配置健康检查页面(一)修改配置文件追加配置内容(二)重启服务(三)浏览器访问验证Keepalived一、Keepalived介绍(一)定义(二)功能(三)工作原理
【华为419机考真题】服务器能耗统计,JAVA 题解
梦想橡皮擦
华为 服务器 java 华为OD机试 华为OD
最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理已参加机试人员的实战技巧本篇题解:服务器耗能题目描述服务器有三种运行状态:空载,单任务,多任务,每个时间片的能耗的分别为111、333、444,每个任务由起始时间片和结束时间片定义运行时
算法工程师必备:数据结构10大经典算法详解
数据结构与算法学习
数据结构与算法宝典 算法 数据结构 ai
算法工程师必备:数据结构10大经典算法详解关键词:数据结构、经典算法、时间复杂度、应用场景、代码实现摘要:本文是算法工程师的“算法工具箱”指南,系统讲解数据结构领域最核心的10大经典算法(快速排序、归并排序、二分查找、深度优先搜索DFS、广度优先搜索BFS、动态规划、贪心算法、KMP字符串匹配、哈希算法、并查集)。通过生活案例、代码示例、复杂度分析和实战场景,帮你彻底掌握这些算法的原理与应用,真正
全球软件技术峰会 2025:聚焦大模型开发、智能运维与架构创新,共赴技术实战盛宴
向日葵也有悲伤
运维 架构 推荐算法 数据结构 大数据 数据库架构
全球软件技术峰会2025:聚焦大模型开发、智能运维与架构创新,共赴技术实战盛宴在软件定义未来的时代,人工智能与数字化技术正以颠覆性力量重塑全球产业格局。2025年8月15-16日,以"全球专家、卓越智慧"为宗旨的全球软件技术峰会将盛大启幕,特邀全球近50位来自微软、谷歌、亚马逊、字节跳动等企业的技术领袖及一线实战专家,围绕大模型智能应用开发、AI与ML智能运维、软件开发智能化、架构设计与演进四大核
Java中的值传递 vs 引用传递本质区别
码农小灰
面试题 java java 开发语言
目录【导语】面试官到底想考什么?一、值传递和引用传递的本质区别1.值传递(PassbyValue)2.引用传递(PassbyReference)二、Java的“值传递”真相:传的是引用的副本1.基本类型:直接拷贝值2.对象类型:传递引用的副本三、常见误区:别再踩这些坑!误区1:“对象是引用传递”误区2:“数组是引用传递”误区3:“String是特殊引用传递”四、实战案例:覆盖90%的应用场景案例1
创建型模式
大曰编程
java面试 分布式 设计模式
创建型模式是设计模式的核心分支,专注于对象创建机制的优化,通过封装对象实例化过程,提升系统的灵活性与可扩展性。在分布式系统中,由于多节点协作、网络通信延迟、状态一致性等特性,传统单体环境下的创建型模式需进行适应性演化。本文从分布式场景出发,系统解析单例、工厂方法、抽象工厂、建造者、原型五大创建型模式的核心原理、分布式变种及实战应用。一、单例模式:分布式环境下的唯一性保障1.1单体与分布式单例的本质
从0到1构建数据库安全审计系统:设计、实现与实战
小张在编程
数据库
引言2024年某金融机构发生数据泄露事件,内部审计日志显示,某运维人员在非工作时间执行了SELECT*FROMcustomer_info的全表查询,但当时未触发任何告警——这并非技术漏洞,而是数据库安全审计系统的“失效”。随着《数据安全法》《个人信息保护法》的落地,数据库作为企业核心资产,其操作行为的可追溯、风险的可预警已成为合规刚需。本文将从需求分析到代码实现,带你拆解一个企业级数据库安全审计系
人工智能学习指南:从菜鸟到大神的进击之路
橡晟
人工智能 深度学习 计算机视觉 算法 学习 python
人工智能学习指南:从菜鸟到大神的进击之路前言:别慌,AI没那么可怕嘿!想学人工智能?恭喜你,你已经比90%的人更有眼光了!很多人一听到"人工智能"就开始头疼,仿佛这是什么高深莫测的巫术。其实不然,AI就像学做饭一样——刚开始可能会糊锅,但掌握了方法,你也能做出一桌好菜!目录第一章:认清现实,别被忽悠第二章:建立知识地图第三章:实战为王第四章:自检清单——你真的学会了吗?第五章:进阶之路结语:成为A
如何用 Python 绕过 cloudflare(5秒盾) 抓取数据:也不是很难嘛!
炒青椒不放辣
Web爬虫进阶实战 python cloudflare 爬虫 5秒盾 逆向
大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。逆向是爬虫工程师进阶必备技能,当我们遇到一个问题时可能会有多种解决途径,而如何做出最高效的抉择又需要经验的积累。本期文章将以实战的方式,带你全面了解cloudflare(5秒盾)以及如何绕过使用cloudflare服务的网站从而抓取数据特别声明:本篇文章仅供学习与研究使用,不用做任何非法用途,相关URL和API等均已做脱敏处理,若有侵权请联系作
结合自身,制定一套明确的 Web3 学习路线和技术栈建议
战族狼魂
Web3专栏 web3 学习
目录✅一、结合自身,明确方向和目的✅二、技术路线和建议技术路线图(按阶段划分)第一阶段:巩固Web3基础(1-2周)第二阶段:NFT平台开发实战(4-6周)第三阶段:钱包整合与增强功能(2-4周)第四阶段:部署&打磨作品(2-3周)✅技术栈建议求职建议(Web3方向)招聘关键词(建议你在招聘网站用这些关键词搜索):项目展示建议:Bonus:后续可拓展方向(你有后端经验)✅三、参考具体规划✅一、结合
微信社交自爆按钮,私有协议 weixin://voip/callagain 的“实战后果”
运维帮手大橙子
微信 java 开发语言
1它是一个超链接标签,点击后会跳转到指定的地址;href="weixin://voip/callagain/?username=thelegfish"是一个WeChat(微信)私有协议的链接;weixin://voip/callagain/表示唤起微信内的语音通话功能;?username=thelegfish指定了通话对象的微信用户名;标签文本是1,即显示为一个蓝色的“1”超链接。点击这个链接会直
基于 Vue3 + ECharts 实现渐变分段折线图:支持动态区间、响应式渲染与颜色控制
saadiya~
echarts 信息可视化 前端
在数据可视化项目中,折线图是最常见的图表类型之一,而通过颜色分段渐变可以让用户更加直观地感知数据的变化趋势和区间风险。本文将带你实战一个基于Vue3+ECharts的渐变分段折线图组件,支持传入valueList控制每段颜色,适配多种数据类型,实现图表的动态更新与响应式自适应。一、效果预览与场景说明该组件可应用于以下场景:空气质量指标(AQI)路况拥堵指数(如:0-0.5畅通,0.5-1一般,1-
横幅检测数据集-1500张图片 智慧城市管理 活动现场管理 商业广告分析
横幅检测数据集-1500张图片已发布目标检测数据集合集(持续更新)️横幅检测数据集介绍数据集概览检测目标类型应用场景数据样本展示使用建议1.数据预处理优化2.模型训练策略3.实际部署考虑4.应用场景适配5.性能优化建议数据集特色商业价值技术实现路径模型选择建议特殊技术考虑集成方案建议应用效果评估性能指标建议业务价值指标YOLOv8训练实战1.环境配置安装YOLOv8官方库ultralytics2.
Redis实战:第一章-初识Redis案例-文章投票
随风而醒
MySQL/数据库 redis
redis全称REmoteDIctionaryServer,即远程字典服务,是一个由SalvatoreSanfilippo写的key-value存储系统。Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是字符串(String),哈希(Map),
从 C# 到 Python:项目实战第五天的飞跃
AI、少年郎
数据库 c# 开发语言
在前面三天的学习中,我们已经掌握了Python的基础语法、数据结构以及一些核心库的使用。今天,我们将通过三个实战项目,深入对比C#和Python在命令行工具开发、Web应用开发以及数据处理方面的差异,感受Python在实际项目中的强大魅力。一、命令行工具开发:文件批量处理命令行工具是开发者日常工作中经常用到的工具,无论是文件处理、数据转换还是系统管理,都离不开命令行工具的身影。下面我们就来对比一下
[星球大战]阿纳金的背叛
comsci
本来杰迪圣殿的长老是不同意让阿纳金接受训练的.........
但是由于政治原因,长老会妥协了...这给邪恶的力量带来了机会
所以......现代的地球联邦接受了这个教训...绝对不让某些年轻人进入学院
看懂它,你就可以任性的玩耍了!
aijuans
JavaScript
javascript作为前端开发的标配技能,如果不掌握好它的三大特点:1.原型 2.作用域 3. 闭包 ,又怎么可以说你学好了这门语言呢?如果标配的技能都没有撑握好,怎么可以任性的玩耍呢?怎么验证自己学好了以上三个基本点呢,我找到一段不错的代码,稍加改动,如果能够读懂它,那么你就可以任性了。
function jClass(b
Java常用工具包 Jodd
Kai_Ge
java jodd
Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架。简单,却很强大! 写道 Jodd = Tools + IoC + MVC + DB + AOP + TX + JSON + HTML < 1.5 Mb
Jodd 被分成众多模块,按需选择,其中
工具类模块有:
jodd-core &nb
SpringMvc下载
120153216
springMVC
@RequestMapping(value = WebUrlConstant.DOWNLOAD)
public void download(HttpServletRequest request,HttpServletResponse response,String fileName) {
OutputStream os = null;
InputStream is = null;
Python 标准异常总结
2002wmj
python
Python标准异常总结
AssertionError 断言语句(assert)失败 AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) FloatingPointError 浮点计算错误 GeneratorExit generator.close()方法被调用的时候 ImportError 导入模块失
SQL函数返回临时表结构的数据用于查询
357029540
SQL Server
这两天在做一个查询的SQL,这个SQL的一个条件是通过游标实现另外两张表查询出一个多条数据,这些数据都是INT类型,然后用IN条件进行查询,并且查询这两张表需要通过外部传入参数才能查询出所需数据,于是想到了用SQL函数返回值,并且也这样做了,由于是返回多条数据,所以把查询出来的INT类型值都拼接为了字符串,这时就遇到问题了,在查询SQL中因为条件是INT值,SQL函数的CAST和CONVERST都
java 时间格式化 | 比较大小| 时区 个人笔记
7454103
java eclipse tomcat c MyEclipse
个人总结! 不当之处多多包含!
引用 1.0 如何设置 tomcat 的时区:
位置:(catalina.bat---JAVA_OPTS 下面加上)
set JAVA_OPT
时间获取Clander的用法
adminjun
Clander 时间
/**
* 得到几天前的时间
* @param d
* @param day
* @return
*/
public static Date getDateBefore(Date d,int day){
Calend
JVM初探与设置
aijuans
java
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台
SQL中ON和WHERE的区别
avords
SQL中ON和WHERE的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 www.2cto.com 在使用left jion时,on和where条件的区别如下: 1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
说说自信
houxinyou
工作 生活
自信的来源分为两种,一种是源于实力,一种源于头脑.实力是一个综合的评定,有自身的能力,能利用的资源等.比如我想去月亮上,要身体素质过硬,还要有飞船等等一系列的东西.这些都属于实力的一部分.而头脑不同,只要你头脑够简单就可以了!同样要上月亮上,你想,我一跳,1米,我多跳几下,跳个几年,应该就到了!什么?你说我会往下掉?你笨呀你!找个东西踩一下不就行了吗?
无论工作还
WEBLOGIC事务超时设置
bijian1013
weblogic jta 事务超时
系统中统计数据,由于调用统计过程,执行时间超过了weblogic设置的时间,提示如下错误:
统计数据出错!
原因:The transaction is no longer active - status: 'Rolling Back. [Reason=weblogic.transaction.internal
两年已过去,再看该如何快速融入新团队
bingyingao
java 互联网 融入 架构 新团队
偶得的空闲,翻到了两年前的帖子
该如何快速融入一个新团队,有所感触,就记下来,为下一个两年后的今天做参考。
时隔两年半之后的今天,再来看当初的这个博客,别有一番滋味。而我已经于今年三月份离开了当初所在的团队,加入另外的一个项目组,2011年的这篇博客之后的时光,我很好的融入了那个团队,而直到现在和同事们关系都特别好。大家在短短一年半的时间离一起经历了一
【Spark七十七】Spark分析Nginx和Apache的access.log
bit1129
apache
Spark分析Nginx和Apache的access.log,第一个问题是要对Nginx和Apache的access.log文件进行按行解析,按行解析就的方法是正则表达式:
Nginx的access.log解析正则表达式
val PATTERN = """([^ ]*) ([^ ]*) ([^ ]*) (\\[.*\\]) (\&q
Erlang patch
bookjovi
erlang
Totally five patchs committed to erlang otp, just small patchs.
IMO, erlang really is a interesting programming language, I really like its concurrency feature.
but the functional programming style
log4j日志路径中加入日期
bro_feng
java log4j
要用log4j使用记录日志,日志路径有每日的日期,文件大小5M新增文件。
实现方式
log4j:
<appender name="serviceLog"
class="org.apache.log4j.RollingFileAppender">
<param name="Encoding" v
读《研磨设计模式》-代码笔记-桥接模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 个人觉得关于桥接模式的例子,蜡笔和毛笔这个例子是最贴切的:http://www.cnblogs.com/zhenyulu/articles/67016.html
* 笔和颜色是可分离的,蜡笔把两者耦合在一起了:一支蜡笔只有一种
windows7下SVN和Eclipse插件安装
chenyu19891124
eclipse插件
今天花了一天时间弄SVN和Eclipse插件的安装,今天弄好了。svn插件和Eclipse整合有两种方式,一种是直接下载插件包,二种是通过Eclipse在线更新。由于之前Eclipse版本和svn插件版本有差别,始终是没装上。最后在网上找到了适合的版本。所用的环境系统:windows7JDK:1.7svn插件包版本:1.8.16Eclipse:3.7.2工具下载地址:Eclipse下在地址:htt
[转帖]工作流引擎设计思路
comsci
设计模式 工作 应用服务器 workflow 企业应用
作为国内的同行,我非常希望在流程设计方面和大家交流,刚发现篇好文(那么好的文章,现在才发现,可惜),关于流程设计的一些原理,个人觉得本文站得高,看得远,比俺的文章有深度,转载如下
=================================================================================
自开博以来不断有朋友来探讨工作流引擎该如何
Linux 查看内存,CPU及硬盘大小的方法
daizj
linux cpu 内存 硬盘 大小
一、查看CPU信息的命令
[root@R4 ~]# cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id"
model name : Intel(R) Xeon(R) CPU X5450 @ 3.00GHz
model name :
linux 踢出在线用户
dongwei_6688
linux
两个步骤:
1.用w命令找到要踢出的用户,比如下面:
[root@localhost ~]# w
18:16:55 up 39 days, 8:27, 3 users, load average: 0.03, 0.03, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
放手吧,就像不曾拥有过一样
dcj3sjt126com
内容提要:
静悠悠编著的《放手吧就像不曾拥有过一样》集结“全球华语世界最舒缓心灵”的精华故事,触碰生命最深层次的感动,献给全世界亿万读者。《放手吧就像不曾拥有过一样》的作者衷心地祝愿每一位读者都给自己一个重新出发的理由,将那些令你痛苦的、扛起的、背负的,一并都放下吧!把憔悴的面容换做一种清淡的微笑,把沉重的步伐调节成春天五线谱上的音符,让自己踏着轻快的节奏,在人生的海面上悠然漂荡,享受宁静与
php二进制安全的含义
dcj3sjt126com
PHP
PHP里,有string的概念。
string里,每个字符的大小为byte(与PHP相比,Java的每个字符为Character,是UTF8字符,C语言的每个字符可以在编译时选择)。
byte里,有ASCII代码的字符,例如ABC,123,abc,也有一些特殊字符,例如回车,退格之类的。
特殊字符很多是不能显示的。或者说,他们的显示方式没有标准,例如编码65到哪儿都是字母A,编码97到哪儿都是字符
Linux下禁用T440s,X240的一体化触摸板(touchpad)
gashero
linux ThinkPad 触摸板
自打1月买了Thinkpad T440s就一直很火大,其中最让人恼火的莫过于触摸板。
Thinkpad的经典就包括用了小红点(TrackPoint)。但是小红点只能定位,还是需要鼠标的左右键的。但是自打T440s等开始启用了一体化触摸板,不再有实体的按键了。问题是要是好用也行。
实际使用中,触摸板一堆问题,比如定位有抖动,以及按键时会有飘逸。这就导致了单击经常就
graph_dfs
hcx2013
Graph
package edu.xidian.graph;
class MyStack {
private final int SIZE = 20;
private int[] st;
private int top;
public MyStack() {
st = new int[SIZE];
top = -1;
}
public void push(i
Spring4.1新特性——Spring核心部分及其他
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
配置HiveServer2的安全策略之自定义用户名密码验证
liyonghui160com
具体从网上看
http://doc.mapr.com/display/MapR/Using+HiveServer2#UsingHiveServer2-ConfiguringCustomAuthentication
LDAP Authentication using OpenLDAP
Setting
一位30多的程序员生涯经验总结
pda158
编程 工作 生活 咨询
1.客户在接触到产品之后,才会真正明白自己的需求。
这是我在我的第一份工作上面学来的。只有当我们给客户展示产品的时候,他们才会意识到哪些是必须的。给出一个功能性原型设计远远比一张长长的文字表格要好。 2.只要有充足的时间,所有安全防御系统都将失败。
安全防御现如今是全世界都在关注的大课题、大挑战。我们必须时时刻刻积极完善它,因为黑客只要有一次成功,就可以彻底打败你。 3.
分布式web服务架构的演变
自由的奴隶
linux Web 应用服务器 互联网
最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网站具备了一定的特色,吸引了部分人访问,逐渐你发现系统的压力越来越高,响应速度越来越慢,而这个时候比较明显的是数据库和应用互相影响,应用出问题了,数据库也很容易出现问题,而数据库出问题的时候,应用也容易
初探Druid连接池之二——慢SQL日志记录
xingsan_zhang
日志 连接池 druid 慢SQL
由于工作原因,这里先不说连接数据库部分的配置,后面会补上,直接进入慢SQL日志记录。
1.applicationContext.xml中增加如下配置:
<bean abstract="true" id="mysql_database" class="com.alibaba.druid.pool.DruidDataSourc