数学建模-爬虫系统学习
尚硅谷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
- 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 baidu4. 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 scrapyclass 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 = srcelsesrc = 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交给pipelinesyield 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 itemITEM _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 =1def 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 = srcelsesrc = 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交给pipelinesyield 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. htmlif self. page < 100:self. page self. page 1url = 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 ScrapyMovie099Itemclass 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 movieclass 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 itemdef close_spider(self, spider):self. fp. close()
-
Mysql
(1)下载(https:/dev.mysql.com/downloads/windows/installer/5.7.html
(2)安装 (https: //jingyan.baidu.com/album/d7130635f1c77d13fdf475df.html) -
pymysql的使用步骤
1.pip install pymysql
2.pymysql. connect(host, port, user, password, db, charset)
3.conn. cursor()
4.cursor.execute() -
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是否进就是取规则进行取 -
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 ScrapyReadbook101Itemclass 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开启管道,写管道同之前
- 数据入库
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 itemdef 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. charsetself. 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 itemdef close_spider(self, spider):self. cursor. close()self. conn. close()
- 日志信息和日志等级
(1)日志级别:
CRITICAL:严重错误
ERROR:
一般错误
I WARNING:警告
INFO:
一般信息
DEBUG:调试信息
默认的日志等级是DEBUG
只要出现了DEBUG或者DEBUG以上等级的日志
那么这些日志将会打印
(2)settings.py文件设置:
默认的级别为DEBUG,会显示上面所有的信息
在配置文件中 settings.py
LOG_FILE:将屏幕显示的信息部记录到文件中,屏幕不再显示,注意文件后缀一定是.logLOG LEVEL:设置日志显示的等级,就是显示哪些,不显示哪些 - Request和response总结
- 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):# passdef 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. textobj =json. loads(content, encoding='utf-8')print(obj)
- 代理
相关文章:
![](https://img-blog.csdnimg.cn/b94e5413bce242efab952c550cba7762.png)
数学建模-爬虫系统学习
尚硅谷Python爬虫教程小白零基础速通(含python基础爬虫案例) 内容包括:Python基础、Urllib、解析(xpath、jsonpath、beautiful)、requests、selenium、Scrapy框架 python基础 进阶(字符串 列表 元组 字典…...
![](https://img-blog.csdnimg.cn/6ccd3f86fa71418680b29e68bc928849.png)
HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制概述
ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。 在声明式描述语句中开发者除了使用系统组件外,还可以使用渲染控制语句来辅助UI的构建,这些渲染控制语句包括控制组件是否显示的条件渲染语句,基于数组数…...
![](https://img-blog.csdnimg.cn/69e9169c980f43e0aad31ff9ada88a9c.png)
【力扣刷题 | 第二十五天】
目录 前言: 474. 一和零 - 力扣(LeetCode) 总结: 前言: 今天我们依旧暴打动态规划 474. 一和零 - 力扣(LeetCode) 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集…...
![](https://img-blog.csdnimg.cn/19374b93b78743b5ba48bafc353f4d2b.png)
GO学习之 函数(Function)
GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 文章目录 GO系列前言一、什么是…...
![](https://www.ngui.cc/images/no-images.jpg)
Jstack线上问题排查
1.top查找出哪个进程消耗的cpu高。执行top命令,默认是进程视图,其中PID是进程号(记下进程号) 2.top中shifth 或“H”查找出哪个线程消耗的cpu高 (记下最高的几个线程号) jstack 进程号 >> pid-cpu.…...
![](https://img-blog.csdnimg.cn/ff76538b98314199a074e92bc8e96198.jpeg)
VIM 编辑器: Bram Moolenaar
VIM 用了很长时间, 个人的 VIM 配置文件差不多10年没有更新了。以前写程序的时候, 编辑都用这个。 linux kernel, boost规模的代码都不在话下。现在虽然代码写的少了,依然是我打开文件的首选。 现在用手机了,配个蓝牙键…...
![](https://www.ngui.cc/images/no-images.jpg)
鸿蒙应用开发指南:从零开始构建一款智能音乐播放器
介绍 随着鸿蒙操作系统的发布,开发者们迫不及待地想要探索鸿蒙应用的开发。本篇博客将以构建一款智能音乐播放器为例,带你一步步了解鸿蒙应用开发的技术要点和实践。我们将使用HarmonyOS的开发环境和MarkDown进行排版,方便你快速上手。 准备…...
![](https://img-blog.csdnimg.cn/img_convert/b7bc77095a99db22e627187dd57339a9.png)
如何实现对主机的立体监控?
主机监控是保证系统稳定性和性能的重要环节之一,那应该如何实现对主机的立体监控? 本期EasyOps产品使用最佳实践,我们将为您揭晓: 主机应该如何分组和管理? 主机监控应该关注哪些关键性指标? 背 景 通…...
![](https://img-blog.csdnimg.cn/fa5952a957a34235a5af68e90b23131a.png)
机器学习笔记:李宏毅ChatGPT Finetune VS Prompt
1 两种大语言模型:GPT VS BERT 2 对于大语言模型的两种不同期待 2.1 “专才” 2.1.1 成为专才的好处 Is ChatGPT A Good Translator? A Preliminary Study 2023 Arxiv 箭头方向指的是从哪个方向往哪个方向翻译 表格里面的数值越大表示翻译的越好 可以发现专门做翻…...
![](https://www.ngui.cc/images/no-images.jpg)
中电金信:逐数兴业 智启未来——“数据二十条”影响之解读 (下)
在逐数兴业 智启未来——“数据二十条”影响之解读(上)篇内容中,主要解读了有关于“数据二十条”发布的背景与意义、建立数据要素市场面临的挑战与应对。在今天的文章里,将继续解读“数据二十条”的主要内容以及对金融行业和金融科…...
![](https://img-blog.csdnimg.cn/img_convert/be74cfe4df2e843cb427ca8f0d58c265.png)
54款宝藏级AIGC工具分享(claude,Midjourney,Stable Diffusion等)
随着ChatGPT的一波又一波高潮,生成式AI逐渐进入人们视野,并开始大行其道,正如人们所说:AI用的好,天天下班早! 当然,有效的利用AI不但能下班早,还能在上班时间摸鱼,就如潘…...
![](https://img-blog.csdnimg.cn/img_convert/9dfc85435ab473aaa11708a00b8dfe4b.png)
bigemap如何添加在线地图源?
第一步 打开浏览器,找到你要访问的地图的URL地址,并且确认可以正常在浏览器中访问;浏览器中不能访问,同样也不能在软件中访问。 以下为常用地图源地址: 天地图: http://map.tianditu.gov.cn 包含&a…...
![](https://img-blog.csdnimg.cn/3068df1a11344add99c59b98431f5943.png#pic_center)
84. 柱状图中最大的矩形
题目描述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释:最…...
![](https://img-blog.csdnimg.cn/df4bc70674534d1fadc379b5ebe97f19.png)
嘉楠勘智k230开发板上手记录(二)--hello world
上次成功在k230上烧录sdk,这次准备实现hello world和ssh scp远程k230 主要是按照K230 SDK 基础教程的K230_实战基础篇_hello_world.md 一、PC连接k230 1. 初步准备 首先下载串口工具PuTTY,这个我个人感觉比较方便。 准备两根USB type-C数据线&#…...
![](https://img-blog.csdnimg.cn/img_convert/45cdf5b7f321173cdd940c34e493a0bb.webp?x-oss-process=image/format,png)
ArcGIS Pro实践技术应用——暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用全流程科研能力提升
查看原文>>>ArcGIS Pro实践技术应用——暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合能力 本文将利用ArcGIS Pro 将您的 GIS 工作组织到工程中,您可以使用 ArcGIS Pro 映射 2D 和 3D 数据。借助 ArcGIS Proÿ…...
![](https://img-blog.csdnimg.cn/57bf040c5e7548889bb737b0b1e8a482.png)
学习pytorch
学习pytorch 1. 环境安装配置镜像源conda命令记录图像相关代码遇到的问题1. torch.cuda.is_available() False 1. 环境安装 B站小土堆视频 配置镜像源 conda config --show channels conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main…...
![](https://www.ngui.cc/images/no-images.jpg)
动态SQL实现原理一-动态SQL的使用
在介绍MyBatis动态SQL实现原理之前,我们先来了解一下MyBatis动态SQL的使用。顾名思义,动态SQL指的是事先无法预知具体的条件,需要在运行时根据具体的情况动态地生成SQL语句。 假设我们有一个获取用户信息查询操作,具体的查询条件…...
MyBatis动态sql标签帮你轻松搞定sql拼接
动态sql介绍 由于在开发过程不同的业务中会用到不同的操作条件,如果每个业务都拼接不同sql语句的话会是一个庞大的工作量;此时动态sql就能解决这个问题,可以针对不确定的操作条件动态拼接sql语句,根据提交的条件来完成业务sql的执…...
![](https://img-blog.csdnimg.cn/ca80961fa2654986b3355c57254311c4.png)
Java课题笔记~ 使用 Spring 的事务注解管理事务(掌握)
通过Transactional 注解方式,可将事务织入到相应 public 方法中,实现事务管理。 Transactional 的所有可选属性如下所示: propagation:用于设置事务传播属性。该属性类型为 Propagation 枚举, 默认值为 Propagation.R…...
![](https://img-blog.csdnimg.cn/7d10e1e2f6d34491b6540d9ecfe39c02.png)
UML—浅谈常用九种图
目录 概述: 1.用例图 2.静态图 3.行为图: 4.交互图: 5.实现图: 概述: UML的视图是由九种视图组成的,分别是用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、实施图。我们可以根据这9种图的功能和实现的目的…...
![](https://img-blog.csdnimg.cn/ffc9ec0e98b246d7ad2bebfdd5b52c0e.png)
算法与数据结构-跳表
文章目录 什么是跳表跳表的时间复杂度跳表的空间复杂度如何高效的插入和删除跳表索引动态更新代码示例 什么是跳表 对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中查找某个数据,也只能从头到尾遍历链表。这样查找效率…...
![](https://img-blog.csdnimg.cn/1c3afa54653c4d2d9f650b4c9eb552e3.jpeg)
微信小程序nodejs+vue+uniapp校运会高校运动会报名管理系统
3.1小程序端 小程序登录页面,用户也可以在此页面进行注册并且登录等。 登录成功后可以在我的个人中心查看自己的个人信息或者修改信息等 在广播信息中我们可以查看校运会发布的一些信息情况。 在首页我们可以看到校运会具体有什么项目运动。 在查看具体有什么活动我…...
![](https://img-blog.csdnimg.cn/c2c80cc3f1614e35b105bc45f3a4ec58.png)
varint原理 - 负数的编码和解码
前一篇博客 varint原理 - 正数的编码和解码_YZF_Kevin的博客-CSDN博客我们讲了varint的实现原理,举例也分析对于正数的编码,解码过程 本篇博客,我们开始举例分析负数的编码和解码,因为负数有原码,反码,补码…...
![](https://img-blog.csdnimg.cn/fab8057f296e4b7daae5e977b77d481e.jpeg#pic_center)
大学生口才培训需求分析
标题:大学生口才培训需求分析 摘要: 本论文旨在分析大学生口才培训的需求,通过对大学生口才培训的重要性、现状和挑战进行研究,并结合相关理论和实践经验,提出相应的培训需求和解决方案。通过本论文的研究,…...
![](https://www.ngui.cc/images/no-images.jpg)
C++:合并集合(并查集)
合并集合 一共有n个数,编号是1~n,最开始每个数各自在一个集合中。 现在要进行m个操作,操作共有2种: 1.“M a b”,将编号为a和b的两个数的所在的集合合并,如果两个数已经在同一个集合中则忽略这个操作 2.“…...
![](https://img-blog.csdnimg.cn/8053b819151947b7ad416333e3019636.png)
【LeetCode】数据结构题解(10)[有效的括号]
有效的括号 😉 1.题目来源👀2.题目描述🤔3.解题思路🥳4.代码展示 😘😘😘😘😘😘😘😘😘😘😘…...
![](https://img-blog.csdnimg.cn/img_convert/130ee871c202570704c7afdb6548d4d6.jpeg)
5G用户逼近7亿,5G发展迈入下半场!
尽管普遍认为5G投资高峰期正在过去,但是从2023年上半年的情况来看,我国5G建设仍在衔枚疾走。 近日举行2023年上半年工业和信息化发展情况新闻发布会上,工信部人士透露,截至今年6月底,我国5G基站累计达到293.7万个&…...
![](https://img-blog.csdnimg.cn/6d06073d96b441b4829129bef53259b1.png)
分布式问题
1. 分布式系统CAP原理 CAP原理:指在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitontolerance(分区容忍性),三者不可得兼。 一致性(C…...
![](https://img-blog.csdnimg.cn/45367d108d2c47f7a9813c36e98ed361.png)
教雅川学缠论06-中枢
本系列文章之前讲的内容都只有上升和下降两类趋势,并没有提及盘整,在缠论中,中枢这个新词汇用来定义盘整,中枢: 1.至少由5条线段(或笔)组成 2.中枢是有方向的,中枢左右两侧外面的线&…...
![](https://img-blog.csdnimg.cn/39097404f2224a01b3882068b50b49c9.png)
如何调教让chatgpt读取自己的数据文件(保姆级图文教程)
提示:如何调教让chatgpt读取自己的数据文件(保姆级图文教程) 文章目录 前言一、如何投喂自己的数据?二、调教步骤总结 前言 chatgpt提示不能读取我们提供的数据文件,我们应该对它进行调教。 一、如何投喂自己的数据? 让chatgpt读…...
![](https://common.cnblogs.com/images/copycode.gif)
建设网站项目的目的/软件开发流程
原文转载于:https://www.cnblogs.com/qicosmos/p/3517166.html并行库充分利用多核的优势,通过并行运算提高程序效率,本文主要介绍c中两个知名的并行库,一个是intel开发的TBB,一个是微软开发的PPL。本文只介绍其基本的常用用法&…...
![](https://img-blog.csdnimg.cn/2022010621162660083.png)
网站标题权重吗/app推广拉新一手渠道
执行脚本案例:如图 通过多次运行测试,案例中JMeter元件之间的执行顺序(优先级)如下: 1)执行配置元件“HTTP Cookie”管理器; 2)执行前置处理器“用户参数”; 3࿰…...
![](https://s1.51cto.com/attachment/201010/30/777608_1288397926jGzN.gif)
wordpress 标签 彩色/seo网络营销招聘
网络层概述: 网络层位于TCP/IP参考模型的第三层。在网络通信中,网络层提供了两个最重要的作用:路由和选址。 网络层负责定义数据通过网络流动所经过的路径。主要功能总结如下: 定义了基于IP协议的逻辑地址。 选择数据通过网络的最…...
![](/images/no-images.jpg)
买域名做网站表白/如何推广网站运营
Solution转载于:https://www.cnblogs.com/qt666/p/7501976.html...
![](https://img-blog.csdnimg.cn/img_convert/aec8b095418ac0e804c9909be215ad8e.png)
做网站需要注意的/成人馆店精准引流怎么推广
1 引言高阶组件( higher-order component ,HOC )是 React 中复用组件逻辑的一种进阶技巧。它本身并不是 React 的 API,而是一种 React 组件的设计理念,众多的 React 库已经证明了它的价值,例如耳熟能详的 r…...
![](https://img-blog.csdnimg.cn/img_convert/9cf78a8b94b1303ab6494b39e7f96df6.png)
优质的天津网站建设/任何小说都能搜到的软件
1.问题:插件安装,但启动不了 2.解决方案: 1)去obsidian插件官网搜索 2)下载以下3个文件,到 .obsidian/plugin目录下 路径:F:\2023年.obsidian\plugins\cMenu 1.1.1 3)进入obsidian&…...