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