接上期链接:https://blog.csdn.net/kiss_the_night/article/details/107452968

编写爬虫软件其实最好提前了解一些计算机网络的基本知识,我会考虑之后和python语法规则,做一些专门的整理。本次程序编写主要是参考了ZHOUJING的博客:https://www.zjhuiwan.cn/toDetail?articleId=1905241241124060007,大家可以去围观学习(膜)。但本次的程序我会重新编写、运行和按照我的思路改动程序,尽量让这次软件编写能让绝大多数人(包括我自己)入门程度地理解爬虫。同时也会在软件编写中介绍简单的python语法知识点。

什么是爬虫?简单的理解是对网站或软件中的数据进行查询和整理,最后得到我们需要的数据和信息。以小说网站爬虫为例,最后就需要整理下载出方便阅读的文本文件。当然,爬虫应该也有很多专业性更强的进阶应用,网站也会为了避免爬虫使用一些反爬虫的方法,这些问题作为入门程序不做讨论。

一、准备工作:

1.关于python库,模块和包的理解(来自对网络的整理)

python的流行主要依赖于其有众多功能强大的(Library)。Python本身安装时就有自带的标准库(Standard Library),能满足大部分编程时的需求。在Python中,具有某些功能的模块和包都可以被称作库。

模块(Module)是一种以.py为后缀的文件,在.py文件中定义了一些常量和函数。模块的名称是该.py文件的名称。模块的名称作为一个全局变量__name__的取值可以被其他模块获取或导入。模块的导入通过ipmort来实现,导入模块的方式为:import + 特定模块名。模块有诸多函数组成,包由诸多模块机构化组成,库中也可以包含包、模块和函数。

(Package)由模块文件构成,将众多具有相关功能的模块文件结构化组合形成包。构建一个包可以防止开发者面临无法确认是哪个模块被导入的问题。将模块放到包文件夹下,通过“包.模块名”来指定模块。示例:import 包名称.模块名称

2.Python的pip

pip 是 Python包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。

3.python 模块chardet下载及介绍

在处理字符串时,常常会遇到不知道字符串是何种编码,如果不知道字符串的编码就不能将字符串转换成需要的编码。面对多种不同编码的输入方式,是否会有一种有效的编码方式?chardet是一个非常优秀的编码识别模块。chardet 是python的第三方库,需要下载和安装。

安装方法:打开cmd输入pip指令

pip install chardet 

 

但我们在pycharm的.py文件中输入import chardet,仍然不能正常导入,原因是路径没有正常导入导致PyCharm无法正常识别,参考:https://blog.csdn.net/mdxiaohu/article/details/82430060

①点击上方菜单栏File-Settings或后方对于快捷键打开Settings设置

②选中Version Control下方的项目,后方“test”对应的是你自己的项目名,再点击Project Interpreter项目编译,右边出现的主页面点击右上角的设置符号,出现的项中选择Add项

③选择System Interpreter,然后选择...,最后选择你的Python安装路径,一直选择OK关闭页面即可。

此时发现不会报错了,开始进行正式的程序编写

二、爬虫程序

1.如何爬取一个网页的html源代码

当我们使用浏览器进入一个网站时,可以理解为本机通过网络向网页发送请求的包,网页返回一个含有网页具体信息的包。而最终让网页呈现在外面眼前是通过网站的源代码,在使用浏览器时我们也可以用快捷键ctrl+u查看源代码,比如百度。源代码一般是由html语言和动态的脚本语言构成,具有较高的可读性。如果完全不了解网页设计对于爬虫理解上可能比较困难,从实例上也只是尽量让你了解皮毛。所以了解和学习网站设计的基础知识是非常有必要的。

 

2.用python语言查看并存储网页源代码

先给出一段完整的可执行代码,之后我们再来慢慢分析:

①运行PyCharm,在左上角菜单栏点击File-New Project,新建一个项目,命名为Crawler_1

②新建test1.py,写入如下代码

import urllib.request
import chardet
page=urllib.request.urlopen('http://www.meituba.com/dongmantupian') #打开网页
htmlCode=page.read() #获取网页源代码
# print(chardet.detect(htmlCode)) #查看编码方式
data = htmlCode.decode('utf-8')
print(data) #打印网页源代码
pageFile=open('pageCode.txt','wb')#以写的方式打开pageCode.txt
pageFile.write(htmlCode)#写入
pageFile.close()#开了记得关
print(chardet.detect(htmlCode)) #查看编码方式
print("finish!")

③发现报错,无法找到chardet,因此需要配置路径,上面有详细演示,这里用文字描述一遍:

菜单栏 - File - Settings,打开后选中Version Control下方的项目,后方“Crawler_1”对应的是你自己的项目名,再点击Project Interpreter项目编译,右边出现的主页面点击右上角的设置符号,出现的项中选择Add项,选择System Interpreter,然后选择...,最后选择你的Python安装路径,一直选择OK关闭页面即可。

④在点击菜单栏Run运行test1.py后,我们得到如下的输出。不用着急,简单分析一下:

红色部分:上面还有很多省略的部分,即网页源代码,也可以在浏览器“ctrl+u”查看源代码。对应代码行为:

print(data) #打印网页源代码

蓝色部分:查看网页源代码的编码方式,以便对源码进行解码。这部分输出的含义是:有0.99的可能确信网页的编码方式是utf-8。对应代码行为:

print(chardet.detect(htmlCode)) #查看编码方式

绿色部分:放在程序结尾,用来表示程序运行完成。对应代码行为:

print("finish!")

我们查看源代码的网站是一个动漫图片网站,也可以直接用浏览器打开。对应代码行为:

page=urllib.request.urlopen('http://www.meituba.com/dongmantupian') #动漫图片

其他部分大家自行阅读并学习,难点应该主要在计网基础知识和函数上,推荐手敲一遍,遇到费解的函数勤用搜索引擎,并尽可能与之前学习的语言进行类比。

到目前为止,你需要对python有的两点认识。

1.python每行代码的结尾不需要使用终止符。扩展:Python 中使用了分号作为语句分隔符,但是不用分号作为终止符, 而是用了换行作为终止符。

3.python中变量是不需要声明类型的。但是,每个变量在使用前必须赋值,只有赋值的变量才会被创建,赋值方式和其它语言一样,是用=表示。

2.python用#表示注释。扩展:pycharm快捷键“ctrl+/”进行代码注释和取消注释。多行注释在这些行的上方和下方分别用三个单引号 ''' 或者三个双引号 """ 括起来即表示注释。

⑤为什么要检测编码方式?

如上面蓝字部分所说,如果编码方式与解码方式不匹配,代码就会报错:

import urllib.request
import chardet
page=urllib.request.urlopen('http://www.quanshuwang.com/') #打开网页
htmlCode=page.read() #获取网页源代码
print(chardet.detect(htmlCode)) #查看编码方式,得到的编码方式不是utf-8,而是GB2312
# # data = htmlCode.decode('utf-8') #错误代码
# data = htmlCode.decode('gbk') #正确代码
# print(data) #打印网页源代码
# pageFile=open('pageCode.txt','wb')#以写的方式打开pageCode.txt
# pageFile.write(htmlCode)#写入
# pageFile.close()#开了记得关
# print("finish!")

上述网站的编码方式是GB2312,对应的解码方式是gbk,如果仍然使用utf-8解码就会报错

3.图片爬虫

爬取源代码可能没有让你理解爬虫的作用,接下来我们的任务也许会激起你的兴趣,对单一网页中显示的图片进行爬虫,最后下载并存储到本地。这一爬虫功能的实现原理也非常好理解:根据html代码中图片语句的查找分析,得到具体的图片地址。

第一个选取的网站依然是上面提到的动漫图片网站:

page = urllib.request.urlopen('http://www.meituba.com/dongmantupian') #打开网页

①右键点击项目名 - New - Directory,建立一个命名为img的空文件夹(也可以直接手动在项目中新建文件夹)

②在Crawler项目中新建.py文件test2.py,写入一下内容并运行

import urllib.request
# import chardet
import repage = urllib.request.urlopen('http://www.meituba.com/dongmantupian') #打开网页
htmlCode = page.read() #获取网页源代码# print(chardet.detect(htmlCode)) #查看编码方式
data = htmlCode.decode('utf-8')
# print(data) #打印网页源代码reg = r'src="(.+?\.jpg)"'#正则表达式
reg_img = re.compile(reg)#编译一下
imglist = reg_img.findall(data)#进行匹配x = 0
for img in imglist:print(img)urllib.request.urlretrieve(img, 'img/%s.jpg'  % x)x += 1
print("finish!")

运行后可以看到,控制台输出了图片的地址,在浏览器打开就是单张的图片

同时,可以在刚才创建的img文件夹下找到下载的图片

怎么样?有没有觉得很神奇。不管你是好奇还是疑惑,接下来我们从上到下分析一下代码:

import urllib.request
# import chardet
import repage = urllib.request.urlopen('http://www.meituba.com/dongmantupian') #打开网页
htmlCode = page.read() #获取网页源代码# print(chardet.detect(htmlCode)) #查看编码方式
data = htmlCode.decode('utf-8')
#print(data) #打印网页源代码

第一段:头文件re对应之后的re.compile()函数,用来编译正则表达式。urllib.request.urlopen()打开对应页面,并用对应的方式解码存储在data中(这里我们已知编码方式是utf-8了)

reg = r'src="(.+?\.jpg)"'#正则表达式

reg_img = re.compile(reg)#编译一下 

imglist = reg_img.findall(data)#进行匹配

第二段:我们先看一下动漫图片网页的源代码:

不难发现,我们之前在控制台的图片地址其实就是源代码中的蓝字下划线链接。而且,每个链接前后的html语句都有部分句型相似

我们的目标也就很明确了:从源代码中找到所有句型相似的语句,并将所有蓝字下划线链接保存。而正则表达式正是用来匹配在相似语句,得到这些链接的。

再细分一些讲解:

reg = r'src="(.+?\.jpg)"'#正则表达式

形式为 赋值量 = r'正则表达式'。先来理解r的含义:

python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string(原始的串),不需要转义'\' 。 例如,\n 在raw string中,是两个字符\和n, 而不会转意为换行符。由于正则表达式和 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'。

再来看引号内正则表达式部分:

正则表达式用来找到子串,匹配时遵循从左到右依次匹配。同时有很多符号在正则表达式中表示指定的含义,也扩展了正则表达式的匹配功能,接下来简单介绍一些,更多就需要自学了。

正则表达式部分基础知识:

\s:表示匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。(\f:匹配换页符;\n:匹配换行符;\r:匹配回车符;\t:匹配制表符;\v:匹配垂直制表符)。

\S:表示匹配任何非空白字符,等价于 [^ \f\n\r\t\v]。

\\:用来匹配\,因为单独使用的\需要用来转义。比如匹配*,实际上正则表达式写成\*来匹配,。

*:表示*前的字符出现了0次或多次。比如\s*表示多个空格。类似的有+:出现了1次或多次;?:出现了0次或1次。

() :小括号是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。(\s*)表示连续空格的字符串。小括号在本次的代码中经常使用。

[]:中括号用来定义匹配的字符范围,比如: [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。这里要特别注意,实际情况不清楚可以写程序先试一下。

{}:大括号一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s{1,3}表示匹配一到三个空格。[0-9]{0,9} 表示长度为 0 到 9 的数字字符串。

.:匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。

惰性匹配:匹配时默认是贪婪匹配。在重复量词(如+和*)后面加一个问号(?)即可进行惰性匹配;惰性匹配模式是尽可能少的匹配字符,但是必须要满足正则表达式的匹配规则。比如匹配abcdefgbab,如果正则表达式为.+b,则为贪婪匹配,返回abcdefgbab;如果正则表达式为.+?b,则为惰性匹配,返回最短的ab。

再来解释代码中用到的正则表达式:

src="(.+?\.jpg)"

含义为:从左到右当出现s开始时匹配,一直匹配到 src=",出现括号表示我们需要提取的内容是括号括起的部分——图片链接,接下来的三个字符.+?可以一起看,表示惰性匹配。因为.是重复量词,\.用来匹配.,因此匹配到的是最早出现的.jpg的位置。得到一个jpg图片链接。

reg_img = re.compile(reg)#编译一下 

compile()函数返回的是一个匹配对象,它单独使用就没有任何意义,需要和findall(), search(), match()搭配使用。compile()与findall()一起使用,返回一个列表。

当然,有文章也表示这样写没有必要,运行不会更快:https://zhuanlan.zhihu.com/p/70680488。但这种写法依然是比较清晰可读的,建议初学者还是记住和使用吧。

imglist = reg_img.findall(data)#进行匹配

一个列表,记录的是源代码中所有匹配到的图片链接的列表。

x = 0
for img in imglist:print(img)urllib.request.urlretrieve(img, 'img/%s.jpg'  % x)x += 1
print("finish!")

第三段:这里第一次出现python的for语句和缩进,也引出了Python语言非常基础且重要的一点。

Python中是没有大括号的,Python中用缩进符来定界代码块

接下来for语句的格式,如果接触过别的语言非常一目了然,形式如下,注意缩进:

for 迭代变量 in 序列:操作

这段的意思是对于图片链接列表中的每个链接,先打印链接输出在控制台,之后使用 urllib.request.urlretrieve()函数下载图片。该函数第一个参数为图片地址。第二个参数为文件名,因为x是一个不断+1的变量,所以n张图片会被命名为0.jpg到n-1.jpg。img/表示保存在项目中新建的img文件夹内。

4.另一个网站的图片爬虫

上面这个图片爬虫其实难度较低,原因是图片格式过于整齐。因此为了熟悉和理解图片爬虫,我们再来爬虫另一个网站:百度贴吧:https://tieba.baidu.com/index.html。这部分内容我不会详细解释,大家可以充分发挥主观能动性(其实是因为我懒)。最后会给出代码,推荐先自己尝试编写和改错。

注意新建一个文件夹img2来保存爬虫图片。

贴吧图片爬虫一些可能踩的坑:

1.解码。注意先看一下百度贴吧的编码方式,保证解码不出错。

2.百度贴吧的图片链接中并不只有jpg类型的图片,还有jpeg和png等。正则表达式要做相应的修改,可以参考后面给出的代码。当然,能实现的正则表达式有非常多种,你也不妨按自己的理解试一试。

3.有的图片链接显得“很不协调”,无法用pycharm正常打开(坏笑),因此需要做一些处理。而在处理之前:请注释掉图片通过链接下载的部分,以便查看这些图片链接发现问题加以处理。

发现问题和调试错误的能力在编程中极为重要,也难以描述,在这一部分多花一些时间是值得的。

最后附上我的代码仅供参考:

import urllib.request
# import chardet
import repage = urllib.request.urlopen('https://tieba.baidu.com/index.html') #打开网页
htmlCode = page.read() # 获取网页源代码# print(chardet.detect(htmlCode)) #查看编码方式
data = htmlCode.decode('utf-8')
# print(data) # 打印网页源代码# pageFile = open('pageCode.txt','wb')#以写的方式打开pageCode.txt
# pageFile.write(htmlCode)#写入
# pageFile.close()#开了记得关reg = r'src="(.+?\.j?pe?n?g)"'#正则表达式
# reg = r'src="(.+?\.jpg)"'#正则表达式
reg_img = re.compile(reg)#编译一下,运行更快
imglist = reg_img.findall(data)#进行匹配x = 0
for img in imglist:print(img)if not img.startswith('h'):img = "http:" + img# urllib.request.urlretrieve(img, 'img/%s.jpg'  % x)urllib.request.urlretrieve(img, 'img2/%s.jpg' % x)x += 1
print("finish!")

运行结果:

补充部分

1.控制台自动换行:因为我使用pycharm默认没有自动换行,导致爬虫的结果有一部分没有显示打印在控制台。具体操作为:菜单栏 - File - Settings - Editor - General - Console中勾选右侧第一项Use soft wraps in console - ok。

 

 

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

相关文章

  1. Vue开发小技巧

    1.事件绑定和解绑通常,我们会在mounted中给dom绑定事件,然后在beforeDestroy中解绑。不过,有的时候,绑定和解绑写在两个不同的函数里面会觉得有些麻烦,也不利于维护。其实,可以通过$once+hook将事件绑定和解绑写在一起。原写法:public mounted() {this.targetRef.addEve…...

    2024/5/6 21:38:13
  2. 二层交换机、三层交换机和路由器的基本工作原理和三者之间的主要区别

    二层交换机:二层交换技术是发展比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。具体如下:(1)当交换机从某个端口收到一个数据包,它先读取包头中的源MAC地址,这样…...

    2024/4/24 5:52:48
  3. kali 链接外网

    # 情景 今天在使用kali的时候,需要依赖包升级,联网的,但是试了一下,ping不通百度 ping www.baidu.com# 解决 因为我之前把网络服务挂你了,所以呢,我又重新启动了下 service network-manager start 之后,使用命令ifconfig,查看了下IP,发现竟然没有IP 一步到位 只用命令…...

    2024/5/7 1:03:07
  4. javascript之条件语句

    条件语句用于基于不同的条件来执行不同的动作。 在 JavaScript 中,我们可使用以下条件语句:if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码 if…else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码 if…else if…else 语句- 使用该语句来选择…...

    2024/5/7 0:54:50
  5. 如何禁用和恢复任务管理器

    1.禁用任务管理器 win + r 键调出运行,输入regedit调出注册表,在地址栏里输入 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies在里面新建一个项名为system并在其中新建一个DWORD值名字为DisableTaskMgr设置数据数值为1这时任务管理器已被成功…...

    2024/5/1 21:13:23
  6. Java基础1

    字符常量 在’中必须有且仅有一个字符,没有不行。 空常量 空常量null不能直接被打印出来。 数据类型 基本数据类型和引用数据类型 基本数据类型 整数型:byte short int long 浮点型:float double 字符型:char 布尔型:boolean 字符串不是基本数据类型,而是引用数据类型。 …...

    2024/5/7 0:44:50
  7. Java中的多态

    Java中的多态 在Java中的向上转型中,如果一个具有子类类型的变量转换成了其父类类型,那么在子类中定义的特有的方法,此时便不能被调用。 Java中equals()和hashcode()方法: hashCode()方法给对象返回一个hash code值。这个方法被用于hash tables,例如HashMap。 它的性质…...

    2024/5/2 4:23:07
  8. 线性回归

    线性回归机器学习的基本目的 MachineLearning希望从数据中获得超越数据本身的抽象概念,使得对于新的自变量,能够给出一个合适的因变量。 基本分为两种: 预测离散值 连续值预测 其中,连续值预测指的是通过训练,得到一个恰当的模型 f(θ):x→yf(\theta):x \to yf(θ):x→y 使…...

    2024/4/21 16:06:29
  9. Eclipse插件安装之,使用(已经下载的zip)安装包直接安装插件

    ■前言工作的电脑,一般使用这种方式安装。■操作・step1・step2・step3・step4・step5■其他安装方式直接从网络上安装。...

    2024/4/30 12:37:23
  10. 小孩吃梨问题:小孩买了一些梨,当即吃了一半,又多吃了一个,第二天早上又将剩下的梨吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半,并又多吃了一个。到第18天只剩下一个梨了,问共买多少梨?

    首先此类问题一般作为引入递归法启蒙题,因为这个小孩每天吃梨的这个行为及吃梨的规律都是相当于同一特性被重复执行,即当某一特性被重复执行时就可以考虑递归算法。 递归算法是一种程序调用自身的编程技巧,其实也就是特殊的方法调用,方法调用自己。 但是自己调用自己的话其实…...

    2024/4/27 8:37:26
  11. Java基础2

    加号 *对于字符char类型来说,在计算之前。char会被提升为int,然后再计算。 *任何数据类型和字符串进行连接的时候,结果都会变成字符串。 自增操作 *前++,变量马上自增,然后拿着结果使用。 *后++,先使用变量本来的数值,然后再自增。 只有变量才能使用自增或自减运算符。常…...

    2024/5/1 9:14:19
  12. mysql关键词的区分

    trim去掉前后空格不去中间空格 utf一个汉字占3个字节 CEIL向上取整 FLOOR向上取整 ROUND四舍五入,再加正负 rand返回0-1之间的随机数,不包含1 truncate截断 #保留小数点后1位数 select truncate(1.459,1) delete可以加where条件,trun不可以加where条件 truncate自增清空,de…...

    2024/5/1 3:50:36
  13. 如何利用反射批量修改java类某一属性的代码详解

    下面看下代码,具体代码如下所示:package utils.copyProperty;import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection;public class CopyProperty {public stat…...

    2024/5/7 2:43:56
  14. 通过 MobaXterm 建立隧道作为跳板机

    打开浏览器 使用:http://127.0.0.1:8080/ 登录...

    2024/4/12 14:10:50
  15. Http--通信的主要

    Http 1 什么是Http Http(超文本传输协议)是一个简单的请求、响应协议,他通常运行在TCP上文本:html、字符串 超文本:图片、音乐、视频、定位、地图 Http默认端口(80)、Https默认端口(443安全的)2 Http请求 客户端–发送请求(Request)–服务器Request URL:https://www…...

    2024/4/24 18:32:12
  16. Java C# 静态成员不能调用非静态的原因

    主要是生命周期不同,静态成员是先于非静态成员存在的静态成员存在于共享区中,此时可能还 没有new对象到堆内存中,也就没有非静态成员存在,当然就不能访问...

    2024/5/7 3:26:41
  17. 滑动窗口问题——生成最大窗口数组

    滑动窗口问题——生成最大窗口数组 情景有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑倒最右边,窗口每次向右边划一个位置。 例如: 数组为 [4,3,5,4,3,3,6,7],窗口大小为3时: [4 3 5] 4 3 3 6 7 窗口的最大值为5 4[3 5 4] 3 3 6 7 窗口的最大值为5 4 3[5 4 3] …...

    2024/4/8 21:31:49
  18. Javaweb5_使用Telnet远程连接服务器端

    实验 实验工具:Telent HTTP协议与TELNET协议都是基于TCP协议使用Telnet连接某主机: telnet www.hao123.com 80 GET /index.html HTTP/1.1 Host: www.hao123.com改成HEAD安装Tomcat,使用浏览器访问Tomcat:使用Telnet连接Tomcat: telnet localhost 8080 HEAD / HTTP/1.1 Host: …...

    2024/4/18 11:18:59
  19. 设计算法判断给定的无向图是树(C++)(附源码,可以直接运行)

    设计算法判断给定的无向图是树 从做完本次作业到写这篇博客已经过去了大概两三个月,对一些点可能已经忘记了。 中间也许有写的不好的地方,请大家见谅。一、算法思想: 判断方法为使用DFS进行遍历,看是否可以将图节点全部遍历(判断是否是连通图),同时统计边数,判断是否为…...

    2024/4/8 21:31:47
  20. Oracle官方发布:Java虚拟机规范JavaSE第8版,真香警告啊「色」

    前言本书完整而准确地阐释了Java虚拟机各方面的细节,围绕ava虚拟机整体架构、编译器、class文件格式,加载、链接与初始化、指令集等核心主题对Java拟机进行全面而深入的分析。深刻揭示Java虚拟机的工作原理。同时,书中不仅完整地讲述了由Java SE 8所引入的新特性.例如对包含默…...

    2024/4/8 21:31:46

最新文章

  1. MySQL基础_4.排序与分页

    文章目录 一、排序二、分页 一、排序 使用 ORDER BY 子句排序: ASC(ascend): 升序DESC(descend):降序 二、分页 MySQL中使用 LIMIT 实现分页,格式: LIMIT [位置偏移量,] 行数第一个“位置偏…...

    2024/5/7 4:03:00
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. JVM学习笔记

    文章目录 一、内存模型1. 程序计数器2. 栈3. 本地方法栈4. 堆5. 方法区方法区位置字符串常量池位置 6. 直接内存 二、虚拟机参数设置三、类的生命周期1. 加载2. 连接1)验证2)准备3)解析 3. 初始化4. 卸载 四、类加载器1. 启动类加载器2. 扩展…...

    2024/5/5 8:36:54
  4. 【stm32】I2C通信协议

    【stm32】I2C通信协议 概念及原理 如果我们想要读写寄存器来控制硬件电路,就至少需要定义两个字节数据 一个字节是我们要读写哪个寄存器,也就是指定寄存器的地址 另一个字节就是这个地址下存储寄存器的内容 写入内容就是控制电路,读出内容就…...

    2024/5/4 15:30:22
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/6 18:23:10
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/6 18:40:38
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...

    2024/5/6 23:37:19
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...

    2024/5/6 7:24:07
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...

    2024/5/7 0:32:52
  10. 【Objective-C】Objective-C汇总

    方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/6 6:01:13
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...

    2024/5/6 7:24:06
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/7 1:54:46
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...

    2024/5/6 20:04:22
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/7 0:32:51
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/6 7:24:04
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/6 7:24:04
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/6 19:38:16
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...

    2024/5/6 7:24:03
  19. --max-old-space-size=8192报错

    vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...

    2024/5/7 0:32:49
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...

    2024/5/6 21:25:34
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...

    2024/5/6 7:24:02
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...

    2024/5/6 7:24:01
  23. python django 小程序图书借阅源码

    开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图&#xff0…...

    2024/5/7 0:32:47
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/6 16:50:57
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57