高性能異步爬蟲概述_學習總結

python爬蟲結課了,最後的高性能爬蟲方案

代理:避開IP這種反扒機制

    什麼是代理
            代理服務器

    代理的作用
            突破自身IP訪問限制
            隱藏自身真實IP

    代理IP的類型
            http:應用到http協議對應的url中 proxies ={‘協議’:‘ip:端口號’}
            https:應用到https協議對應的url中

    代理IP的匿名度:
            透明:服務器知道該請求使用了代理,也知道請求對應的真實IP
            匿名:知道使用了代理,不知道真實IP
            高匿:不知道使用了代理,更不知道真實的IP

    高性能異步爬蟲:
            目的:在爬蟲中使用異步實現高性能的數據爬取操作

    異步爬蟲的方式:
            多線程/多進程:(不建議)
                    好處:可以爲相關阻塞的操作單獨開啓線程或進程,阻塞操作就可以異步執行。
                    弊端:無法無限制的開啓多線程或多進程。

            線程池/進程池:(適當使用)
                    好處:我們可以降低系統對進程或線程的創建和銷燬的一個頻率,從而很好的降低系統的開銷。
                    弊端:池中線程或進程的數量是有上限的。

                    導入線程池模塊對應的類:from multiprocessing import pool
                    實例化一個線程池對象:pool = pool(n) n:線程池中線程數
                    線程池的使用:pool.map(阻塞操作,可迭代對象)
                    使用原則:線程池處理的是阻塞且較爲耗時的操作

            單線程+異步協程(推薦)
                    event_loop事件循環,相當於一個無限循環,我們可以把一些函數註冊到這個事件循環上,當滿足某些條件的時候,函數就會被循環執行
                    coroutine協程對象,我們可以將協程對象註冊到循環事件中,它會被事件循環調用
                    我們可以使用 async 關鍵字來定義一個方法,這個方法在調用時不會立即執行,而是返回一個協程對象

task:任務,它是對協程對象的進一步封裝,包含了任務的各個狀態
future:代表將來執行會還沒執行的任務,實際上和 task 沒有本質區別
async:定義一個協程
await: 用來掛起阻塞方法的執行

異步請求(aiohttp)

        環境安裝:pip install aiohttp
        使用該模塊中的ClientSession

使用aiohttp請求代替requests請求

用法
        async with aiohttp.ClientSession() as session:
        get()/post():
        headers,params/data,proxy=‘http://ip:port’
        async with await session.get(url) as response:
        text() 返回字符串形式的響應數據
        read() 返回二進制形式的響應數據
        json() 返回的就是json對象

注意:獲取相應數據操作之前一定要使用await進行手動掛起
page_text = await response.text()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章