本篇文章給大家?guī)砹岁P(guān)于python的相關(guān)知識(shí),其中主要介紹了關(guān)于多線程爬蟲開發(fā)以及常見搜索算法的相關(guān)問題,下面一起來看一下,希望對(duì)大家有幫助。
推薦學(xué)習(xí):python視頻教程
多線程爬蟲
多線程的優(yōu)勢(shì)
在掌握了requests與正則表達(dá)式以后,就可以開始實(shí)戰(zhàn)爬取一些簡單的網(wǎng)址了。
但是,此時(shí)的爬蟲只有一個(gè)進(jìn)程、一個(gè)線程,因此稱為單線程爬蟲。單線程爬蟲每次只訪問一個(gè)頁面,不能充分利用計(jì)算機(jī)的網(wǎng)絡(luò)帶寬。一個(gè)頁面最多也就幾百KB,所以爬蟲在爬取一個(gè)頁面的時(shí)候,多出來的網(wǎng)速和從發(fā)起請(qǐng)求到得到源代碼中間的時(shí)間都被浪費(fèi)了。如果可以讓爬蟲同時(shí)訪問10個(gè)頁面,就相當(dāng)于爬取速度提高了10倍。為了達(dá)到這個(gè)目的,就需要使用多線程技術(shù)了。
Python這門語言,有一個(gè)全局解釋器鎖(Global Interpreter Lock, GIL)。這導(dǎo)致Python的多線程都是偽多線程,即本質(zhì)上還是一個(gè)線程,但是這個(gè)線程每個(gè)事情只做幾毫秒,幾毫秒以后就保存現(xiàn)場,換做其他事情,幾毫秒后再做其他事情,一輪之后回到第一件事上,恢復(fù)現(xiàn)場再做幾毫秒,繼續(xù)換……微觀上的單線程,在宏觀上就像同時(shí)在做幾件事。這種機(jī)制在I/O(Input/Output,輸入/輸出)密集型的操作上影響不大,但是在CPU計(jì)算密集型的操作上面,由于只能使用CPU的一個(gè)核,就會(huì)對(duì)性能產(chǎn)生非常大的影響。所以涉及計(jì)算密集型的程序,就需要使用多進(jìn)程,Python的多進(jìn)程不受GIL的影響。爬蟲屬于I/O密集型的程序,所以使用多線程可以大大提高爬取效率。
多進(jìn)程庫:multiprocessing
multiprocessing本身是Python的多進(jìn)程庫,用來處理與多進(jìn)程相關(guān)的操作。但是由于進(jìn)程與進(jìn)程之間不能直接共享內(nèi)存和堆棧資源,而且啟動(dòng)新的進(jìn)程開銷也比線程大得多,因此使用多線程來爬取比使用多進(jìn)程有