計(jì)算機(jī)視覺應(yīng)用開發(fā)基礎(chǔ) 練習(xí)題及答案_第1頁
計(jì)算機(jī)視覺應(yīng)用開發(fā)基礎(chǔ) 練習(xí)題及答案_第2頁
計(jì)算機(jī)視覺應(yīng)用開發(fā)基礎(chǔ) 練習(xí)題及答案_第3頁
計(jì)算機(jī)視覺應(yīng)用開發(fā)基礎(chǔ) 練習(xí)題及答案_第4頁
計(jì)算機(jī)視覺應(yīng)用開發(fā)基礎(chǔ) 練習(xí)題及答案_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第1章

1.在自己的計(jì)算機(jī)中安裝配置Anaconda和OpenCV的開發(fā)環(huán)境。

2.完成讀取指定圖片,顯示并保存的程序。

ena=cv2.imreadClena.bmp”

cv2.destroyA11Windows()

r=cv2.imwrite("result,bmp”,lena)

3.在自己的計(jì)算機(jī)中安裝配置OpenCV貢獻(xiàn)庫

第2章

1.簡述二值圖像、灰度圖像和彩色的區(qū)別。

二值圖像也稱單色圖像或者1位圖像,以及顏色深度為1的圖像,它也是僅僅包含黑色和白

色兩種顏色的圖像。二值圖像的表示方法簡單便捷,但是因?yàn)槠鋬H有黑、白兩種顏色,所

表示的圖像不夠細(xì)膩。如果想要表現(xiàn)更多的細(xì)節(jié),就需要使用更多的顏色。灰度圖像是包

含灰度級(jí)(亮度)的圖像,通常,計(jì)算機(jī)會(huì)將灰度處理為256個(gè)灰度級(jí),用數(shù)值區(qū)間「0.2551

來表示。相比二值圖像和灰度圖像,彩色圖像是更常見的?類圖像,它能表現(xiàn)出更豐富的

細(xì)節(jié)信息。以常用的RGB色彩空間為例,在RGB色彩空間中,有R(red,紅色)通道、G(green,

綠色)通道和B(blue,藍(lán)色)通道,共三個(gè)通道。

2.I6bit深度的彩色圖像可以表示多少種顏色?如果布.?幅256X256像素的I6bit的深

度的彩色圖像,其數(shù)據(jù)大小是多少字節(jié)?

16bil深度的彩色圖像可以表示216*2-16*2」6=2-48=281474976710656種顏色;一幅256

X256像素的16bit的深度的彩色圖像的數(shù)據(jù)大小是256*256*16*3/8=393216字節(jié)

3.編寫一個(gè)程序,要求讀取一幅灰度圖像,并對(duì)其像素值進(jìn)行訪問、修改。

import顯

img=cv2.imreadClena.bmp”,0)

cv2.imshow("original”,img)

foriinrange(40.200):

forjinrange(160,200):

img[i.il=0

cv2.imshow("modified”,img)

cv2.waitKey()

cv2.destroyAlIWindows()

4.編寫一個(gè)程序,生成?幅彩色圖像,讓其中的像素值均為隨機(jī)數(shù)。

importnumpyas

img=np.random,randint(0,256,size=[256,256,3],dtype=np.uint8)

cv2.imshow(*image*,img)

cv2.waitKeyO

cv2.destroyAlIWindows()

第3章

1.圖像的位運(yùn)算可以分為哪兒類?

圖像的位運(yùn)算有按位與、按位或、按位異或、按位取反.

2.編寫程序,使用隨機(jī)數(shù)數(shù)組模擬灰度圖像,觀察使用“+”對(duì)像素值求和的結(jié)果。

3.編寫程序,使用函數(shù)cv2.addWeightedO將一幅圖像的感興趣區(qū)域(ROD混合在另外

一幅圖像內(nèi)。

importcv2

inportnunpyasnp

img=cv2.imread(*lena.bmp*,1)

=np.zeros((w,h),dtype=np.uint8)

[100:300,200:100]

=cv2.bitwiseand(img,img,mask=mask)

cv2.imread(*sky.bmp”,1)

result=cv2.addWeiBhted(img,0.6,img2,0.4,0)

imshow("result”,result)

waitKcyO

cv2.destroyAl1Windows()

4.編寫程序,構(gòu)造一個(gè)正方形掩模圖像,將該掩模圖像作為按位與函數(shù)的掩模參數(shù),實(shí)

現(xiàn)保留圖像的指定部分。

importnumpyasnp

cv2.imread(*lena.bmp*,1)

mask=np.zeros((w,h),dtype=np.uint8)

[100:300,200:400]=255

dst-cv2.bitwiseand(irag,img,mask=mask)

cv2.imshow(*img*.img)

cv2.imshcw("mask”,mask)

cv2.imshow("dst",dst)

cv2.waitKeyO

cv2.destroyAHWindows()

第4章

1-什么是三原色原理?

白光通過棱鏡后被分解成多種顏色逐漸過渡的色譜,顏色依次為紅、楂、黃、綠、百、歌、

紫,這就是可見光譜。其中人眼對(duì)紅、綠、薇最為敏感,人的眼暗就像一個(gè)三色接收器的體

系,大多數(shù)的顏色可以通過紅、綠、藍(lán)三色按照不同的比例合成產(chǎn)生。同樣絕大多數(shù)單色光

也可以分解成紅綠藍(lán)三種色光。這是色度學(xué)的城基本原理,即三基色原理.

2.在RGB彩色系統(tǒng)中,每個(gè)RGB分量圖像是一幅8位圖像,共有多少不同的彩色級(jí)?

2.8*2.8*2-8=16777216種彩色

3.編寫程序,將圖像在BGR和RGB色彩空間之間相互轉(zhuǎn)換。

iuport覷

lena=cv2.imread(*1ena.bmp*)

rgblmage=cv2.cvtColor(lena,cv2.COLORIiGR2RGB)

cv2.imshow(*bgrw,lena)

cv2.imshow("rgb”,rgblmage)

cv2.wailKey0

4.編寫程序,調(diào)整HSV色彩空間內(nèi)丫通道的值,觀察其處理結(jié)果。

impoitcv2

=cv2.ireread(*lena.bmp")

=cv2.cvtColor(img,cv2.COLORBGR2HSV:

v=cv2.split(hsv)

hsv2=cv2.merge([hfs,v])

im?2=cv2.cvtColor(hsv2,cv2.COLORHSV2BGR)

cv2.imshowCimg",img)

cv2.imshow(*img2*,img2)

cv2.wailKeyO

destroyAllWindows()

第5章

I.圖像有哪幾種常見的幾何變換?

常見的幾何變換有縮放、翻轉(zhuǎn)、仿射變換、透視、重映射等。

2.圖像旋轉(zhuǎn)會(huì)引起圖像失真嗎,為什么?

圖像旋轉(zhuǎn)會(huì)引起圖像失真,因?yàn)閳D像旋轉(zhuǎn)后會(huì)出現(xiàn)空白點(diǎn),需要進(jìn)行插值處理。

3.在放大?幅圖像時(shí),為什么會(huì)出現(xiàn)馬賽兌現(xiàn)象,有什么解決辦法?

放大圖像后會(huì)出現(xiàn)空白點(diǎn),需要進(jìn)行插值處理,插值不精確時(shí)就會(huì)有馬賽克現(xiàn)象。采用更

精細(xì)的插值方法或者平滑濾波,都可以緩解馬賽克現(xiàn)象。

4.編寫程序,將一幅圖像,逆時(shí)針旋轉(zhuǎn)45度后,再縮小L5倍。

cv2.imread(*1ona.bmp")

ight,width=img.shape[:2]

cv2.getRotationMatrix2D((width/2,height/2),45,1.0/1.5)

rotate=cv2.warpAffine(img,M,(width,height))

imshow("original”,img)

cv2.imshow("rotation”,rotate)

cv2.waitKey()

destroyAlIWindowsO

5.編寫程序,通過指定四個(gè)頂點(diǎn)坐標(biāo),將一幅圖像進(jìn)行透視變換°

importcv2

importnumpyasnp

cv2.imread('lena.bmp')

colsimg

ptsl=np.float32([[150,50],[400,50],[60,450],[310,450]])

pts2=np.float32([[50,50],[rows-50,53],[50,cols-50],[rows50,cols-50]])

M=cv2.getPerspectiveTransform(ptsl,pts2)

Dst=cv2.warpPerspective(img,M,(cols,rows))

cv2.imshow(*iing*,img)

imshow(*dst*,dst)

waitKeyO

第6章

1.簡述均值海波、中值濾波原理,分析比較它們的性能特點(diǎn),并通過實(shí)例說明。

均值灌波是指用當(dāng)前像素點(diǎn)鄰域內(nèi)的NxN個(gè)像素值的均值來代替當(dāng)前像素值。中值漁波法

它將每一像素點(diǎn)的灰度值設(shè)fit為該點(diǎn)某鄰域窗口內(nèi)的所有像素點(diǎn)灰度值的中值。均值涌波

是線性平滑技術(shù),中值港波是非線性平滑技術(shù)。均值港波可以消除噪音,會(huì)使圖像整體變

模糊。中值漉波能消除孤立的噪聲點(diǎn)。實(shí)例說明略。

2.高斯通波函數(shù)有哪些重要特性?

<1)二維高斯函數(shù)具TT旋轉(zhuǎn)對(duì)稱性,即濾波器在各個(gè)方向上的平滑程度是相同的。

(2)高斯函數(shù)是單值函數(shù)

(3)高斯函數(shù)的傅立葉變換頻譜是單^的。

(4)高斯濾波器寬度(決定著平滑程度)是由參數(shù)。表征的,而且。和平滑程度的關(guān)系是

非常簡單的。

(5)由于高斯函數(shù)的可分離性,較大尺寸的高斯海波器可以得以有效地實(shí)現(xiàn)。

3.對(duì)于椒鹽噪聲圖像,哪種濾波效果最好?通過程序?qū)崿F(xiàn)結(jié)果說明。

中值濾波效果最好。程序?qū)崿F(xiàn):

img=cv2.imreadflenanoise.jpg”,0)

cv2.medianBlur(img,5)

cv2.imshowC*original*,img)

cv2.imshow("result”,dst)

waitKeyO

cv2.destroyA11Windows0

4.編寫程序,自定義一個(gè)2D卷積海波,并對(duì)圖像進(jìn)行處理.

importnumpyasnp

img=cv2.imread(*lenanoise.jpg*.0)

kernel=np.ones((3,3),np.float32)/9

=cv2.filter2D(img,kernel)

imshow("original”,img)

cv2.imshow(*dst*,dst)

2waitKey()

destroyAl1Windows()

5.為什么中值源波核的大小必須為奇數(shù)?

因?yàn)橹挥衅鏀?shù)才有中值。偶數(shù)的話就沒有中間值。

第7章

1.簡述Sobel算子、Schan?算子、拉普拉斯算子的原理,分析比較它們的性能特點(diǎn),并

通過實(shí)例說明。

Sobel算子是把圖像中每個(gè)像素的9個(gè)相鈉像素點(diǎn)(包含該像素本身)的灰度值加權(quán)求

和,在邊緣處達(dá)到極值從而檢測邊緣:Scharr算子,該算子具有和Sobel算子同樣的

速度,且精度更高??梢詫charr算子看作對(duì)Sobel算子的改進(jìn):Laplacian(拉普拉

斯)算子是一種二階導(dǎo)數(shù)算子,其具有旋轉(zhuǎn)不變性,可以滿足不同為的圖像邊緣銳化

(邊緣檢測)的要求。通常情況下,其算子的系數(shù)之和需要為零。實(shí)例說明略。

2.拉抨拉斯算子為什么能銳化圖像邊緣?

從卷積的形式來看,如果在圖像中的一個(gè)比較暗的區(qū)域出現(xiàn)了一個(gè)亮點(diǎn),那么經(jīng)過拉普拉

斯算子處理后,這個(gè)亮點(diǎn)會(huì)變得更亮。因?yàn)樵谝粋€(gè)很暗的區(qū)域內(nèi),很亮的點(diǎn)和其周圍的點(diǎn)

屬于差異比較大的點(diǎn),在圖像匕差異大就是這個(gè)亮點(diǎn)與周圍點(diǎn)的像素在數(shù)值上的差值大。

那么基于二階微分的拉普拉斯算子就是求取這種像素值發(fā)生突然變換的點(diǎn)或線,此算子卻

可用二次微分止峰和負(fù)峰之間的過零點(diǎn)來確定,對(duì)孤立點(diǎn)或端點(diǎn)更為敏感,因此特別適用

于檢出圖像中的孤立點(diǎn)、孤立線或線端點(diǎn)為目的的場合。

3.對(duì)于旋轉(zhuǎn)后的圖像,哪種梯度算子效果最好?通過程序?qū)崿F(xiàn)結(jié)果說明。

Schaw算子檢出的邊緣細(xì)節(jié)更多。程序?qū)崿F(xiàn)略。

4.編寫程序,自定義一個(gè)圖像梯度算子,并對(duì)圖像進(jìn)行處理。

importcv2

img=cv2.imreadClena.bmp',cv2.IMREAEGRAYSCALE)

Sobelx=cv2.Sobel(img,cv2.CV64F,0.9,0)

Sobely=cv2.Sobel(img,cv2.CV64F,0,0.9)

Sobelx=cv2.convertScaleAbs(Sobelx)

Sobely=cv2.convertScaleAbs(Sobely)

Sobelxy=cv2.addWeighted(Sobelx,0.4,Sobely,0.6,0)

cv2.imshow("original”,img)

cv2.imshow(*xy*,Sobelxy)

cv2.waitKeyO

cv2.destroyA11Windows0

第8章

1.編寫程序,讀入一幅圖像,計(jì)算并顯示其直方圖。

importmatplot1ib.pyplotaspit

=cv2.imread(*lena.

cv2.imshow("original",

pit.hist(inig.ravel0,256)

cv2.waitKeyO

cv2.destrovA11Windows0

2.為什么在一般情況下對(duì)離散圖像的直方圖均衡化并不能產(chǎn)生完全平坦的直方圖?

理由是:(1)直方圖是近似概率密度函數(shù),(2)簡并現(xiàn)象的存在使處理的灰度級(jí)總是要減少

的,這是像素灰度有限的必然結(jié)果。均衡化只是近似的,其結(jié)果只能是產(chǎn)生近似均勻的直方圖。

3.編寫程序,讀入一幅圖像,對(duì)其進(jìn)行直方圖均衡化,并畫出處理前后的直方圖。

importmatplotlib.pyplotaspit

img=cv2.imreadClena.bmp,,0)

equ=cv2.equalizeHist(img)

imshow("original”,img)

cv2.imshow("resuIt”,equ)

It.figure("原始圖像直方ST)

pit.hist(img.ravel(),256)

plI.figure("均衡化結(jié)果直方圖")

pit.hist(equ.rave1(),256)

cv2.waitKeyO

destroy.MlWindows()

第9章

1.編寫程序,利用繪制線段函數(shù),在一幅圖像上繪制一個(gè)三角形。

=cv2.imread("lena.bmp")

img=cv2.line(img,(0,0),(n,n),(255,00),3)

img=cv2.line(img,(0,n),(n,n),(255,0,0),3)

cv2.line(img,(0,0),(0,n),(255,0.0),3)

iiDshow(*img*?img)

waitKeyO

destroyAlIWindows

2.編寫程序,利用多邊形繪制函數(shù),在一幅可像上繪制一個(gè)三角形。

importnumpyasnp

importcv2

img=cv2.imread(*lena.bmp*)

pts=np.array([[0,0],[400,400],[0,400]].np.int32)

#牛.成各個(gè)頂點(diǎn),注意數(shù)據(jù)類型為int32

pts=pts.reshape((-1,1,2))

#第1個(gè)參數(shù)為-1,表明它未設(shè)置具體值,它所表示的維度值是通過其他參數(shù)值計(jì)算得到的

cv2.polylines(img,[pts],True,(0?255,0)8)

#調(diào)用函數(shù)cv2.polylines。完成多邊形繪圖。注意,第3個(gè)參數(shù)控制多邊形是否封閉

cv2.destroyAl1Windows()

3.編寫程序,在一幅圖像上繪制圓圈,并在31中繪制文字。

importcv2

d=400

cv2.imrcadC*lena.bmp")

(centerX,centerY)=(round(img.shape[1]/2).round(img.shape[0]/2))

red=(0,0,255)

cv2.circle(img,(centerX,centerY),200,red,3)

font=cv2,FONT_HERSHEY_SIMPLEX

cv2.putText(img,'Lena,(100,200),font,3,(0,255,0),15)

cv2.putText(img,'Lena",(100,200),font,3,(0,0,255),5)

cv2.imshow(*img*,img)

cv2.waitKeyO

cv2.destroyAlIWindows()

第10章

1.一幅原始尺寸為512*512的圖像,最多可以生成多少層的圖像金字塔?

512->256->128->64->32->16->8->4->2-)1

共9層圖像金字塔。

2.編寫程序,使用函數(shù)cv2.pyrDown()對(duì)一隔圖像進(jìn)行向下采樣至原始大小的16分之1,

并顯示。

cv2.imrcad("lcna.bmp”,cv2.IMREADGRAYSCALE)

cv2.dcstroyAlIWindows()

3.編寫程序,使用函數(shù)c\2pyrUp()對(duì)一幅圖像進(jìn)行向上采樣至原始大小的8倍,并顯示。

img-cv2.imread(*1ena-sma11.bmp*,cv2.IMREADGRAYSCALE)

rl=cv2.pyrUp(img)

cv2.imshow("rl",rl)

cv2.waitKcyO

cv2.destroyAlIWindows()

第11章

1.編寫程序,使用Hairis角點(diǎn)檢測方法對(duì)自然圖像進(jìn)行角點(diǎn)檢測。

importcv2

importnumpyasnp

cv2.imrcad(fi1ename)

cv2.cvtColor(img,cv2.C0L0R_BGR2GRAY)

dst=cv2.cornerHarris(gray,2,3,0.04)

cv2.dilatc(dst,None)

imgEdst>0.01*dst.maxO]=[0,0,2E5]

cv2.namedWindowCimage',cv2.WINDOWNOFMAL)

cv2.imshow(,image*,img)

cv2.destroyAHWindowsO

2.編寫程序,對(duì)同一幅圖像,比較SIFT和SIRF抽取特征的時(shí)間。

gray=cv2.cvtColor(img,cv2.C0L0R_BGR2GRAY)

start_time=time.t

ift=cv2.xfeatures2d.SIFTcrea

關(guān)鍵點(diǎn)找出sift特征向量

time=time.time

print(end_time-start_time)

ret=cv2.drawKcypoints(gray,kp,img)

imshowC*ret*,ret)

dcstroyAlIWindowsO

starttime=tin?e.ti

surf=cv2.xfeatures2d.SURF_create(400)#SURFHessian的閾值

kp,des-surf,detectAndCompute(img,Nene)

time=lime.time

print(end_time-start_time)

cv2.drawKeypoints(img,kp.

img,門ags=cv2.DRAWMATCHES_FLAGS_DRAW』ICH_KEYPOINTS)也會(huì)制關(guān)鍵點(diǎn)

cv2.imshowfimg”,img)

waitKcy()

cv2.destroyAlIWindows()

3.編寫程序,對(duì)兩岫圖像進(jìn)行SIFT特征檢冽并做k近鄰匹配

importcv2

imgl=c\2imreadChousel.bmp”,cv2.IMREAD_GRAYSCALE)

img2;cv2.imread(*house2.bmp*,cv2.IMREADGRAYSCALE)

siftl=cv2.xfeatures2d.SIFTcreate

kpl,desl-siftl.compute(imgl,kpl)

sift2=cv2.xfcatures2d.SIFTcrcateC

kp2,des2-sifl2.compute(img2,kp2)

=cv2.BFMatcher(cv2.NORMAL1,crossCheck=False)

matches-bf.knnMatch(sample,sample2,k=l)

img3=cv2.drawMatchesKnn(inigl,kpl,img2,kp2,matches,img2,fl

imshow(*result*,img3)

cv2.imwrite(*ma

cv2.waitKeyO

cv2.dcstroyAlIWindowsO

第12章

1.簡述積分圖像快速計(jì)算Haa%征的原理租計(jì)算方法,并編寫程序?qū)崿F(xiàn)。

對(duì)于一個(gè)灰度圖像1而言,其積分圖ii也是一張與1尺寸相同的圖,只不過該圖上任意一點(diǎn)

(X,y)的值是指從灰度圖像I的左上角與當(dāng)前點(diǎn)所圉成的矩形區(qū)域內(nèi)所有像素點(diǎn)灰度值之

和,積分圖構(gòu)造好之后,圖像中任何矩陣區(qū)域的像素累加和都可以通過簡單運(yùn)算得到。

importcv2

importnumpyasnp

imgl-cv2.inu*ead(,lena.bmp*)

intejil=cv2.integral(imgl)#

integl-integl/np.max(integl)*255#轉(zhuǎn)為0~255的uint8類型,方便畫圖

integl=np.array(integl,dtype=*ui

naraedWindowC,imgl',0)

imshowCimgT,imgl'

cv2.namcdWindow(*integl',0)

cv2.imshowC,integl,,integl)

cv2.destroyAlIWindowsO

2.編寫程序,使用EigenFishfaccs實(shí)現(xiàn)人臉識(shí)別。

importnurapyasnp

images.append(cv2.imread(*faces-training/g1.bmp*,cv2.IMREADGRAYSCALE))

images.append(cv2.imread(*faces-training/g2.bmp*,cv2.1MREADGRAYSCALE))

images.append(cv2.imread("faces-lraining/sl.bmp”,cv2.IMREAD_GRAYSCALE))

images,append(cv2.imread(*faces-traininj/s2.bmp”,cv2.IMREAD_GRAYSCALE))

labels=[0,0,1,1]

recognizer=cv2.face.EigenFaceRecognizsr_create()

recognizer,train(images,np.array(labels))

ctimaEC=cv2.imread(*faccs-1raining/g3.bmp*,cv2.IMREADGRA'

label,confidence=recognizer,predict(predict_image)

print(*label=*,label)

int("confidence—,confidence)

第13章

1.簡述HOG特征的原理和計(jì)算方法,并比較與其他特征的優(yōu)缺點(diǎn)。

HOG的基本思想就是對(duì)檢測窗口(在圖像中滑動(dòng))進(jìn)行分割以形成塊(Block)和單元格(Cell),

然后計(jì)算:每個(gè)像素的梯度(包括方向和幅值),再以塊為班位統(tǒng)計(jì)每個(gè)雎元格的加權(quán)直方

圖,最后將各個(gè)年元格和塊內(nèi)的直方圖進(jìn)行縱聯(lián)形成HOG描述符。

優(yōu)點(diǎn):

(DH0G表示的是邊緣(梯度)的結(jié)構(gòu)特征,因此可以描述局部的形狀信息;

(2)位置和方向空間的量化一定程度上可以抑制平移和旋轉(zhuǎn)帶來的影響:

(3)采取在局部區(qū)域歸一化直方圖,可以部分抵消光照變化帶來的影響:

(4)由于一定程度忽略了光照顏色對(duì)圖像造成的影響,使得圖像所需要的表征數(shù)據(jù)

的鼐度降低了:

(5)而且由于這種分塊分單元的處理方法,也使得圖像局部像索?點(diǎn)之間的關(guān)系可以

很好得到表征。

缺點(diǎn):

(1)描述符生成過程冗長,導(dǎo)致速度慢,實(shí)時(shí)性差:批注口1]:描述符?

(2)很難處理遮擋問題:

(3)由于梯度的性質(zhì),該描述符對(duì)噪點(diǎn)相當(dāng)敏感。

2.編寫程序,比較使用和不使用非極大值并制做行人檢測的效果。

importcv2

hog=cv2.HOGDescriptorO

hog.sctSVMDetcctor(cv2.HOGDcscriptorgetDcfaultPeopleDetcctor())

#檢測圖片中的行人

(rects,weight)=hog.detectMultiScale(src,

winStride=(2,4),padding=(8,8),seale=l.2,usaMeanshiftGrouping=Fa1se)

(x,y,w,h)inrects:

cv2.rectangle(sre,(x,y),(x+w,y+h),(0,255,0),

cv2.imshow(*hog-detectorl*?sre)

(rects.weight)hog.detectMultiScale(src,

winStride=(2,4),padding=(8,8),scale=l.2,ussMeanshiftGrouping=True)

for(x,y,w,h)inrects

cv2.rectangle(sre,(x,y),(x+w,y+h),(0,255,0),

waitKey(O)

cv2.destroyAl1Windows()

第14章

1.簡述網(wǎng)絡(luò)爬蟲的工作流程。

網(wǎng)絡(luò)爬蟲的主要思想是模擬人的瀏覽操作,在這種模擬的基礎(chǔ)上,解析網(wǎng)頁并提取數(shù)

據(jù)。網(wǎng)絡(luò)爬蟲的具體工作流程如下:

首先選取一部分精心多腕的種子URL(網(wǎng)絡(luò)地址)開始抓取。Pyhon語言提供了很多類似

的函數(shù)庫或框架,如uilib、reguest、scrapy等,通過模擬真實(shí)用戶瀏覽網(wǎng)頁行為,

獲取URL所對(duì)應(yīng)網(wǎng)頁。

然后,將這些URL放入待抓取URL隊(duì)列.通過對(duì)上一步獲取的網(wǎng)頁代碼進(jìn)行解析,可以

通過re(正則表達(dá)式)BeaoifulSoup4.HIMLParser等函數(shù)庫來處理,提取出一系列的

URL和目標(biāo)數(shù)據(jù)。這些URL會(huì)被網(wǎng)絡(luò)爬蟲加入到待抓取的URL列表中,而感興趣的數(shù)據(jù)

則被保存到指定位置。

接下來,從待抓取URL隊(duì)列中取出待抓取在URL,解析DNS,并且得到主機(jī)的ip,并將

URL對(duì)應(yīng)的網(wǎng)頁下載下來,存儲(chǔ)進(jìn)已下載網(wǎng)頁庫中。此外,將這些URL放進(jìn)已抓取URL

隊(duì)列。

最后,從上?步獲取到的網(wǎng)頁中提取URL和目標(biāo)數(shù)據(jù),URL加入到待抓取列表中等待下

?次網(wǎng)絡(luò)爬蟲訪問,目標(biāo)數(shù)據(jù)則保存到指定位置,從而進(jìn)入下?個(gè)循環(huán)。

2.編寫程序,自己尋找一些帶圖片的網(wǎng)頁,爬取網(wǎng)頁上的圖片并下載。

importrequests

url=*https://ticba.baidu.co<n/p/604547,1546,

(*l,ser-Agent*:*Mozilla/5.0(WindowsKT

0.0:Win64:x64;rv:70.0)Gecko/20100101FirefW70.0*)

reques

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論