網絡爬蟲相關

一、爬蟲的基礎內容

1、基本概念和用途

1.1、概念:

  • 模擬瀏覽器、發送請求,獲取響應。(只能獲取客戶端所展示出來的數據)

1.2、特點:知識碎片化,針對不同的網站對應的方法也不同。

  • 爬蟲:模擬客戶端訪問,抓取數據。
  • 反爬:保護重要數據,阻止惡意網絡攻擊
  • 反反爬:針對反爬的措施。

1.3、作用

  1. 數據采集
  2. 軟件測試
  3. 搶票
  4. 網絡安全
  5. web漏洞掃描

2、爬蟲的分類

2.1、根據爬取網站的數量,可以分為

2.1.1、通用爬蟲

①特點:爬取網站數量沒有上線。

示例:搜索引擎

2.1.2、聚焦爬蟲(*)

①特點:爬取網站數量有上限,有明確的目標。

②分類:

功能性爬蟲

①特點:不獲取數據,只為實現某一功能。

示例:投票 / 搶票 / 短信轟炸等。

數據增量性爬蟲

①特點:獲取數據用于后續分析

②分類

  • url與數據同時變化? ? ? ? -- 整條新數據
  • url不變,數據裱花? ? ? ? -- 數據部分更新

3、爬蟲的基本流程

3.1、流程

  • url(網站資源定位符)
  • 對url發送網絡請求,獲取網絡請求的響應
  • 解析響應,提取數據
  • 保存數據
3.1.1、確認目標:目標url:www.baidu.com
3.1.2、發送請求:發送網絡請求,獲取到特定的服務端給你響應。
3.1.3、提取數據:從響應中提取特定的數據? ? ? ? jsonpath / xpath / re
3.1.4、保存數據:本地(html、json、txt)、數據庫

獲取到的響應中,有可能會提取到還需要繼續發送請求的url,可以拿著解析到的url繼續發送請求

robots協議并不是一個規范,只是約定俗成。

二、http協議以及請求頭

1、網絡通信

1.1、步驟

  • 電腦(瀏覽器):? ?url? ? ? --? ?www.baidu.com? ? ? 域名
  • DNS服務器:IP地址標注服務器,返回響應
  • DNS服務器返回IP地址給瀏覽器
  • 瀏覽器拿到IP地址去訪問服務器,返回響應
  • 服務器返回給我們的響應數據:html / css / js / jpg......

1.2、實際原理

一個請求只能對應一個數據包(文件)

2、http協議和https協議

2.1、http協議(超文本傳輸協議)

  • 超文本:不僅僅限于文本,還包括圖片、音頻、視頻。
  • 傳輸協議:指使用共用約定的固定格式來傳遞轉換成字符串的超文本內容。
2.1.1、作用
  • 規定了服務器和客戶端互相通信的規則。
2.1.2、http請求/響應的步驟
  • 客戶端連接到web服務器
  • 發送http請求
  • 服務器接受請求返回響應
  • 釋放連接tcp連接
  • 客戶端解析html內容
2.1.3、請求頭

請求方式:get? 和? ?post

get:向服務器要資源

post:向服務器提交資源

  • User-Agent:模擬正常用戶
  • cookie:登錄保持
  • referer:當前這一次請求時由哪個請求過來的

抓包得到的響應內容才是判斷依據,elements中的源碼是渲染之后的源碼,這個不能作為判斷標準。

2.1.4、字符串編碼解碼

編碼? ? ? ? -- encode()

字符串轉換成二進制字符串? ? ? ? str 轉換成 bytes

解碼? ? ? ? -- decode()

二進制字符串轉換成字符串? ? ? ? bytes 轉換成 str

三、requests庫的介紹

1、requests基本使用

requests模塊作用:發送http請求,獲取響應數據。

requests模塊式第三方模塊,需要安裝:

1.1、安裝命令:? ? ? ? --? ? pip install requests
1.2、基本使用:
import requests# 目標url
url = 'https://www.baidu.com'# 向目標url發送get請求
response = requests.get(url)# 打印響應內容#將其編碼設置為UTF-8
response.encoding = 'utf-8'print(response.text)# print(response.content.decode())    默認UTF-8解碼

使用requests庫保存圖片:

import requests# 確定url
url = 'https://img0.baidu.com/it/u=3225468693,477076843&fm=253&fmt=auto&app=138&f=JPEG?w=1115&h=800'# 發送請求,獲取響應
res = requests.get(url)
print(res.content)# 保存響應
with open('1.jpg', 'wb') as f:f.write(res.content)
1.3、常用的屬性或方法
  • response.url? 響應的url。有時候響應的url和請求的url并不一致。
  • response.status_code? 響應狀態碼。
  • response.request.headers? 響應對應的請求頭。
  • response.headers? 響應頭
  • response.cookies? 響應的cookie(經過了set-cookie動作。返回cookieJar類型)
1.4、其他屬性

response.text 和 response.content 的區別:

text:? str類型,? requests模塊自定根據http頭部對響應的編碼作出有根據的推測。

content: bytes類型,? 可以通過decode()解碼。

2、用戶代理

請求頭中user-agent字段必不可少,表示客戶端操作系統以及瀏覽器的信息。

示例

import requestsurl = 'https://www.baidu.com/'# 構建請求頭
header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}# 帶上user-agent發送請求
# headers參數接受字典形式的請求頭,請求頭字段名為key,值為value
response = requests.get(url, headers=header)print(response.content.decode())

添加user-agent的目的是為了讓服務器認為是瀏覽器在發送請求,而不是爬蟲在發送請求

3、URL傳參

user-agent池? ? ? ? --防止反爬

第一種方法:使用user-agent池隨機調用

import random# 隨機調用
UAlist = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36','Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1','Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Mobile Safari/537.36',
]print(random.choice(UAlist))

第二種方法:使用fake_useragent ?可能會出現異常

首先下載fake_useragent:pip install?fake_useragent

from fake_useragent import UserAgent
print(UserAgent().random)

3.1、瀏覽器發送請求的原理

  • 構建請求
  • 查找緩存(在瀏覽器緩存中尋找有沒有需要查找的資源,如果有的話就攔截請求,返回這一資源的副本,并直接結束請求)
  • 準備IP地址和端口
  • 等待tcp隊列
  • 建立tcp連接
  • 發送http請求

瀏覽器會向服務器發送請求行,包括了請求方法,請求url,http協議

3.2、編碼轉譯

  • 字符串被當做url提交時會被自動進行url編碼處理
  • 輸入? ? ? ? ? ?--字符串? ? ? ?明文
  • 發送請求的時候? ? ? ? --%xxx%xxx? ? ? ?密文
from urllib.parse import quote, unquote
# quote()     #明文轉密文
# unquote()      #密文轉明文
print(quote('參數'))  # 輸出:%E5%8F%82%E6%95%B0
print(unquote('%E5%8F%82%E6%95%B0'))  # 輸出:參數

3.3、發送帶參數的請求

通過params攜帶參數字典

  • 構建請求參數字典
  • 發送請求的時候帶上請求參數字典
import requestsurl = 'https://www.baidu.com/s?'header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}# 構建請求參數字典
name = input("請輸入關鍵字:")
kw = {'wd': name}# 帶上請求參數發起請求,獲取響應
response = requests.get(url, headers=header, params=kw)
print(response.content.decode())

四、簡單案例

1、獲取單張圖片

示例(網易云)

# 1、導入模塊
import requests# 找到目標url
url = 'https://p1.music.126.net/Y2C3RbZflVZMUuNBkKA-Jg==/109951170607654157.jpg?imageView&quality=89'# 構建請求頭字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}# 發送請求,獲取響應
res = requests.get(url, headers=headers)
# res.content是二進制數據# 保存文件
with open('網易云.jpg', 'wb') as f:f.write(res.content)

2、獲取單首歌曲

示例(酷我):

# 1、導入模塊
import requests# 找到對應目標的url
url = 'https://ga-sycdn.kuwo.cn/2941b0d5664d5d39fbcc5d58db543670/67d45eec/resource/pay3_v2/279292599/'# 構建請求頭字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}# 發送請求,獲得響應
res = requests.get(url, headers=headers)# 保存文件
with open('酷我.mp3', 'wb') as f:f.write(res.content)

3、獲取單個MV

示例(酷我):

# 導入模塊
import requests# 確定目標url
url = 'https://gd-sycdn.kuwo.cn/6bab1f0b832f4a522593a520edc1abee/67d45553/resource/m3/35/83/2343069577.mp4'# 獲取請求頭字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}# 發送請求,獲取響應
res = requests.get(url, headers=headers)# 保存文件
with open('mv.mp4', 'wb') as f:f.write(res.content)

4、獲取單頁貼吧

示例(百度貼吧):

# 導入模塊
import requests# 確定目標url
url = 'https://tieba.baidu.com/f?ie=utf-8&kw=%E5%B0%8F%E6%98%8E&fr=search'# 獲取請求頭字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}# 發送請求,獲取響應
res = requests.get(url, headers=headers)# 保存文件
with open('小明.html', 'wb') as f:f.write(res.content)

示例(貼吧翻頁):

# 導入模塊
import requests# 確定目標url
url = 'https://tieba.baidu.com/f?'# 獲取請求頭字典
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}search = input('請輸入搜索內容:')
page = int(input('請輸入要保存的頁數:'))for i in range(page):params = {'kw': search,'pn': i*50}# 發送請求,獲取響應res = requests.get(url, headers=headers, params=params)# 保存文件with open(F'{search}{i+1}.html', 'wb') as f:f.write(res.content)

改為面向對象

# 導入模塊
import requests# 改為面向對象class Tb:def __init__(self):self.url = 'https://tieba.baidu.com/f?'self.headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'}# 發送請求def send(self, params):res = requests.get(self.url, headers=self.headers, params=params)return res.text# 保存數據def save(self, page, con):with open(f'{page}.html', 'w', encoding='utf-8') as f:f.write(con)def run(self):word = input('請輸入查找信息:')pages = int(input('請輸入頁數:'))for page in range(pages):params = {'kw': word,'pn': page*50}# 循環執行data = self.send(params)self.save(page, data)te = Tb()
te.run()

五、post請求和模擬登錄

1、post請求:登錄注冊,傳輸大文本內容

requests.post(url,data)# data參數接受一個字典

get和post的區別:

  • get請求 ?--比較多????????????????????????
  • post請求 ?--比較少
  • get請求直接向服務器發送請求,獲取響應內容
  • poet請求是先給服務器一些數據,然后再獲取響應
  • get請求攜帶參數 ? --params
  • post請求攜帶參數 ?--data

2、cookie? ? 模擬登錄

# 導入模塊
import requestsurl = 'https://music.163.com/'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36','Cookie': 'NMTID=00OirJp6WmwK2CZ0UsRs0AwIsuCZ24AAAGVlUI2ww; _iuqxldmzr_=32; _ntes_nnid=8acdc47e4ec07cfcc0c3d8a5a7563e2b,1741965900532; _ntes_nuid=8acdc47e4ec07cfcc0c3d8a5a7563e2b; WEVNSM=1.0.0; WNMCID=yzysjc.1741965901512.01.0; WM_TID=uR%2FXeQkMY%2BBEREERQAeWZsNjcExlNr%2Fr; sDeviceId=YD-wk74YKwl8c1BEgVBFVbBkf9FLdSm06BO; ntes_utid=tid._.jwaAVzsxdbJFRkFAAUfDM9YiNEl0ltaU._.0; __snaker__id=HFEZmaht8jsYG5Lq; JSESSIONID-WYYY=D4asd5JMMPTACEfo1h%5CuG3iv1f2kh4UokwaX6EThS3M6N%2BTH2v8RFTnYrueIKW6KK05aXaUMNg4muZNN1HwU6meM4CI%2F3swbc2%5CQ19yJAjnHar08eUxlMd6sZme0mrgWUZ%2B1Yz0lztuFpXI2ftmblBDuXpf%2FbJEy9Y7uRz9ocrPdN83W%3A1742052144561; WM_NI=uvbx63QfSmoh%2B74VnJtzOY3PI8UFru33HLKrWjKUtPOsE%2FJeYNhNhn2AIT1aHmDoEZDHq1GJ5C%2BgGLQobuWHScYDBnqiCBkb4Mh9VgIo%2FS%2B0CJ0ZUgjvDhqdG0OsaO0zUmg%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eeb3c55e9b939c88ce3dae9a8aa3d15f928a8e87c269fb94adabe766acbcf79bf92af0fea7c3b92ab7aaae99b53993ba9d8eee64e9e9fcb7ed42b8a681bab25c8be89ba7f17ff1ed88adca7a95b685b6f75c8dad8bd0c96f9b92a8afeb66f29f87b5b46b8cb38c90c8528898bfd2c642f79de588c64893b1ae96d64491bd97a5c166b3b78da3ea6af893a8dad56d8bb1e1b4aa3c819600bbd86daaaa8c89f47085f08194e445f4a69b8ee637e2a3; gdxidpyhxdE=OOzg9mY%2FxHuPDnHdx434EhbnKe5iAVw5gopZkA4GbO4xlhAJYlrunqeeT3mnVYsjaLgbMuXlm9Z3QdBpG2JLgex1w9OCqOm5ftHtqC0wvLOZbX6SJdnRKwjOcitbT9ViOWEItod3TyULCDOK%5Cy%5CuEvaAqdcv%2FPGk5Ax%5C26UMJI8dPzt6%3A1742051249437; __csrf=5b42a43d68078759426489b0b38b1550; MUSIC_U=00D6018410AF7F96CDC71B00BDBA2443074C93CB0859C0894B62EB44734CB09C8F339E40951BECD0A20BF971729D9E195D51057ED0B5601D9EB8504B44BA59190FC07E793A37F266D6B8FDF3CDA161416292E1690844821EBEE9B31E9B9EECC551AAA85ED5BEC21FC171CD3907BEE0F88BE58ABC25EBEE9FAFBCB8821C649C99B7AFE8D2C622FA851CD0096BB46B0A869688E1038BA3034E434D4EDD76242A23743EA0FAF138DE54513B4AFD4756238A5B03471FC7B5F4B5748D142991DB96CA7A9AD4AF0CAD55462359561BA5D3164128F00508A709CF4CCF0407BE84A8A25945F2DBCB4614F4AEB64E740E93E56FCD68291F57E410DC0260BEFA6BD303378F0CB856081EAD6433FCBA395F144059BF3D18D3CBAAEFB267307A0683684042C4558E9965D2379DC9B92EBEDB41563C1C7F3B59114880CD15E586C57504BDEEB7F61CE50DACC1C5DED2C6C42205A8E360E6A8BB3CF69469EF9712A6A35972CB79BE; ntes_kaola_ad=1'
}# 發送請求
res = requests.get(url, headers=headers)
print(res.text)

3、post請求舉例

示例(金山翻譯):

# 導入模塊
import requests
import jsonurl = 'https://ifanyi.iciba.com/index.php?c=trans'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}word = input('請輸入你要翻譯的內容:')# 構建data參數字典
post_data = {'from': 'zh','to': 'en','q': word
}res = requests.post(url, headers=headers, data=post_data)
# print(res.text)# 解析數據
# 將json數據轉換為Python字典
dic = json.loads(res.text)
print(dic['out'])

4、session

requests模塊中的session類能夠自動處理發送請求獲取響應過程中所產生的cookie,進而達到狀態保持的目的。(自動處理cookie,即下一次請求會帶上前一次的cookie。

session = requests.session()      #實例化session對象
res = session.post(url,data=data)使用session訪問登錄以后的頁面
session.get(url.text)
  • 1、對訪問登錄后才能訪問的頁面去進行抓包
  • 2、確定登錄請求的url地址,請求方法和所需的參數
  • 3、確定登錄才能訪問的頁面url和請求方法
  • 4、利用requests.session完成代碼

5、cookie池

user-agent池:短時間內多次發出請求,盡量每一次的請求都用不同的用戶代理。

cookie池:每一個cookie就代表一個賬號。

cookie有有效期,session不用擔心有效期的問題。

cookie跟session的區別:

  • cookie數據放在瀏覽器中,session數據放在服務器中。
  • cookie不安全,別人可以分析存放在本地的cooker并進行cookie欺騙,考慮到安全應當使用session。
  • session會在一定時間內保存在服務器上,考慮到減輕服務器性能方面,應當使用cookie。
  • 可以考慮將登錄信息等重要信息存放在session,其他信息如果需保留,可以存放在cookie中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73723.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73723.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73723.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Lora 中 怎么 實現 矩陣壓縮

Lora 中 怎么 實現 矩陣壓縮 1. 導入必要的庫 import torch import re from datasets import Dataset from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, \get_cosine_schedule_with_warmup, EarlyStoppingCallback from peft

golang-嵌套結構體

結構體嵌套 golang中沒有類,他通過結構體來實現其他編程語言中類的相關功能。 具名結構體 基本語法 基本語法 golang的結構體嵌套特別簡單。 type 結構體類型1 struct{字段 類型1字段 類型2 }//這樣就實現了結構體的嵌套 type 結構體類型2 struct{字段 類型1字…

基于Spring Boot的大學校園生活信息平臺的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

【 利用socket來實現簡單遠控】

利用socket來實現簡單遠控 🔹 免責聲明?? 重要提示一、什么是socket?二、如何使用socket來實現兩臺計算機之間的通信?服務端1、首先需要創建一個socket;2、綁定IP以及端口3、開啟監聽4、接受客戶端連接5、客戶端連接上之后就是命…

數據可視化在特征分布對比中的應用

數據可視化在特征分布對比中的應用 1. 引言 在機器學習系統開發和維護過程中,特征分布對比是評估數據質量和模型魯棒性的關鍵環節。當訓練數據與測試數據分布存在偏差,或生產環境中的數據分布隨時間發生變化時,模型性能通常會顯著下降。有效的數據可視化不僅能幫助檢測這些…

依賴倒置 DIP、依賴注入 DI、控制反轉 IoC 和工廠模式

1. 依賴倒置 依賴倒置原則(Dependency Inversion Principle, DIP)是 SOLID 原則中的一項,其核心思想是通過抽象解耦高層模塊和低層模塊,使二者都依賴于抽象而非具體實現。 依賴反轉/倒置的體現:傳統依賴方向是高層模塊…

UnitTest框架管理測試用例——python自動化測試

UnitTest框架 UnitTest是Python自帶一個單元測試框架,常用它來做單元測試。 注意:對于測試來說,UnitTest框架的作用是 自動化腳本(用例代碼)執行框架————(使用UnitTest框架來管理 運行多個測試用例的) 為什么使用UnitTest框架 能夠組織多個用例去執…

Vue 過濾器深度解析與應用實踐

文章目錄 1. 過濾器概述1.1 核心概念1.2 過濾器生命周期 2. 過濾器基礎2.1 過濾器定義2.2 過濾器使用 3. 過濾器高級用法3.1 鏈式調用3.2 參數傳遞3.3 動態過濾器 4. 過濾器應用場景4.1 文本格式化4.2 數字處理4.3 數據過濾 5. 性能優化與調試5.1 性能優化策略5.2 調試技巧 6. …

ngx_http_module_t

定義在 src\http\ngx_http_config.h typedef struct {ngx_int_t (*preconfiguration)(ngx_conf_t *cf);ngx_int_t (*postconfiguration)(ngx_conf_t *cf);void *(*create_main_conf)(ngx_conf_t *cf);char *(*init_main_conf)(ngx_conf_t *cf, void *conf);…

每日定投40刀BTC(9)20250312 - 20250315

定投截圖 區塊鏈相關新聞 BTC價格一度跌破8萬美元 3月14日,BTC價格盤中跌破8萬美元,最低報79,954.60美元,日內下跌1.34%,市場情緒一度轉為謹慎 BTC價格波動背后的原因 經濟環境變化、市場情緒波動以及政策監管動態是導致BTC價…

Matlab 汽車二自由度轉彎模型

1、內容簡介 Matlab 187-汽車二自由度轉彎模型 可以交流、咨詢、答疑 2、內容說明 略 摘 要 本文前一部分提出了側偏角和橫擺角速度作為參數。描述了車輛運動的運動狀態,其中文中使用的參考模型是二自由度汽車模型。汽車速度被認為是建立基于H.B.Pacejka的輪胎模…

CentOS 6 YUM源切換成國內yum源

由于 CentOS 6 已于 2020 年 11 月進入 EOL(End of Life),官方軟件源已不再提供更新,因此你可能會遇到 yum makecache 命令失敗的問題。以下是解決該問題的詳細步驟: ### 解決方案 1. **備份原有 yum 源文件** bash …

Leetcode 3483. Unique 3-Digit Even Numbers

Leetcode 3483. Unique 3-Digit Even Numbers 1. 解題思路2. 代碼實現 題目鏈接:3483. Unique 3-Digit Even Numbers 1. 解題思路 這一題其實是一個easy的題目,因為限制條件有限,最暴力的方法就是直接遍歷一下100到999的全部數字&#xff…

《基于深度學習的高分衛星圖像配準模型研發與應用》開題報告

目錄 1. 選題的背景和意義 1.1 選題的背景 1.2 國內外研究現狀 1.3 發展趨勢 2.研究的基本內容 2.1 主要研究內容 (1)訓練與測試數據集構建 (2)基于深度學習的高精度衛星影像配準模型 (3&#xff0…

【Python 算法零基礎 1.線性枚舉】

我裝作漠視一切,以為這樣就可以不在乎 —— 25.3.17 一、線性枚舉的基本概念 1.時間復雜度 線性枚舉的時間復雜度為 O(nm),其中 n是線性表的長度。m 是每次操作的量級,對于求最大值和求和來說,因為操作比較簡單,所以 …

前端性能優化回答思路

前端性能優化是面試中經常涉及的一個話題,面試官通常希望了解你在實際項目中如何處理性能瓶頸,如何識別和優化性能問題。以下是一些前端性能優化的常見問題以及你可以用來回答的思路: 如何提升頁面加載速度? 回答思路&#xff1…

02-Canvas-fabric.ActiveSelection

fabric.ActiveSelection fabric.ActiveSelection 用于表示當前選中的多個對象(即多選狀態)。 當用戶在畫布上選擇多個對象時,Fabric.js 會自動將這些對象包裝在fabric.ActiveSelection 實例中,以便統一操作(如移動、縮…

Leetcode——151.反轉字符串中的單詞

題解一 思路 最開始的想法是把一個字符串分為字符串數組,但是不知道一共有幾個單詞(當時沒想起來split()),所以選擇了用ArrayList儲存字符串,在輸出時沒有考慮ArrayList可以存儲空字符串,所以最開始的輸出…

Oracle檢索數據

一、Oracle用戶模式與模式 對象 1.概念 模式就是數據庫對象的集合,數據庫對象包括表、函數、索引、視圖、過程。 2.示例模式scott SQL> select table_name from user_tables;TABLE_NAME ------------------------------------------------------------------…

Java學習------static、final、this、super關鍵字

1. static關鍵字 static修飾的變量叫做靜態變量。當所有對象的某個屬性的值是相同的,建議將該屬性定義為靜態變量,來節省內存的開銷。靜態變量在類加載時初始化,存儲在堆中。static修飾的方法叫做靜態方法。所有靜態變量和靜態方法&#xff…