主頁 > 後端開發 > 全網最全python爬蟲精進(風變編程)

全網最全python爬蟲精進(風變編程)

2021-04-30 22:28:55 後端開發

4.25(第一天)

**

第0關 認識爬蟲

**
1、初始爬蟲
爬蟲,從本質上來說,就是利用程式在網上拿到對我們有價值的資料,
2、明晰路徑
2-1、瀏覽器作業原理

(1)決議資料:當服務器把資料回應給瀏覽器之后,瀏覽器并不會直接把資料丟給我們,因為這些資料是用計算機的語言寫的,瀏覽器還要把這些資料翻譯成我們能看得懂的內容;
(2)提取資料:我們就可以在拿到的資料中,挑選出對我們有用的資料;
(3)存盤資料:將挑選出來的有用資料保存在某一檔案/資料庫中,
2-2、爬蟲作業原理

(1)獲取資料:爬蟲程式會根據我們提供的網址,向服務器發起請求,然后回傳資料;
(2)決議資料:爬蟲程式會把服務器回傳的資料決議成我們能讀懂的格式;
(3)提取資料:爬蟲程式再從中提取出我們需要的資料;
(4)儲存資料:爬蟲程式把這些有用的資料保存起來,便于你日后的使用和分析,
3、體驗爬蟲
3-1、requests.get()
①、安裝 requests 庫
Mac電腦里打開終端軟體(terminal),輸入pip3 install requests,然后點擊 enter;
Windows電腦里叫命令提示符(cmd),輸入pip install requests ,
提示:往后安裝其他庫時與上方類似,pip install 模塊名

②、requests 庫作用
requests 庫可以幫我們下載網頁源代碼、文本、圖片,甚至是音頻,其實,“下載”本質上是向服務器發送請求并得到回應,

③、requests 庫使用
選擇語言
res = requests.get(‘URL’)
requests.get 是在呼叫requests庫中的get()方法,它向服務器發送了一個請求,括號里的引數是你需要的資料所在的網址,然后服務器對請求作出了回應,我們把這個回應回傳的結果賦值在變數res上,

3-2、Response物件的常用屬性

①、response.status_code
列印 response 的回應狀態碼,以檢查請求是否成功,

②、response.content
把 Response 物件的內容以二進制資料的形式回傳,適用于圖片、音頻、視頻的下載,

③、response.text
把 Response 物件的內容以字串的形式回傳,適用于文字、網頁源代碼的下載,

④、response.encoding
能幫我們定義Response物件的編碼,(遇上文本的亂碼問題,才考慮用res.encoding)
3-3、匯總圖解

4、爬蟲倫理
4-1、Robots 協議
Robots 協議是互聯網爬蟲的一項公認的道德規范,它的全稱是“網路爬蟲排除標準”(Robots exclusion protocol),這個協議用來告訴爬蟲,哪些頁面是可以抓取的,哪些不可以,
4-2、協議查看
(1)在網站的域名后加上/robots.txt就可以了,如淘寶的robots協議 ( http://www.taobao.com/robots.txt);
(2)協議里最常出現的英文是Allow和Disallow,Allow代表可以被訪問,Disallow代表禁止被訪問,
目錄
1、初始爬蟲
2、明晰路徑
2-1、瀏覽器作業原理
2-2、爬蟲作業原理
3、體驗爬蟲
3-1、requests.get()
3-2、Response物件的常用屬性
3-3、匯總圖解
4、爬蟲倫理
4-1、Robots 協議
4-2、協議查看

程中我們的示范,會用谷歌瀏覽器(Chrome)進行演示,強烈推薦你也使用它,
如果你還沒有谷歌瀏覽器(Chrome),打開下面的鏈接,就可以下載Chrome的安裝包了,Windows和Mac都有:谷歌瀏覽器(Chrome)安裝教程(https://www.google.cn/intl/zh-CN/chrome/)

初識爬蟲
什么是爬蟲?
到底什么是爬蟲呢?

爬蟲,從本質上來說,就是利用程式在網上拿到對我們有價值的資料,

爬蟲能做很多事,能做商業分析,也能做生活助手,比如:分析北京近兩年二手房成交均價是多少?深圳的Python工程師平均薪資是多少?北京哪家餐廳粵菜最好吃?等等,

這是個人利用爬蟲所做到的事情,而公司,同樣可以利用爬蟲來實作巨大的商業價值,比如你所熟悉的搜索引擎——百度和谷歌,它們的核心技術之一也是爬蟲,而且是超級爬蟲,

以百度為例,你在搜索的時候仔細看,會發現每個搜索結果下面都有一個百度快照,

在這里插入圖片描述

點擊百度快照,你會發現網址的開頭有baidu這個詞,也就是說這個網頁屬于百度,

在這里插入圖片描述
這是因為,百度這家公司會源源不斷地把千千萬萬個網站爬取下來,存盤在自己的服務器上,你在百度搜索的本質就是在它的服務器上搜索資訊,你搜索到的結果是一些超鏈接,在超鏈接跳轉之后你就可以訪問其它網站了,

爬蟲還讓這些搜索巨頭有機會朝著人工智能的未來邁進,因為人工智能的發展離不開海量的資料,而每天使用這些搜索網站的用戶都是數以億計的,產生的資料自然也是難以計量的,

從搜索巨頭到人工智能巨頭,這是一條波瀾壯闊的路,而我們應該看到,事情的源頭,卻是我們今日所書寫的“爬蟲”,

我們會通過一個網站:人人都是蜘蛛俠 來學習瀏覽器的作業原理,(這是我們自己搭建的網站,方便教學和實操)

在這里插入圖片描述
在這里插入圖片描述
首先,我們在瀏覽器的地址欄輸入網址(也可以叫URL),然后,瀏覽器向服務器傳達了我們想訪問某個網頁的需求,這個程序就叫做【請求】,

緊接著,服務器把你想要的網站資料發送給瀏覽器,這個程序叫做【回應】,

所以瀏覽器和服務器之間,先請求,后回應,有這么一層關系,

爬蟲的作業原理
在這里插入圖片描述
爬蟲學習大綱
在這里插入圖片描述

0關,初識爬蟲,你會了解爬蟲的作業原理,寫出一個簡單的爬蟲程式,學會爬蟲的第0步:獲取資料,

icon
第1關,你將會快速入門HTML基礎知識,達到讀懂和修改HTML檔案的水平,有了這些基礎,你才能去學習如何決議資料和提取資料,

icon
第2345關,我會教你爬蟲的第1和第2步:決議資料和提取資料,同時,你還會學到兩種不同的發起請求的方式,

icon
在第6關,你將學會存盤資料,即把目標資料寫入到本地的Excel表格中,到此,你就學會了爬蟲完整的四個步驟,掌握了最基本的爬蟲技能啦,

icon
第7關,我們一起做一個專案,爬取一個知乎大v的所有文章,并且存到Excel中,以此,我們鞏固和復習了0-6關的所有知識,第7關會是一個分水嶺,后面關卡的進階知識都建立在前7關的基礎上,

icon
第8關,學會cookies,就可以讓瀏覽器記住你,你們可以更方便地長期保持聯系,而不是在一次見面之后就相忘于江湖,

icon
第9關,學習控制瀏覽器,來應對爬蟲中一些更復雜的情況,第10關,你的爬蟲會變得更自動化,爬蟲程式不但可以定時作業,還可以把爬取結果傳遞給你,

icon
接下來的4關,你將學會更高效更強大的爬蟲方法,讓爬蟲技能升級,

icon
第15關畢業總結,就到了告別的時刻了,這時你也學成出師,可以用爬蟲知識去做自己想做的事情了,讓爬蟲為你消滅重復勞動,高效獲取資訊,創造出更多價值,

icon
以上,就是爬蟲學習大綱,
# 引入requests庫
import requests

# requests.get是在呼叫requests庫中的get()方法,它向服務器發送了一個請求,括號里的引數是你需要的資料所在的網址,然后服務器對請求作出了回應,
# 我們把這個回應回傳的結果賦值給變數res
res = requests.get('URL')

在這里插入圖片描述
現在,我們試著用requests.get()來下載一個小說——《三國演義》:
在這里插入圖片描述

# 來吧,寫代碼吧    
import requests
url = 'https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md'
response = requests.get(url)

在這里插入圖片描述

import requests 

res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png') 
# 列印變數res的回應狀態碼,以檢查請求是否成功
print(res.status_code)

icon
第5行代碼是在列印res的回應狀態碼,它可以用來檢查我們的requests請求是否得到了成功的回應,我們看到終端結果顯示了200,這個數字代表服務器同意了請求,并回傳了資料給我們,

icon
除了200,我們還可能收到其他的狀態碼,下面有一個表格,供你參考不同的狀態碼代表什么,但不需要記住它們,在遇到問題的時候查詢就好,

在這里插入圖片描述
icon
response.status_code是一個很常用的屬性,在我們之后的爬蟲代碼中也將多次出現,
在這里插入圖片描述
icon
接著的屬性是response.content,它能把Response物件的內容以二進制資料的形式回傳,適用于圖片、音頻、視頻的下載,看個例子你就懂了,

icon
假如我們想下載這張圖片,它的URL是:https://res.pandateacher.com/2018-12-18-10-43-07.png

在這里插入圖片描述

# 引入requests庫
import requests

# 發出請求,并把回傳的結果放在變數res中
res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
# 把Reponse物件的內容以二進制資料的形式回傳
pic = res.content
# 新建了一個檔案ppt.jpg,這里的檔案沒加路徑,它會被保存在程式運行的當前目錄下,
# 圖片內容需要以二進制wb讀寫,你在學習open()函式時接觸過它,
photo = open('ppt.jpg','wb')
# 獲取pic的二進制內容
photo.write(pic) 
# 關閉檔案
photo.close()

icon
這樣,我們的圖片就下載成功啦~你也可以在本地運行這個程式,

icon
講完了response.content,繼續看response.text,這個屬性可以把Response物件的內容以字串的形式回傳,適用于文字、網頁源代碼的下載,

icon
舉個例子,我們還是來下載小說《三國演義》的第一回,

# 參考requests庫
import requests

# 下載《三國演義》第一回,我們得到一個物件,它被命名為res
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
# 把Response物件的內容以字串的形式回傳
novel=res.text
# 現在,可以列印小說了,但考慮到整章太長,只輸出800字看看就好,在關于串列的知識那里,你學過[:800]的用法,
print(novel[:800])

icon
之后,我們就可以用通過讀寫檔案把小說保存到本地了,這是Python基礎語法知識,你應該已經學會了,下面直接給出做法,你也可以在自己的本地電腦上做嘗試練習,

# 引入requests庫
import requests
#下載《三國演義》第一回,我們得到一個物件,它被命名為res
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
# 把Response物件的內容以字串的形式回傳
novel = res.text
# 創建一個名為《三國演義》的txt檔案,指標放在檔案末尾,追加內容
k = open('《三國演義》.txt','a+')
# 寫進檔案中 
k.write(novel)
# 關閉檔案    
k.close()

在這里插入圖片描述

爬蟲倫理
icon
就像是兩個人在來來往往的相處中,會考慮對方的感受;在互聯網的世界中,我們也要考慮一下服務器對爬蟲的感受是怎樣的,

icon
我們說過,服務器其實就是一個超級電腦,擁有這個服務器的公司,對爬蟲其實也有明確的態度,

icon
通常情況下,服務器不太會在意小爬蟲,但是,服務器會拒絕頻率很高的大型爬蟲和惡意爬蟲,因為這會給服務器帶來極大的壓力或傷害,

icon
不過,服務器在通常情況下,對搜索引擎是歡迎的態度(剛剛講過,谷歌和百度的核心技術之一就是爬蟲),當然,這是有條件的,通常這些條件會寫在robots協議里,

icon
robots協議是互聯網爬蟲的一項公認的道德規范,它的全稱是“網路爬蟲排除標準”(robots exclusion protocol),這個協議用來告訴爬蟲,哪些頁面是可以抓取的,哪些不可以,

icon
我們使用robots協議的場景通常是:看到想獲取的內容后,檢查一下網站是否允許爬取,因此我們只需要能找到、簡單讀懂robots協議就足夠了,

icon
我們截取了一部分淘寶的robots協議,可以看到淘寶對百度和谷歌這兩個爬蟲的訪問規定,以及對其它爬蟲的規定,

icon
有的同學可能就要問了:“域名是什么?域名和URL(網址)有什么關系?”很敏銳喲!

icon
我們前面說過,如果把一個網頁類比為一幢房子,URL指示了網頁的地址,就像房子在地球上的詳細到某某街道某某號的具體地址,那么域名就像房子所在的國家,指示了網站的地址,

icon
如果我們看到一個網頁,想爬上面的內容,怎么找到它的URL我們剛剛學過了,如果網頁的URL是https://pypi.org/project/requests/,那么,此網站的域名是pypi.org;如果網頁的URL是http://cn.python-requests.org/zh_CN/latest/,那么網站的域名是cn.python-requests.org,

icon
我們再來看一個,如果網頁的URL是https://www.taobao.com/markets/3c/tbdc?spm=a21bo.2017.201867-main.11.5af911d9VV8EyS,那么網站的域名是www.taobao.com,


單選題
看懂了么?我們來試一次,某網頁的網址是https://www.bilibili.com/v/douga/?spm_id_from=333.851.b_7072696d6172794368616e6e656c4d656e75.1,那么網站的域名是?

答對了!

icon
沒錯,你已經找到了規律!

icon
有個課后思考交給你:域名中會藏著網站的國籍或功能領域等資訊,那么.cn,.com,.gov結尾的域名分別代表了什么?
icon
來看一個實體:我們截取了一部分淘寶的robots協議 (

http://www.taobao.com/robots.txt),在截取的部分,可以看到淘寶對百度和谷歌這兩個爬蟲的訪問規定,以及對其它爬蟲的規定,

User-agent:  Baiduspider # 百度爬蟲
Allow:  /article # 允許訪問 article 
Allow:  /oshtml # 允許訪問 oshtml 
Allow:  /ershou # 允許訪問 ershou 
Allow: /$ # 允許訪問根目錄,即淘寶主頁
Disallow:  /product/ # 禁止訪問product檔案夾下面的所有檔案,但是product檔案夾本身允許被訪問
Disallow:  / # 禁止訪問除 Allow 規定頁面之外的其他所有頁面
?
User-Agent:  Googlebot # 谷歌爬蟲
Allow:  /article
Allow:  /oshtml
Allow:  /product # 允許訪問product檔案夾及product檔案夾下面的所有檔案
Allow:  /spu
Allow:  /dianpu
Allow:  /oversea
Allow:  /list
Allow:  /ershou
Allow: /$
Disallow:  / # 禁止訪問除 Allow 規定頁面之外的其他所有頁面

?
…… # 檔案太長,省略了對其它爬蟲的規定,想看全文的話,點擊上面的鏈接
?
User-Agent: * # 其他爬蟲
Disallow: / # 禁止訪問所有頁面
icon
可以看出robots協議是“分段”的嗎?每個段落都含有以下兩種欄位:一種是User-agent:,另一種是Allow:或Disallow:,

icon
User-agent表示的是爬蟲型別,上面的示例代碼注釋了“百度爬蟲”和“谷歌爬蟲”,我們自己寫的爬蟲一般要看User-Agent: *,*指向所有未被明確提及的爬蟲,

icon
Allow代表允許被訪問,Disallow代表禁止被訪問,欄位對應的值都含有路徑分隔符/,限制了哪些或哪一層目錄的內容是允許或者禁止被訪問的,可以對比上述百度爬蟲Disallow: /product/和谷歌爬蟲Allow: /product的注釋行理解一下,

練習介紹

要求:
獲取文章《HTTP狀態回應碼》全部內容,并且列印出全文內容,

目的:
練習獲取網上的文本檔案,
題目要求:獲取文章《HTTP狀態回應碼》全部內容,并且列印出全文內容,

獲取資料:

文本URL:
https://localprod.pandateacher.com/python-manuscript/crawler-html/exercise/HTTP%E5%93%8D%E5%BA%94%E7%8A%B6%E6%80%81%E7%A0%81.md

首先呼叫requests庫,使用requests.get(‘URL’)獲取檔案,回傳的是Response物件,

然后需要把Response物件用合適的資料形式回傳,

存盤資料:

存盤檔案的三個步驟:打開檔案,存盤檔案,關閉檔案,

import requests

destnation_url = 'https://localprod.pandateacher.com/python-manuscript/crawler-html/exercise/HTTP%E5%93%8D%E5%BA%94%E7%8A%B6%E6%80%81%E7%A0%81.md'
res = requests.get (destnation_url) 
print(res.status_code) # 查看回應碼
article=res.text # 把Response物件的內容以字串的形式回傳
print(article)

回傳結果如下

# HTTP回應狀態碼


## 1xx:臨時回應
#### 表示臨時回應并需要請求者繼續執行操作的狀態代碼,

100   **繼續**請求者應當繼續提出請求,服務器回傳此代碼表示已收到請求的第一部分,正在等待其余部分, 
101   **切換協議**請求者已要求服務器切換協議,服務器已確認并準備切換,

---

## 2xx : 成功
#### 表示成功處理了請求的狀態代碼,

200   **成功**  服務器已成功處理了請求,通常,這表示服務器提供了請求的網頁,
201   **已創建**  請求成功并且服務器創建了新的資源,
202   **已接受**  服務器已接受請求,但尚未處理,
203   **非授權資訊**  服務器已成功處理了請求,但回傳的資訊可能來自另一來源,
204   **無內容**  服務器成功處理了請求,但沒有回傳任何內容,
205   **重置內容**服務器成功處理了請求,但沒有回傳 任何內容,
206   **部分內容**  服??器成功處理了部分 GET 請求,

---

## 3xx : 重定向
#### 表示要完成請求,需要進一步操作,通常,以下狀態代碼用來重定向,

300   **多種選擇**  針對請求,服務器可執行多種操作,服務器可根據請求者 (user agent) 選擇一項操作,或提供操作串列供請求者選擇,
301   **永久移動**  請求的網頁已永久移動到新位置,服務器回傳此回應(對 GET 或 HEAD 請求的回應)時,會自動將請求者轉到新位置,
302   **臨時移動**  服務器目前從不同位置的網頁回應請求,但請求者應繼續使用原有位置來進行以后的請求,
303   **查看其他位置**請求者應當對不同的位置使用單獨的 GET 請求來檢索回應時,服務器回傳此代碼,

304   **未修改**自從上次請求后,請求的網頁未修改過,服務器回傳此回應時,不會回傳網頁內容,
305   **使用代理**請求者只能使用代理訪問請求的網頁,如果服務器回傳此回應,還表示請求者應使用代理,
307   **臨時重定向**  服務器目前從不同位置的網頁回應請求,但請求者應繼續使用原有位置來進行以后的請求,

---

## 4xx:請求錯誤
### 以下狀態代碼表示請求可能出錯,妨礙了服務器的處理,
 
400   **錯誤請求**服務器不理解請求的語法,
401   **未授權**請求要求身份驗證,對于需要登錄的網頁,服務器可能回傳此回應,
403   **禁止**服務器拒絕請求,
404   **未找到**服務器找不到請求的網頁,
405   **方法禁用**禁用請求中指定的方法,
406   **不接受**無法使用請求的內容特性回應請求的網頁,
407   **需要代理授權**此狀態代碼與 401(未授權)類似,但指定請求者應當授權使用代理,
408   **請求超時**  服務器等候請求時發生超時,
409   **沖突**  服務器在完成請求時發生沖突,服務器必須在回應中包含有關?2突的資訊,
410   **已洗掉**  如果請求的資源已永久洗掉,服務器就會回傳此回應,
411   **需要有效長度**服務器不接受不含有效內容長度標頭欄位的請求,
412   **未滿足前提條件**服務器未滿足請求者在請求中設定的其中一個前提條件,
413   **請求物體過大**服務器無法處理請求,因為請求物體過大,超出服務器的處理能力,
414   **請求的 URI 過長**請求的 URI(通常為網址)過長,服務器無法處理,
415   **不支持的媒體型別**請求的格式不受請求頁面的支持,
416   **請求范圍不符合要求**如果頁面無法提供請求的范圍,則服務器會回傳此狀態代碼,
417   **未滿足期望值**服務器未滿足"期望"請求標頭欄位的要求,

---

## 5xx:服務器錯誤
### 以下狀態代碼表示服務器在嘗試處理請求時發生內部錯誤,這些錯誤可能是服務器本身的錯誤,而不是請求出錯,

500   **服務器內部錯誤**  服務器遇到錯誤,無法完成請求,
501   **尚未實施**服務器不具備完成請求的功能,例如,服務器無法識別請求方法時可能會回傳此代碼,
502   **錯誤網關**服務器作為網關或代理,從上游服務器收到無效回應,
503   **服務不可用**服務器目前無法使用(由于超載或停機維護),通常,這只是暫時狀態,
504   **網關超時**  服務器作為網關或代理,但是沒有及時從上游服務器收到請求,
505   **HTTP 版本不受支持**服務器不支持請求中所用的 HTTP 協議版本,



練習介紹
要求:
獲取下面的圖片,并且儲存圖片,

在這里插入圖片描述

目的:
練習獲取網上的圖片檔案,

import requests

# 發出請求,并把回傳的結果放在變數res中
res = requests.get('https://res.pandateacher.com/2019-01-12-15-29-33.png')
# 把Reponse物件的內容以二進制資料的形式回傳
pic=res.content
# 新建了一個檔案ppt.jpg,這里的檔案沒加路徑,它會被保存在程式運行的當前目錄下,
# 圖片內容需要以二進制wb讀寫,你在學習open()函式時接觸過它,
photo = open('spider.jpg','wb')
# 獲取pic的二進制內容
photo.write(pic) 
# 關閉檔案
photo.close()

練習介紹
題目要求:

獲取下面的音樂,并且儲存它,然后請重繪頁面,這樣你就可以在【檔案】內看到它,音樂URL:

https://static.pandateacher.com/Over%20The%20Rainbow.mp3

獲取資料
音樂URL:https://static.pandateacher.com/Over%20The%20Rainbow.mp3

首先呼叫requests庫,使用requests.get(‘URL’)獲取檔案,回傳的是Response物件,

然后需要把Response物件用合適的資料形式回傳,

存盤檔案
存盤檔案的三個步驟:打開檔案,存盤檔案,關閉檔案,

import requests

# 發出請求,并把回傳的結果放在變數res中
res = requests.get('https://static.pandateacher.com/Over%20The%20Rainbow.mp3')
# 把Reponse物件的內容以二進制資料的形式回傳
mp3 = res.content
# 新建了一個檔案rainbow.mp3,這里的檔案沒加路徑,它會被保存在程式運行的當前目錄下,
# 音頻內容需要以二進制wb讀寫,你在學習open()函式時接觸過它,
music = open('rainbow.mp3','wb')
# 寫入mp3的二進制內容
music.write(mp3) 
# 關閉檔案
music.close()

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/281775.html

標籤:python

上一篇:python正則運算式

下一篇:撰寫代碼(最好能說明一下思路)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more