数学建模-爬虫系统学习

尚硅谷Python爬虫教程小白零基础速通(含python基础+爬虫案例)
内容包括:Python基础、Urllib、解析(xpath、jsonpath、beautiful)、requests、selenium、Scrapy框架
在这里插入图片描述

python基础 + 进阶(字符串 列表 元组 字典 文件 异常)

页面结构

爬虫

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

urllib_get请求的quote方法

编码集的演变
由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,
这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。
但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,
所以,中国制定了GB2312编码,用来把中文编进去。
你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,
各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。
现代操作系统和大多数编程语言都直接支持Unicode。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

urllib_get请求的urlencode方法

在这里插入图片描述

urllib_post

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ajax的get请求

在这里插入图片描述
在这里插入图片描述

豆瓣电影前十页

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

ajax的post请求

肯德基的餐厅信息
判断ajax请求
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

异常


在这里插入图片描述
在这里插入图片描述

urllib_cookie登录

数据采集的时候需要绕过登录,进入某个页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代理池

在这里插入图片描述
在这里插入图片描述

解析

xpath

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

获取百度网页百度一下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

站长素材

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JsonPath

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

BeautifulSoup

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

爬取星巴克数据

在这里插入图片描述

Selenium

Selenium

【
驱动下载后,解压,放在项目目录下
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Phantomjs(基本被淘汰)

在这里插入图片描述
驱动下载后,解压,放在项目目录下
在这里插入图片描述

Chrome handless

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

requests

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
超级鹰平台,能够识别验证码图片

scrapy

  1. scrapy
    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖
    掘,信息处理或存储历史数据等一系列的程序中。
# (1) pip install scrapy
# (2)错1: building 'twisted.test.raiser' extension
#error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft
#Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-too
#解决1
#http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
#Twisted-20.3.0-cp37-cp37m-win_amd64.whl
#cp是你的python版本
#amd是你的操作系统的版本
#下载完成之后使用pip  install  twistec的路径安装
#切记安装完twisted再次安装scrapy
# (3)报错2 示python -m pip install --upgrade pip
#解决2 运行python -m pip install --upgrade pip
# (4)报错3 win32的错误
#解决3 pip install pypiwin32
# (5) anaconda
1. scrapy项目的创建以及运行
1.创建scrapy项目:
终端输入 scrapy startproject 项目名称(不能数字开头,不能有汉字)

项目组成:
spiders
_init_.py 自定义的爬虫文件.py --》由我们自己创建,是实现爬虫核心功能的文件 init_.py
items.py ---》定义数据结构的地方,是一个继承自scrapy.Item的类
middlewares. py ---》中间件代理
pipelines.py ---》管道文件,里面只有一个类,用于处理下载数据的后续处理默认是300优先级,值越小优先级越高(1-1000)
settings.py -》配置文件比如:是否遵守robots协议,User-Agent定义等

2.创建爬虫文件
要在spiders文件夹中去创建爬虫文件
cd项目的名字\项目名字\spiders
cd scrapy_baidu_091\scrapy_baidu_091\spiders创建爬虫文件
scrapy genspider 爬虫文件的名字 要爬取网页
eg:scrapy genspider baidu www.baidu.com  
一般情况下不需要添加http协议 因为start_urls的值是根据allowed_domains修改的所以添加了http的话那么start_urls就需要我们手动去修改了

生成的baidu.py
import scrapy
class BaiduSpider(scrapy. Spider):
	#爬虫的名字用于运行爬虫的时候使用的值
	name 'baidu'
	#允许访问的域名
	allowed_domains =['http://www.baidu.com']
	#起始的url地址指的是第一次要访问的域名
	# start_urls 在allowed_domains前面添加一个http://
	#在 allowed_domains的后面添加一个/ start_urls ['http: //http: //www. baidu. com/'] 		  	      
	#是执行了start_urls之后执行的方法
	方法中的response就是回的那个对象
	# 相当 response = urllib.request.urlopen() 
	# response requests. get()
	 def parse(self, response):
		#字符串
		# content = response. text
		#二进制数据
		# content = response. body
		# print('
		# print(content)
		span response. xpath('//div[@id="filter"]/div[@class="tabs"]/a/span')[0]  
		print()
		print(span. extract()
	
	# response的属性和方法
	# response.text
	# 获取的是响应的字符串
	# response.body
	# 获取的是二进制数据
	# response.xpath 可以直接是xpath方法来解析response中的内容 response. extract(
	# 提取seletor对象的data属性值
	# response.extract_first()提取的seletor列表的第一个数据
3.运行爬虫代码
scrapy crawl 爬虫名字
eg:scrapy crawl baidu

4. settings.py-ROBOTTXT_OBEY=TRUE注释掉
2. scrapy架构组成

(1)引擎-–》自动运行,无需关注,会自动组织所有的请求对象,分发给下载器
(2)下载器--》从引擎处获取到请求对象后,请求数据
(3)spiders-–》Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。换句话说, Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。
(4)调度器--》有自己的调度规则,无需关注
(5)管道(Item pipeline)—》最终处理数据的管道,会预留接口供我们处理数据
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。
每个item pipeline组件(有时称之为“Item Pipeline")是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。
以下是item pipeline的一些典型应用:
1.清理HTML数据
2.验证爬取的数据(检查item包含某些字段)
3.查重(并丢弃)
4.将爬取结果保存到数据库中

class CarSpider(scrapy. Spider):
	name ='car'
	allowed_domains ['https: //car. autohome. com. cn/price/brand-15. html']
	#注意如果你的请求的接口是html为结尾的那么是不需要加/的
	start_urls ['https: //car, autohome. com. cn/price/brand-15. html']
	def parse(self, response):
		name_list response. xpath('//div[@class="main-title"]/a/text()')
		price_list response. xpath('//div[@class="main-lever"]//span/span/text)' 		
		for i in range(len(name_list)):
			name = name_list[i].extract()
			price = price_list[i].extract()
			print(name, price)
3. scrapy工作原理

在这里插入图片描述
2. scrapy shell
1.什么是scrpy shell?
Scrapy终端,是一个交互终端,供您在未启动spider的情况下尝试及调试您的爬取代码。其本意是用来测试提取
数据的代码,不过您可以将其作为正常的Python终端,在上面测试任何的Python代码。
该终端是用来测试XPath或CSS表达式,查看他们的工作方式及从爬取的网页中提取的数据。在编写您的spider时,该
终端提供了交互性测试您的表达式代码的功能,免去了每次修改后运行spider的麻烦。
一旦熟悉了Scrapy终端后,您会发现其在开发和调试spider时发挥的巨大作用。
2.安装ipython
安装:pip install ipython
简介:如果您安装了 IPython,Scrapy终端将使用 IPython(替代标准Python终端)。 IPython 终端与其他
相比更为强大,提供智能的自动补全,高亮输出,及其他特性。
直接在终端输入 scrapy shell www.baidu.com
3. yield
1.带有yield的函数不再是一个普通函数,而是一个生成器generator,可用于迭代
2.yield是一个类似 return的关键字,迭代一次遇到yield时就返回yield后面(右边)的值。重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行
3.简要理解:yield就是return返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始案例:1.当当网
(1)yield(2).管道封装(3).多条管道下载(4)多页数据下载

import scrapy

class ScrapyDangdang095Item(scrapy.Item):
	# 定义下载的数据都有什么
	src = scrapy.Field()
	name = scrapy.Field()
	price = scrapy.Field()
import scrapy
from scrapy_dangdang_095.items import ScrapyDangdang095Item
class DangSpider(scrapy. Spider):
	name ='dang'
	allowed_domains = ['http: //category.dangdang.com/cp01.01.02.00.00.00.html'] 	
	start_urls = ['http: //category.dangdang.com/cp01.01.02.00.00.00.html']
	def parse(self, response):
		#pipelines
		#items
		#定义数据结构的
		#src =//ul[@id="component_59"]/li//img/@src
		#alt = //ul[@id="component_59"]/li//img/@alt
		#price = //ul[@id="component_59"]/li//p[@class="price"]/span[1]/text()
		#所有的seletor的对象都可以再次调用xpath方法
		li_list response. xpath('//ul[@id="component_59"]/1i')
		for li in li list:
			src =  li. xpath('.//img/@data-original').extract_first()
			if src:
				src = src
			else
				src = li. xpath('.//img/@src').extract_first()
			name = li. xpath('.//img/@alt').extract_first()
			price = li.xpath('.//p[@class="price"]/span[1]/text()').extract_first()
			book = ScrapyDangdang095Item(src=src,name=name,price=price)
			# 获取一个book就将book交给pipelines
			yield book

settings中开启管道,以下代码注释解开
ITEM_PIPELINES = {
#管道可以有很多个
‘scrapy_dangdang_095.pipelines.ScrapyDangdang095Pipeline’: 300,
}

class ScrapyDangdang095Pipeline:
	#在爬虫文件开始的之前就执行的一个方法
	def open_spider(self, spider):
		self. fp open('book. json', 'w', encoding='utf-8')
		# item就是yield后面的book对象
	def process_item(self, item, spider):
		#以下这种模式不推荐因为每传递过来一个对象那么就打开一次文件对文件的操作过于频繁
		##(1)write方法必须要写一个字符串而不能是其他的对象
		##(2)w模式会每一个对象都打开一次文件覆盖之前的内容
		# with open('book.json','a',encoding='utf-8')as fp: #
		fp. write(str(item))
		self. fp. write(str(item))
	return item
	#在爬虫文件执行完之后执行的方法
	def close_spider(self, spider):
		self. fp. close()

#多条管道开启
#(1)定义管道类
#(2)在settings中开启管道
class DangDangDownloadPipeline:
	def process_item(self, item, spider):
		url item. get('src')
		filename ='./books/' item. get( 'name')+'. jpg'
		urllib. request. urlretrieve(url ur1, filename= filename) 
		return item

 ITEM _PIPELINES ={
#管道可以有很多个那么管道是有优先级的优先级的范围是1到1000值越小优先级越高
'scrapy_dangdang_095.pipelines.ScrapyDangdang095Pipeline': 300,
'scrapy_dangdang_095. pipelines. DangDangDownloadPipeline': 301
}
  • 多页数据下载
import scrapy
from scrapy_dangdang_095.items import ScrapyDangdang095Item
class DangSpider(scrapy. Spider):
	name ='dang'
	#allowed_domains = ['http: //category.dangdang.com/cp01.01.02.00.00.00.html'] 
	#如果是多页下载,要调整allowed_domains的范围,一般只写域名
	allowed_domains = ['category.dangdang.com'] 	
	start_urls = ['http: //category.dangdang.com/cp01.01.02.00.00.00.html']
	base_url = 'http://category.dangdang.com/pg'
	page =1
	def parse(self, response):
		#pipelines
		#items
		#定义数据结构的
		#src =//ul[@id="component_59"]/li//img/@src
		#alt = //ul[@id="component_59"]/li//img/@alt
		#price = //ul[@id="component_59"]/li//p[@class="price"]/span[1]/text()
		#所有的seletor的对象都可以再次调用xpath方法
		li_list response. xpath('//ul[@id="component_59"]/1i')
		for li in li list:
			src =  li. xpath('.//img/@data-original').extract_first()
			if src:
				src = src
			else
				src = li. xpath('.//img/@src').extract_first()
			name = li. xpath('.//img/@alt').extract_first()
			price = li.xpath('.//p[@class="price"]/span[1]/text()').extract_first()
			book = ScrapyDangdang095Item(src=src,name=name,price=price)
			# 获取一个book就将book交给pipelines
			yield book
		
			 #每一页的爬取的业务逻辑全都是一样的,所以我们只需要将执行的那个页的请求再次调用parse方法就可以了
			#http: //category. dangdang. com/pg2-cp01. 01. 02.00.00.00. html
			#http://category.dangdang.com/pg3-cp01.01.02.00.00.00.html
			#http: //category. dangdang. com/pg4-cp01. 01. 02. 00. 00. 00. html
			if self. page < 100:
				self. page self. page 1
				url = self.base_url + str(self.page) + '-cp01.01.02.00.00.00.html'
			#怎么去调用parse方法
			#scrapy.Request就是scrpay的get请求
			#url就是请求地址
			#callback是你要执行的那个函数注意需要加
			yield scrapy. Request(url=ur1, callback=self. parse)

2.电影天堂
(1)一个item包含多级页面的数据

import Scrapy
from scrapy movie 099. items import ScrapyMovie099Item

class MvSpider(scrapy. Spider):
	name ='mv'
	allowed_domains = ['https: //www. dytt8. net/html/gndy/china/index. html'] 		
	start_urls = ['https: //www. dytt8. net/html/gndy/china/index. html']
	def parse(self, response):
		#要第一个的名字和第二页的图片
		a_list= response. xpath('//div[@class="co_content8"]//td[2]//a[2]')
		for a in a list:
		#获取第一页name和要点击接
		name = a.xpath('./text()'). extract_first()
		href = a.xpath('./@href').extract_first()
		#对第二页的链接发起访问
		yield scrapy. Request(url=ur1, callback=self. parse_second, meta=('name': name)
		def parse_second(self, response):
			#注意如果拿不到数据的情况下一定检查你的xpath语法是否正确
			src response. xpath('//div[@id="Zoom"]//img/@src').extract_first()
		#接受到请求的那个meta参数的值
		name = response. meta[ 'name']
		movie ScrapyMovie099Item(src=src, name=name) 
		yield movie

class ScrapyMovie099Pipeline:
	def open_spider(self, spider):
		self. fp open('movie. json', 'w', encoding='utf-8')
	def process_item(self, item, spider):
		self. fp. write(str(item))
		return item
	def close_spider(self, spider):
		self. fp. close()
  1. Mysql
    (1)下载(https:/dev.mysql.com/downloads/windows/installer/5.7.html
    (2)安装 (https: //jingyan.baidu.com/album/d7130635f1c77d13fdf475df.html)

  2. pymysql的使用步骤
    1.pip install pymysql
    2.pymysql. connect(host, port, user, password, db, charset)
    3.conn. cursor()
    4.cursor.execute()

  3. CrawlSpider
    1.继承自scrapy.Spider
    2.独门秘笈
    CrawlSpider可以定义规则,再解析html内容的时候,可以根据链接规则提取出指定的链接,然后再向这些链接发送请求
    所以,如果有需要跟进链接的需求,意思就是爬取了网页之后,需要提取链接再次爬取,使用CrawlSpider是非常合适的
    3.提取链接
    链接提取器,在这里就可以写规则提取指定链接
    scrapy. linkextractors. LinkExtractor(
    allow =()#正则表达式提取符合正则的链接
    deny = (),#(不用)正则表达式不提取符合正则的链接
    allow domains =()#(不用)允许的域名
    deny_domains =()#(不用)不允许的域名
    restrict xpaths =()),xpath,提取符合xpath规则的链接
    restrict css =(#提取符合选择器规则的链接)
    4.模拟使用
    正则用法: links1 = LinkExtractor(allow=r’list_23_\d+.html’)
    xpath用法: links2 = LinkExtractor(restrict_xpaths=r’//div[@class=“x”]‘) css用法: links3 = LinkExtractor(restrict css=’.x’)
    5.提取连接
    link. extract_links(response)
    6.注意事项
    【注1】callback只能写函数名字符串,callback=‘parse item’
    【注2】在基本的spider中,如果重新发送请求,那里的callback写的是
    callback=self.parse_item 【稍后看】follow=true是否进就是取规则进行取

  4. CrawlSpider案例
    需求:读书网数据入库
    1.创建项目: scrapy startproject dushuproject
    2.跳转到spiders路径 cd\dushuproject\dushuproject\spiders
    3.创建爬虫类: scrapy genspider -t crawl read www.dushu.com
    4.items
    5.spiders
    6.settings
    7.pipelines
    数据保存到本地
    数据保存到mysq1数据库

 import scrapy
from scrapy. linkextractors import LinkExtractor
from scrapy. spiders import CrawlSpider, Rule
from scrapy_readbook_101. items import ScrapyReadbook101Item
 class ReadSpider(CrawlSpider )
name 'read'
allowed_domains ['www. dushu. com']
start_urls ['https: //www. dushu. com/book/1188_1. html']
rules =
Rule(LinkExtractor(allow=r'/book/1188_\d+\. html'),
callback='parse_item',
follow=False),
)
def parse_item(self, response):
img_list response. xpath('//div[@class="bookslist"]//img') for img in img_list:
name img. xpath('. /@data-original'). extract_first()
src img. xpath('./@alt'). extract_first()
 book ScrapyReadbook101Item(name=name, src=src) yield book
return item

开启管道,写管道同之前
  1. 数据入库
    settings.py
 DB HOST = '192.168.231.130'#端口号是一个整数
DB PORT 3306
DB USER ='root'
DB PASSWROD ='1234'
DB_NAME ='spider01
DB CHARSET ='utf8

pipelines.py

class ScrapyReadbook101Pipeline:
	def open_spider(self, spider):
		self. fp open('book. json', 'w', encoding='utf-8')
	def process_item(self, item, spider):
		self. fp. write(str(item))
		return item
	def close_spider(self, spider):
		self. fp. close()

from scrapy. utils. project import get_project_settings 
class MysqlPipeline:
	def open_spider(self, spider):
		settings get_project_settings()
		self. host settings 'DB_HOST']
		self. port =settings 'DB_PORT']
		self. user =settings 'DB_USER']
		self. password =settings 'DB_PASSWROD']
		self. name =settings 'DB_NAME']
		self. charset =settings 'DB_CHARSET']
		self. connect()

	 def connect(self):
		self. conn pymysql. connect(
		host=self. host,
		port=self. port,
		user=self. user,
		password=self. password,
		db=self. name,
		charset=self. charset
		self. corsor self. conn. cursor()
 	 def process_item(self, item, spider):
		sql 'insert into book(name, src) values("{}", "{}")' format(item['name'], item#执行sql语句
		self. cursor. execute(sql)
		#提交
		self. conn. commit()
		return item
	def close_spider(self, spider):
		self. cursor. close()
		self. conn. close()
  1. 日志信息和日志等级
    (1)日志级别:
    CRITICAL:严重错误
    ERROR:
    一般错误
    I WARNING:警告
    INFO:
    一般信息
    DEBUG:调试信息
    默认的日志等级是DEBUG
    只要出现了DEBUG或者DEBUG以上等级的日志
    那么这些日志将会打印
    (2)settings.py文件设置:
    默认的级别为DEBUG,会显示上面所有的信息
    在配置文件中 settings.py
    LOG_FILE:将屏幕显示的信息部记录到文件中,屏幕不再显示,注意文件后缀一定是.logLOG LEVEL:设置日志显示的等级,就是显示哪些,不显示哪些
  2. Request和response总结
  3. scrapy的post请求
import scrapy
import json
class TestpostSpider(scrapy. Spider):
	name ='testpost'
	allowed_domains ['https: //fanyi. baidu. com/sug']# post请求如果没有参数那么这个请求将没有任何意义
	#start_urls
	#parse方法也没有用了
	# start_urls 'https: //fanyi. baidu. com/sug/'] #
	# def parse(self, response):
	# pass
	 def start_requests(self):
		url ='https: //fanyi. baidu. com/sug'
		data={'kw': 'final'}
		yield scrapy. FormRequest(url=ur1, formdata=data, callback=self.parse_second)
	def parse_second(self, response):
		content =response. text
		obj =json. loads(content, encoding='utf-8')
		print(obj)
  1. 代理

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

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

相关文章

如何使用ONLYOFFICE+ffmpeg来给视频文件打马赛克

如何使用ONLYOFFICEffmpeg来给视频文件打马赛克 我这里之前写过很多关于ONLYOFFICE使用、安装的系列图文&#xff0c;也写过很多关于ffmpeg使用的图文&#xff0c;那么这次继续&#xff0c;把这两个开源软件放在一起&#xff0c;能碰撞出什么火花般的功能来。 这就是给视频文…

【C#学习笔记】内存管理

文章目录 分配内存释放内存GC标记清除算法分代算法 .NET的GC机制有这样两个问题&#xff1a; 官方文档 自动内存管理 自动内存管理是CLR在托管执行过程中提供的服务之一。 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。 对开发人员而言&#xff0c;这就意味着…

凯迪正大—SF6泄漏报警装置的主要特点

SF6泄漏报警系统主要特点 ① 系统采用声速原理&#xff0c;可定量、实时在线测量SF6泄漏气体含量&#xff0c;克服了传统测量方法如负电晕放电法和卤素传感器法只能定性判别是否越限的缺陷&#xff0c;能够准确得到气体中SF6含量。 ② 系统采用双差分处理方法&#xff0c;有效…

软件测试需求分析的常用方法

软件测试需求分析时&#xff0c;应要求产品人员对需求进行讲解&#xff0c;并使用相对应的方法进行科学分析&#xff0c;否则无法保障软件测试的完整性和科学性&#xff0c;从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法&#xff1a; 1、功能分解…

设计图一般都用什么工具制作?

每个设计师都需要设计图制作软件对设计图软件的选择也有一些需求&#xff0c;可以提高一些效率。网上有很多免费的PC设计软件。本文推荐了2023年5款易用的设计图制作软件 1.即时设计 即时设计是一款免费的在线 UI 设计工具&#xff0c;无系统限制&#xff0c;浏览器打开即可使…

【Leetcode刷题】模拟

本篇文章为 LeetCode 模拟模块的刷题笔记&#xff0c;仅供参考。 目录 一. 字符串Leetcode43.字符串相乘Leetcode592.分数加减运算Leetcode68.文本左右对齐 二. 矩阵Leetcode54.螺旋矩阵Leetcode885.螺旋矩阵 IIILeetcode498.对角线遍历Leetcode874.模拟行走机器人 三. 数组Lee…

淘宝店铺数据API接口 店铺详情数据API 店铺所有商品API接口

引言 在电商平台上&#xff0c;店铺所有商品API接口是一项非常重要且有着广泛应用的技术。它使得开发者能够方便地获取和管理店铺中的所有商品信息&#xff0c;进而实现自动化的商品管理和数据分析。本文将详细介绍店铺所有商品API接口的定义、功能以及调用流程&#xff0c;并附…

idea打开传统eclipse项目

打开传统web项目 1.打开后选择项目文件 2.选择项目结构 3.设置jdk版本 4.导入当前项目模块 5.选择eclipse 6. 设置保存目录 7.右键模块&#xff0c;添加spring和web文件 8. 设置web目录之类的&#xff0c;并且创建打包工具 9.如果有本地lib&#xff0c;添加为库 最后点击应用&…

掌握 JVM 的参数及配置

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;它负责执行Java程序&#xff0c;并提供一系列参数和配置选项&#xff0c;可以调整Java程…

决策树与随机森林

目录 决策树是&#xff1a;Why&#xff1a;How&#xff1a;基本概念决策树生成举例决策树缺点参考 Demo 随机森林1.是&#xff1a;2.Why&#xff1a;3.How&#xff1a;参考 Demo 决策树 是&#xff1a; 1.一种有监督的分类&#xff08;或预测&#xff09;算法。 2.利用属性、…

Ubuntu安装MySQL 8.0与Navicat

目录 Ubuntu安装MySQL 8.0 1、更新软件包列表 2、安装 MySQL 8.0 3、启动 MySQL 服务 5、确保MySQL服务器正在运行 5、root 用户的密码 6、登录MySQL&#xff0c;输入mysql密码 7、MySQL默认位置 Ubuntu安装Navicat 1、下载 Navicat 2、额外的软件包 3、执行命令 U…

10分钟理解React生命周期

前言 学习React&#xff0c;生命周期很重要&#xff0c;我们了解完生命周期的各个组件&#xff0c;对写高性能组件会有很大的帮助。 一、简介 React /riˈkt/ 组件的生命周期指的是组件从创建到销毁过程中所经历的一系列方法调用。这些方法可以让我们在不同的时刻执行特定的…

uniapp自定义头部导航栏

有时我们需要一些特殊的头部导航栏页面&#xff0c;取消传统的导航栏&#xff0c;来增加页面的美观度。 下面我就教大家如何配置&#xff1a; 一、效果图 二、实现 首先在uniapp中打开pages.json配置文件&#xff0c;在单个路由配置style里面设置导航栏样式​​​​​​nav…

【计算机网络】NAT技术

文章目录 1. NAT技术简介2. 使用NAT技术转换IP的过程3. NAPT4. NAT技术的缺陷5. NAT和代理服务器 1. NAT技术简介 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;技术&#xff0c;是解决IP地址不足的主要手段&#xff0c;并且能够有效避免外…

网络安全 Day26-PHP 简单学习

PHP 简单学习 1. 为什么要学习PHP2. PHP语法3. php 变量4. 字符串数据5. PHP 函数6. 数组 1. 为什么要学习PHP php存量多开源软件多很多安全流程 渗透方法 sql注入基于PHP语言入门简单 2. PHP语法 格式: <?php 内容?>或<?内容?>结尾分号例子<?php phpin…

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)]

目录 11、自由风格的CI操作&#xff08;最终&#xff09;Jenkins容器化实现方案修改 docker.sock 权限修改 Jenkins 启动命令后重启 Jenkins构建镜像推送到Harbor修改 daemon.json 文件Jenkins 删除构建后操作Jenkins 添加 shell 命令重新构建 Jenkins通知目标服务器拉取镜像目…

【TypeScript】中定义与使用 Class 类的解读理解

目录 类的概念类的继承 &#xff1a;类的存取器&#xff1a;类的静态方法与静态属性&#xff1a;类的修饰符&#xff1a;参数属性&#xff1a;抽象类&#xff1a;类的类型: 总结&#xff1a; 类的概念 类是用于创建对象的模板。他们用代码封装数据以处理该数据。JavaScript 中的…

ChatGPT“侵入”校园,教学评价体制受冲击,需作出调整

北密歇根大学的教授奥曼在学生作业中发现了一篇关于世界宗教的“完美论文”。“这篇文章写得比大多数学生都要好......好到不符合我对学生的预期&#xff01;”他去问ChatGPT&#xff1a;“这是你写的吗&#xff1f;”ChatGPT回答&#xff1a;“99.9%的概率是的。” ChatGPT“侵…

Python入门三

目录&#xff1a; 内置库os内置库sys内置库文件处理内置库科学计算内置库日期与时间处理内置库json内置库正则表达式re内置库多线程threding内置库pythonlogging内置库pythonlogging高级使用venv环境管理pip环境管理常用第三方库yaml常用第三方库pymysql常用第三方库urllib3学…

【微信小程序创作之路】- 小程序远程数据请求、获取个人信息

【微信小程序创作之路】- 小程序远程数据请求、获取个人信息 第七章 小程序远程数据请求、获取个人信息 文章目录 【微信小程序创作之路】- 小程序远程数据请求、获取个人信息前言一、远程数据请求1.本地环境2.正式域名 二、获取用户个人信息1.展示当前用户的身份信息2.获取用…
最新文章