首頁(yè)技術(shù)文章正文

多線程爬蟲是什么?多線程爬蟲流程分析

更新時(shí)間:2020-09-18 來(lái)源:傳智播客 瀏覽量:

由于外部網(wǎng)絡(luò)不穩(wěn)定,在使用單線程爬取網(wǎng)頁(yè)數(shù)據(jù)時(shí),如果有一個(gè)網(wǎng)頁(yè)響應(yīng)速度慢或者卡住了,那整個(gè)程序都要等待下去,這顯然是無(wú)效率的。因此,我們可以使用多線程、多進(jìn)程、協(xié)程技術(shù)來(lái)實(shí)現(xiàn)并發(fā)下載網(wǎng)頁(yè)。

那么,在Python中多線程、多進(jìn)程和協(xié)程應(yīng)該如何選擇呢?

一般來(lái)說(shuō),多進(jìn)程適用于CPU密集型的代碼,例如各種循環(huán)處理、大量的密集并行計(jì)算等。多線程適用于I/O密集型的代碼,例如文件處理、網(wǎng)絡(luò)交互等。協(xié)程無(wú)需通過(guò)操作系統(tǒng)調(diào)度,沒(méi)有進(jìn)程、線程之間的切換和創(chuàng)建等開(kāi)銷,適用于大量不需要CPU的操作,例如網(wǎng)絡(luò)I/O等。

實(shí)際上,限制爬蟲程序發(fā)展的瓶頸就在于網(wǎng)絡(luò)I/O,原因是網(wǎng)絡(luò)I/O的速度趕不上CPU的處理速度。結(jié)合多線程、多進(jìn)程和協(xié)程的特點(diǎn)和用途,我們一般采用多線程和協(xié)程技術(shù)來(lái)實(shí)現(xiàn)爬蟲程序。

線程爬蟲將多線程技術(shù)運(yùn)用在采集網(wǎng)頁(yè)信息和解析網(wǎng)頁(yè)內(nèi)容上,它的流程如圖1所示。

1600421153115_多線程爬蟲.jpg

(1)首先有一個(gè)網(wǎng)址列表,是要爬取數(shù)據(jù)的網(wǎng)頁(yè)列表。與單線程爬蟲不同,多線程爬蟲可以同時(shí)爬取多個(gè)網(wǎng)頁(yè),所以需要準(zhǔn)備一個(gè)待爬取網(wǎng)址列表。

(2)同時(shí)啟動(dòng)多個(gè)線程抓取網(wǎng)頁(yè)內(nèi)容。一般啟動(dòng)固定數(shù)量的線程,一個(gè)線程抓取完一個(gè)網(wǎng)頁(yè)之后,接著抓取下一個(gè)。線程的數(shù)量不宜過(guò)多,否則,線程調(diào)度的時(shí)間太長(zhǎng),效率低;線程的數(shù)量也不宜過(guò)少,否則不能最大限度地提高爬取速度。

(3)將抓取到的網(wǎng)頁(yè)源碼存儲(chǔ)在一個(gè)列表里。

(4)同時(shí)使用多個(gè)線程對(duì)網(wǎng)頁(yè)源碼表里的網(wǎng)頁(yè)內(nèi)容進(jìn)行解析。

(5)將解析之后的數(shù)據(jù)存儲(chǔ)起來(lái)。至此,就完成了多線程爬蟲的全部過(guò)程。

猜你喜歡

Python爬蟲可以做什么?

爬蟲開(kāi)發(fā)必學(xué)的8個(gè)技巧

python爬蟲是什么?

Python培訓(xùn)課程



分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!