[轉載] Python新手寫出漂亮的爬蟲代碼1——從html獲取信息

參考鏈接: Python中從用戶獲取多個輸入

Python新手寫出漂亮的爬蟲代碼1?

初到大數據學習圈子的同學可能對爬蟲都有所耳聞,會覺得是一個高大上的東西,仿佛九陽神功和乾坤大挪移一樣,和別人說“老子會爬蟲”,就感覺特別有逼格,但是又不知從何入手,這里,博主給大家糾正一個誤區:爬蟲并不神秘,也不高級,是一個非常好上手和掌握的東西(當然,里面也有很多坑,也有很多細節,展開說的話其實也蠻復雜的,不過它的模式和套路就擺在那里,看了小編的博客,保證你能爬下你想要的內容)。?

一般情況下,爬蟲分為兩種,一種是靜態爬蟲,一種是動態爬蟲,所謂靜態爬蟲,就是大部分信息(至少你所需要的那些信息)是寫在html代碼中的,而動態爬蟲一般都是寫在一個json文檔中,這么說可能不太標準,不過初學者這樣理解即可,這篇博客將會帶大家領略靜態爬蟲,下一篇將會講解動態爬蟲。?

補充一句,博主曾是忠實的Python2用戶,不過現在也改到Python3了,曾經新的庫會在Python2中首先兼容,然后要過好久才在Python3中集成,現在完全不用擔心,Python2有了,Python3不日就會集成,Python3也會在編碼方面提供更多遍歷,推薦新手直接從Python3入手,當然,二者沒有什么太大區別,遇到問題問問度娘就可以了了,廢話不多說,我們開始爬蟲的第一課!?

本篇博文將從以下幾個方面進行講解? - 啥是Html代碼?? - 怎么從Html代碼中定位到我要的東西?? - BeautifulSoup神器? - 案例:愛卡汽車?

?

啥是Html代碼?

所謂的html代碼,瀏覽博客的你右手一定在鼠標上,好的,跟著我左手右手一個慢動作,點擊右鍵,找到“查看網頁源代碼”,不同瀏覽器可能這個描述不太一樣,博主是Chrome,不過都差不太多,是不是有看到類似下面這個圖的一堆不知道是什么鬼的代碼??

?

其實,你可以按鍵盤上的F12或者右鍵選擇“檢查元素”(不同瀏覽器不同),這時,瀏覽器的右側(如果你是360瀏覽器,可能是在下方)彈出一個東東,類似下面紅色框中的區域? ?

這個東西就是剛才我們看的那個不知道是什么鬼的東西的樹狀結構,看上去會整齊一些。這就是html代碼,html代碼其實就是用許多個"<Y yy='aaa'>xxxx</Y>"是的結構將想要輸出在頁面上的內容包含起來的一種語言。下一個小節將詳細介紹這個結構,總而言之,我們肉眼所看到的東西大部分都來自于html代碼,html代碼的作用簡單來說就是程序員用一堆html代碼,將需要展示的信息放在指定的位置上的一種東西,有了html代碼,才有了你眼前頁面上的很多元素;當然,還有其他方式來將元素展示在頁面上,如css、js等渲染方式,這些我們下一篇會介紹。?

知道我們所需要的信息位于html中,那么只需要找到我們需要的具體內容在哪里,然后下載下來,就大功告成了,邏輯就是這么個邏輯,所以靜態爬蟲的關鍵問題是要準確的解析html代碼,一般使用BeautifulSoup這個庫或者正則表達式。?

怎么從Html代碼中定位到我要的東西?

標簽?

上一節中提到,html代碼中都是"<Y yy='aaa'>xxxx</Y>"結構,一對”<>”我們稱之為標簽,這對標簽中通常會有一些內容,可能是一個數字,一段字符串,一個網頁鏈接,或者一個圖片鏈接等等,總之,就是我們在網頁上看到的內容。”Y”稱之為標簽名,”yy”為其屬性名,”aaa”是其屬性值,”xxxx”是這個標簽的內容,也就是對應于頁面上的信息。一般情況下我們要獲取的就是”xxxx”,有時我們可能也需要獲取標簽的屬性值”aaa”。標簽可能是唯一的,也可能是有重復的,回看剛才那張樹狀的標簽結構,有一種分明的層次感,同一層的標簽我們稱他們互為兄弟標簽,而一個標簽和包含他的標簽互為父子標簽,如果a包含b,b包含c,d,則c是a的后代標簽,是b的子標簽,是d的兄弟標簽,這個名字無所謂的,了解一下就好,一般標簽名可能會重復,但標簽屬性名(yy)和屬性值“aaa”很少重復,不過兄弟標簽之間可能會出現標簽名、屬性名、屬性值完全相同的情況,后面會介紹(就是find方法和findAll方法的區別)。?

好,上實例,打開一個網址把:http://newcar.xcar.com.cn/257/review/0.htm,是愛卡汽車中比亞迪F3的口碑頁面,鼠標右鍵選擇“檢查元素”或者之間按鍵盤上的F12,選擇那個鼠標的按鈕(紅色框1),然后將鼠標放到評論框附近(紅色框2),如下圖所示,看到檢查元素界面中有一段代碼背景色變成了深色(如紅色框3)?

?

每個頁面有10條口碑,可見這10條口碑均存儲在屬性名為’class’,屬性值為’review_comments_dl’的’div’標簽中,當然,這個標簽不是一個“葉節點”,也就是說這個標簽內部還有其他標簽,我們進一步看看。看下面的圖片。?

?

我們可以看到紅框3中有很多相同的標簽<dl>...</dl>,他們都是屬性名為’class’,屬性值為’review_comments_dl’的’div’標簽的子標簽,他們之間互為兄弟標簽,我們把鼠標放在紅框3的位置并選中,這時左側網頁的第一條口碑的位置就會變成深色背景,也就是說,紅框3這個標簽實際上對應著紅框2這個區域中的內容,那么我們把紅框3再具體的看一看。如下圖所示。?

?

可以看到,第一條口碑(紅框中的內容)在第一個’dl’標簽中(紅色下劃線2),同理可以看到第二條口碑在第二個’dl’標簽中。再來看看這個’dl’標簽,他有兩個子標簽,’dt’和’dd’子標簽,口碑數據位于dd子標簽下;好的,再來看’dd’標簽,將’dd’標簽展開,如下圖所示。?

?

紅框3是該車的第一頁的第一條口碑,位于dd標簽中,及圖中藍色下劃線<dd>...</dd> 中的內容,圖中從開頭的dd指向紅框3,標注了“同級”,意思是紅框3的內容是dd標簽的內容,而dd標簽下還有子標簽,比如屬性為class,屬性值為useful的div標簽,里面的內容1034是有多少人覺得這個口碑有用;還有一個子標簽p,p標簽的內容是口碑的作者;p中有一個子標簽a,a標簽的內容是評論來源,如圖中的“比亞迪F3論壇”。?

好了,現在想必讀者已經對通過標簽定位信息有所了解了,我們再來練習一下,我們將口碑頁切換到第2頁,可以看到地址變成了http://newcar.xcar.com.cn/257/review/0/0_2.htm,多了一個’0_2’。將’0_2’改成’0_1’就跳回了第一頁(實際上第一頁的真實url是http://newcar.xcar.com.cn/257/review/0/0_1.htm),而改成’0_3’就到了第三頁。那么我們應該怎么獲取該車型的口碑一共有幾頁呢?看下面的圖。?

?

依然是在開發者工具視角(及按F12彈出的窗口這個視角),將鼠標放在尾頁(這里是122)或者‘下一頁’上,右側的框中會出現如圖所示的畫面,可以看到尾頁122所在的位于屬性為class,屬性值為’pagers’的div標簽的倒數第二個子標簽中,如紅框1所示;而’下一頁’則位于屬性為class,屬性值為’pagers’的div標簽的最后一個子標簽中,如紅框2所示。在仔細貫徹一下會發現屬性為class,屬性值為’pagers’的div標簽與我們之前尋找口碑的標簽dl是兄弟標簽,位于全部的dl標簽的再后面一個,也就是說,該標簽的父標簽與dl標簽相同,即屬性名為’class’,屬性值為’review_comments_dl’的’div’標簽。?

為什么要確定尾頁呢?因為構造代碼時,我們要知道代碼的起止位置,使用for循環良好的控制代碼的開始與完結。?

這個爬蟲的邏輯是這樣的:找到目標的車型,即其url,實際上,不同車型的url只有id不同,比如比亞迪F3的url是http://newcar.xcar.com.cn/257/,其車子id是257,當id更改為258時,車型就變成了比亞迪F0;然后查看html代碼,明確要爬取的內容的所在位置,明確換頁規律,明確爬蟲的起止位置(獲取尾頁信息的html位置),然后構造代碼。?

BeautifulSoup神器?

Python一個第三方庫bs4中有一個BeautifulSoup庫,是用于解析html代碼的,換句話說就是可以幫助你更方便的通過標簽定位你需要的信息。這里只介紹兩個比較關鍵的方法:?

1、find方法和findAll方法:? 首先,BeautifulSoup會先將整個html或者你所指定的html代碼編程一個BeautifulSoup對象的實例(不懂對象和實例不要緊,你只要把它當作是一套你使用F12看到的樹形html代碼代碼就好),這個實例可以使用很多方法,最常用的就是find和findAll,二者的功能是相同的,通過find( )的參數,即find( )括號中指定的標簽名,屬性名,屬性值去搜索對應的標簽,并獲取它,不過find只獲取搜索到的第一個標簽,而findAll將會獲取搜索到的所有符合條件的標簽,放入一個迭代器(實際上是將所有符合條件的標簽放入一個list),findAll常用于兄弟標簽的定位,如剛才定位口碑信息,口碑都在dl標簽下,而同一頁的10條口碑對應于10個dl標簽,這時候用find方法只能獲取第一個,而findAll會獲取全部的10個標簽,存入一個列表,想要獲取每個標簽的內容,只需對這個列表使用一個for循環遍歷一遍即可。?

2、get_text()方法:? 使用find獲取的內容不僅僅是我們需要的內容,而且包括標簽名、屬性名、屬性值等,比如使用find方法獲取"<Y yy='aaa'>xxxx</Y>" 的內容xxxx,使用find后,我們會得到整個"<Y yy='aaa'>xxxx</Y>",十分冗長,實際我們想要的僅僅是這個標簽的內容xxxx,因此,對使用find方法后的對象再使用get_text( )方法,就可以得到標簽的內容了,對應到這里,我們通過get_text( )方法就可以得到xxxx了。?

好了,鋪墊做的差不多了,上代碼咯~~~?

案例:愛卡汽車?

使用Python3,需要提前安裝bs4庫,博主的環境是win7+Python3+Pycharm(有時候也用Ubuntu16.04+Python3+Pycharm),很多時候都有人問博主,什么ide好用呢?jupyter notebook?spyder?Pycharm?這里只能和大家說各個ide各有千秋,做工程(如爬蟲)使用pycharm肯定是首選,如果只是平時的練習,寫個小程序,使用jupyter notebook和spyder就不錯,總之,如果涉及到頻繁打印輸出結果的東西,最好還是用pycharm,不要用jupyter notebook,不然會很卡。?

言歸正傳,上代碼!?

兩點說明:爬蟲代碼中,html代碼經常會出現’class’這個屬性名,而class是python中“類”的關鍵字,而爬蟲的find方法對于屬性名而言,是不需要加引號的,如果直接輸入class是會出現問題的,所以需要注意,每次輸入class時應當輸入為class_,即class后加一個下劃線;?

第二就是下方代碼一開始有一個add_header的過程,為的是將代碼偽裝成瀏覽器。很多網站是反對爬蟲程序對其信息進行爬取的,所以會禁止一些程序訪問他們的網站,通過add_header將你的爬蟲程序偽裝成了瀏覽器,故在網站看來,訪問它的就不是一個程序,而是一個瀏覽器,或者說是一個人類用戶了。?

import urllib

import urllib.request

from bs4 import BeautifulSoup

import re

import random

import time

?

# 設置目標url,使用urllib.request.Request創建請求

url0 = "http://newcar.xcar.com.cn/257/review/0.htm"

req0 = urllib.request.Request(url0)

?

# 使用add_header設置請求頭,將代碼偽裝成瀏覽器

req0.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36")

?

# 使用urllib.request.urlopen打開頁面,使用read方法保存html代碼

html0 = urllib.request.urlopen(req0).read()

?

# 使用BeautifulSoup創建html代碼的BeautifulSoup實例,存為soup0

soup0 = BeautifulSoup(html0)

?

# 獲取尾頁(對照前一小節獲取尾頁的內容看你就明白了)

total_page = int(soup0.find("div",class_= "pagers").findAll("a")[-2].get_text())

myfile = open("aika_qc_gn_1_1_1.txt","a")

print("user","來源","認為有用人數","類型","評論時間","comment",sep="|",file=myfile)

for i in list(range(1,total_page+1)):

? ? # 設置隨機暫停時間

? ? stop = random.uniform(1, 3)

? ? url = "http://newcar.xcar.com.cn/257/review/0/0_" + str(i) + ".htm"

? ? req = urllib.request.Request(url)

? ? req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36")

? ? html = urllib.request.urlopen(req).read()

? ? soup = BeautifulSoup(html)

? ? contents = soup.find('div', class_="review_comments").findAll("dl")

? ? l = len(contents)

? ? for content in contents:

? ? ? ? tiaoshu = contents.index(content)

? ? ? ? try:

? ? ? ? ? ? ss = "正在爬取第%d頁的第%d的評論,網址為%s" % (i, tiaoshu + 1, url)

? ? ? ? ? ? print(ss)

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? comment_jiaodu = content.find("dt").find("em").find("a").get_text().strip().replace("\n","").replace("\t","").replace("\r","")

? ? ? ? ? ? except:

? ? ? ? ? ? ? ? comment_jiaodu = ""

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? comment_type0 = content.find("dt").get_text().strip().replace("\n","").replace("\t","").replace("\r","")

? ? ? ? ? ? ? ? comment_type1 = comment_type0.split("【")[1]

? ? ? ? ? ? ? ? comment_type = comment_type1.split("】")[0]

? ? ? ? ? ? except:

? ? ? ? ? ? ? ? comment_type = "好評"

? ? ? ? ? ? # 認為該條評價有用的人數

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? useful = int(content.find("dd").find("div",class_ = "useful").find("i").find("span").get_text().strip().replace("\n","").replace("\t","").replace("\r",""))

? ? ? ? ? ? except:

? ? ? ? ? ? ? ? useful = ""

? ? ? ? ? ? # 評論來源

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? comment_region = content.find("dd").find("p").find("a").get_text().strip().replace("\n","").replace("\t","").replace("\r","")

? ? ? ? ? ? except:

? ? ? ? ? ? ? ? comment_region = ""

? ? ? ? ? ? # 評論者名稱

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? user = content.find("dd").find("p").get_text().strip().replace("\n","").replace("\t","").replace("\r","").split(":")[-1]

? ? ? ? ? ? except:

? ? ? ? ? ? ? ? user = ""

? ? ? ? ? ? # 評論內容

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? comment_url = content.find('dt').findAll('a')[-1]['href']

? ? ? ? ? ? ? ? urlc = comment_url

? ? ? ? ? ? ? ? reqc = urllib.request.Request(urlc)

? ? ? ? ? ? ? ? reqc.add_header("User-Agent",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36")

? ? ? ? ? ? ? ? htmlc = urllib.request.urlopen(reqc).read()

? ? ? ? ? ? ? ? soupc = BeautifulSoup(htmlc)

? ? ? ? ? ? ? ? comment0 = \

? ? ? ? ? ? ? ? soupc.find('div', id='mainNew').find('div', class_='maintable').findAll('form')[1].find('table',class_='t_msg').findAll('tr')[1]

? ? ? ? ? ? ? ? try:

? ? ? ? ? ? ? ? ? ? comment = comment0.find('font').get_text().strip().replace("\n", "").replace("\t", "")

? ? ? ? ? ? ? ? except:

? ? ? ? ? ? ? ? ? ? comment = ""

? ? ? ? ? ? ? ? try:

? ? ? ? ? ? ? ? ? ? comment_time = soupc.find('div', id='mainNew').find('div', class_='maintable').findAll('form')[1].find('table', class_='t_msg').\

? ? ? ? ? ? ? ? ? ? find('div', style='padding-top: 4px;float:left').get_text().strip().replace("\n","").replace( "\t", "")[4:]

? ? ? ? ? ? ? ? except:

? ? ? ? ? ? ? ? ? ? comment_time = ""

? ? ? ? ? ? except:

? ? ? ? ? ? ? ? try:

? ? ? ? ? ? ? ? ? ? comment = content.find("dd").get_text().split("\n")[-1].split('\r')[-1].strip().replace("\n", "").replace("\t","").replace("\r", "").split(":")[-1]

? ? ? ? ? ? ? ? except:

? ? ? ? ? ? ? ? ? ? comment = ""

? ? ? ? ? ? # time.sleep(stop)

? ? ? ? ? ? print(user,comment_region,useful,comment_type,comment_time,comment, sep="|", file=myfile)

? ? ? ? except:

? ? ? ? ? ? s = "爬取第%d頁的第%d的評論失敗,網址為%s" % (i, tiaoshu + 1, url)

? ? ? ? ? ? print(s)

? ? ? ? ? ? pass

myfile.close()?

補充說明一下:try——except這個結構(看起來有點像if——else的結構)是一個非常重要的過程,為了使爬蟲代碼可以良好的運行,不至于剛開始爬幾分鐘就報錯這種惡心人的情況,需要很好的利用try——except過程。程序會先執行try下的語句,如果發生失敗,就會執行except下的語句,你也可以使用多個try——except嵌套的結構完成復雜的情況的覆蓋,最好要保證你的try——except過程包含了程序會遇到的所有情況,那么你的代碼就是趨于完美的。?

講到這里,第一節爬蟲課程也就到這里了,不久之后會介紹動態爬蟲,如果之后還有時間,還會介紹一下selenium這個模擬瀏覽的庫,以及爬蟲框架還有反爬蟲的知識,給自己打個廣告,除了爬蟲可,近期也會分享一些關于word2vec和fastText文本分類算法的內容,讀者有什么其他想交流的可以留言~我也是個正在學習路上的仔,希望能和各路朋友以及大牛交流。?

目錄?

?

?

??

? Python新手寫出漂亮的爬蟲代碼1

? ? 啥是Html代碼怎么從Html代碼中定位到我要的東西

? ? ? 標簽 BeautifulSoup神器案例愛卡汽車

? ? ? 目錄

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

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

相關文章

在Scala中設置&()方法

Scala中的Set&#xff06;()方法 (The Set &() method in Scala) The &() method in the Set is used to create a new set in Scala. This new set created contains all elements from the other two sets that are common for both of the given sets i.e. new set …

[轉載] python與c/c++相比有哪些優勢

參考鏈接&#xff1a; Python輸入和C, Java速度對比 理論上&#xff0c;python的確比C/C慢&#xff08;我對Java的開發沒有經驗&#xff0c;無法評論&#xff09;。這一點不用質疑。 C/C是編繹語言&#xff0c;直接使用的是機器指令&#xff0c;而python總是跑在的虛擬機上&am…

清空日志的三種方法

方法一&#xff1a;echo "" >test.log方法二&#xff1a;> test.log方法三&#xff1a;cat /dev/null >test.log轉載于:https://www.cnblogs.com/liang545621/p/7528509.html

splat net_Ruby中的Splat參數

splat netRuby Splat參數 (Ruby Splat Arguments) We have learnt how to work with methods in Ruby? We are very well aware of the fact that methods may or may not consume any arguments. Let us discuss the methods which consume argument or have a predefined ar…

ajax的訪問 WebService 的方法

轉自原文 ajax的訪問 WebService 的方法 如果想用ajax進行訪問 首先在web.config里進行設置 添加在 <webServices> <protocols> <add name "HttpPost" /> <add name "HttpGet" /> </protocols> </webServices> <s…

[轉載] 使用DirectInput進行交互

參考鏈接&#xff1a; input()函數中的漏洞– Python2.x 使用DirectInput進行交互&#xff08;1&#xff09; DirectX 2008-08-10 15:11:34 閱讀169 評論0 字號&#xff1a;大 中 小 訂閱 輸入設備簡介 計算機通常使用三種輸入設備&#xff1a;鍵盤、鼠標和游…

c語言 nan 常量_NaN32常量(Julia)

c語言 nan 常量Julia| NaN32常數 (Julia | NaN32 Constant) NaN32 is a constant of the Float32 type in Julia programming language, it represents "not-a-number" value. NaN32是Julia編程語言中Float32類型的常量&#xff0c;它表示“非數字”值。 Syntax: 句…

Hyperledger Fabric 1.0 從零開始(七)——啟動Fabric多節點集群

5&#xff1a;啟動Fabric多節點集群 5.1、啟動orderer節點服務 上述操作完成后&#xff0c;此時各節點的compose配置文件及證書驗證目錄都已經準備完成&#xff0c;可以開始嘗試啟動多機Fabric集群。 首先啟動orderer節點&#xff0c;切換至orderer.example.com服務器&#xff…

[轉載] python中print()函數的用法和end=““不換行詳解

參考鏈接&#xff1a; Python | print()中的結束參數 需求&#xff1a;打印五個字符&#xff0c;在一行上 代碼&#xff1a; i 0 while i< 5 : i 1 print(i,end’’) 結果&#xff1a; 1 2 3 4 5那么問題來了&#xff0c;為什么加一個end"" 就不換…

css中圖片左右邊距_CSS中的邊距

css中圖片左右邊距CSS保證金屬性 (CSS margin property) CSS Margins are used to space around any element, for this we use "margin" property in the CSS. CSS邊距用于在任何元素之間留出空間&#xff0c;為此&#xff0c;我們在CSS中使用“ margin”屬性 。 S…

js 實現網頁顯示倒計時

用 js 來實現網頁顯示倒計時效果 1 function checkTime( time ){2 var data new Data(); // 獲取現在時間3 var nowData data.getTime(); // 轉化成毫秒數4 var time ; // 結束的時間5 var t time - nowData ;6 var HH, mm , ss 0;7 var sta "…

scala方法中的變量_Scala中的變量

scala方法中的變量Scala變量 (Scala variables) A variable is named a reference to a memory location. The location stores the data that is used by the program. 變量被稱為對存儲位置的引用。 該位置存儲程序使用的數據。 Based on the data type of the variable the…

[轉載] python[1]-print中的sep、end參數

參考鏈接&#xff1a; Python | print()中的sep參數 讀示例程序代碼時遇到的問題&#xff0c;看不懂end和sep參數。經過查找&#xff0c;基本弄清楚了。 sep&#xff1a;可以設置print中分割不同值的形式。應該是separation的縮寫。 end&#xff1a;可以設置print打印結束時最…

分區 主分區 和 擴展分區_等和分區

分區 主分區 和 擴展分區Description: 描述&#xff1a; This is a popular interview coding problem which has been featured in interview rounds of Amazon, Oyo rooms, Adobe. 這是一個受歡迎的采訪編碼問題&#xff0c;已在亞馬遜&#xff0c;Oyo房間&#xff0c;Adobe…

ORACLE 物理讀 邏輯讀 一致性讀 當前模式讀總結淺析

在ORACLE數據庫中有物理讀&#xff08;Physical Reads&#xff09;、邏輯讀&#xff08;Logical Reads&#xff09;、一致性讀&#xff08;Consistant Get&#xff09;、當前模式讀&#xff08;DB Block Gets&#xff09;等諸多概念&#xff0c;如果不理解或混淆這些概念的話&a…

[轉載] Java Formatter toString()方法與示例

參考鏈接&#xff1a; Python | 輸出格式化 output format 格式化程序類toString()方法 (Formatter Class toString() method) toString() method is available in java.util package. toString()方法在java.util包中可用。 toString() method is for the string representat…

arm tbh_TBH的完整形式是什么?

arm tbhTBH&#xff1a;說實話 (TBH: To Be Honest) TBH is an abbreviation of "To Be Honest". It is internet slang which generally used as an acronym or hashtag over the internet on social media networking sites like Facebook, Instagram, Twitter, Yo…

異常:fatal: unable to access 'https://git.oschina.net/pcmpcs/library.git/': Could not resolve host...

git fork項目時出現的異常. 原因: 我以前用的是ssh地址做的遠程通信地址&#xff0c;而這次是用的是https&#xff0c;因為很久沒用&#xff0c;所以忘記了以前是用ssh的了。解決方案一&#xff1a;復制ssh協議的地址&#xff0c;然后再關聯遠程倉庫。并且在VCS下的git下的Rem…

計數器數組_子數組計數

計數器數組Problem statement: 問題陳述&#xff1a; Given an array of N positive integers a1, a2, ..., an. The value of each contiguous subarray of a given array is the maximum element present in that subarray. The task is to return the number of subarrays…

[轉載] 列表、元組及通用序列操作

參考鏈接&#xff1a; Python | 重點數據類型 (字符串&#xff0c;列表&#xff0c;元組&#xff0c;迭代)(String, List, Tuple, Iteration) 序列是Python中最基本的數據結構&#xff08;一些基本特性類似于C中的數組模板類&#xff09;&#xff0c;序列中的每一個元素都有相…