更新時間:2020-09-18 來源:傳智播客 瀏覽量:
由于外部網(wǎng)絡(luò)不穩(wěn)定,在使用單線程爬取網(wǎng)頁數(shù)據(jù)時,如果有一個網(wǎng)頁響應(yīng)速度慢或者卡住了,那整個程序都要等待下去,這顯然是無效率的。因此,我們可以使用多線程、多進(jìn)程、協(xié)程技術(shù)來實現(xiàn)并發(fā)下載網(wǎng)頁。
那么,在Python中多線程、多進(jìn)程和協(xié)程應(yīng)該如何選擇呢?
一般來說,多進(jìn)程適用于CPU密集型的代碼,例如各種循環(huán)處理、大量的密集并行計算等。多線程適用于I/O密集型的代碼,例如文件處理、網(wǎng)絡(luò)交互等。協(xié)程無需通過操作系統(tǒng)調(diào)度,沒有進(jìn)程、線程之間的切換和創(chuàng)建等開銷,適用于大量不需要CPU的操作,例如網(wǎng)絡(luò)I/O等。
實際上,限制爬蟲程序發(fā)展的瓶頸就在于網(wǎng)絡(luò)I/O,原因是網(wǎng)絡(luò)I/O的速度趕不上CPU的處理速度。結(jié)合多線程、多進(jìn)程和協(xié)程的特點(diǎn)和用途,我們一般采用多線程和協(xié)程技術(shù)來實現(xiàn)爬蟲程序。
線程爬蟲將多線程技術(shù)運(yùn)用在采集網(wǎng)頁信息和解析網(wǎng)頁內(nèi)容上,它的流程如圖1所示。
(1)首先有一個網(wǎng)址列表,是要爬取數(shù)據(jù)的網(wǎng)頁列表。與單線程爬蟲不同,多線程爬蟲可以同時爬取多個網(wǎng)頁,所以需要準(zhǔn)備一個待爬取網(wǎng)址列表。
(2)同時啟動多個線程抓取網(wǎng)頁內(nèi)容。一般啟動固定數(shù)量的線程,一個線程抓取完一個網(wǎng)頁之后,接著抓取下一個。線程的數(shù)量不宜過多,否則,線程調(diào)度的時間太長,效率低;線程的數(shù)量也不宜過少,否則不能最大限度地提高爬取速度。
(3)將抓取到的網(wǎng)頁源碼存儲在一個列表里。
(4)同時使用多個線程對網(wǎng)頁源碼表里的網(wǎng)頁內(nèi)容進(jìn)行解析。
(5)將解析之后的數(shù)據(jù)存儲起來。至此,就完成了多線程爬蟲的全部過程。
猜你喜歡
【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營】深圳跨境電商運(yùn)營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19【AI大模型開發(fā)-Python】畢業(yè)33個工作日,就業(yè)率已達(dá)到94.55%,班均薪資20763元
2025-09-19【AI智能應(yīng)用開發(fā)-Java】畢業(yè)當(dāng)天offer率91%,薪資1W+占比54.2%,班級均薪12k+
2025-09-19