爬蟲之效能相關

2022-08-15 16:45:21 字數 3037 閱讀 3744

1、簡介

1. 在編寫爬蟲時,效能的消耗主要在io請求中,當單程序單執行緒模式下請求url時必然會引起等待,從而使得請求整體變慢。

2. 程序:啟用程序非常浪費資源

3. 執行緒:執行緒多,並且在阻塞過程中無法執行其他任務

4. 協程:gevent只用起乙個執行緒,當請求發出去後gevent就不管,永遠就只有乙個執行緒工作,誰先回來先處理

2、實現併發幾個方法比較

1)使用執行緒池實現併發

#

! /usr/bin/env python

#-*- coding: utf-8 -*-

import

requests

from concurrent.futures import

threadpoolexecutor

deffetch_request(url):

result =requests.get(url)

print

(result.content)

pool = threadpoolexecutor(10) #

建立乙個執行緒池,最多開10個執行緒

url_list =[

'www.google.com',

'',]for url in

url_list:

#去執行緒池中獲取乙個執行緒

#執行緒去執行fetch_request方法

pool.submit(fetch_request,url)

pool.shutdown(true)

#主線程自己關閉,讓子執行緒自己拿任務執行

使用執行緒池實現併發

2)使用程序池實現併發

#

! /usr/bin/env python

#-*- coding: utf-8 -*-

import

requests

from concurrent.futures import

processpoolexecutor

deffetch_request(url):

result =requests.get(url)

print

(result.text)

url_list =[

'www.google.com',

'',]if

__name__ == '

__main__':

pool = processpoolexecutor(10) #

執行緒池#

缺點:執行緒多,並且在阻塞過程中無法執行其他任務

for url in

url_list:

#去執行緒池中獲取乙個程序

#程序去執行fetch_request方法

pool.submit(fetch_request,url)

pool.shutdown(true)

使用程序池實現併發

3)多執行緒+**函式執行

#

! /usr/bin/env python

#-*- coding: utf-8 -*-

from concurrent.futures import

threadpoolexecutor

import

requests

deffetch_async(url):

response =requests.get(url)

return

response

defcallback(future):

print

(future.result().content)

if__name__ == '

__main__':

url_list = ['

', '

']pool = threadpoolexecutor(5)

for url in

url_list:

v =pool.submit(fetch_async, url)

v.add_done_callback(callback)

pool.shutdown(wait=true)

多執行緒+**函式執行

4) 協程:微執行緒實現非同步

#

! /usr/bin/env python

#-*- coding: utf-8 -*-

import

gevent

import

requests

from gevent import

monkey

monkey.patch_all()

#這些請求誰先回來就先處理誰

deffetch_async(method, url, req_kwargs):

print

(method, url, req_kwargs)

response = requests.request(method=method, url=url, **req_kwargs)

print

(response.url, response.content)

if__name__ == '

__main__':

##### 傳送請求 #####

gevent.joinall([

gevent.spawn(fetch_async, method='

get', url='

', req_kwargs={}),

gevent.spawn(fetch_async, method='

get', url='

', req_kwargs={}),

gevent.spawn(fetch_async, method='

get', url='

', req_kwargs={}),

])

協程:微執行緒實現非同步

python安裝之爬蟲相關安裝1

爬蟲新手 然後選擇命令提示符,進入cmd,轉到這個目錄下 按照自己的目錄轉 然後輸入 python setup.py install 進行安裝 由於我已經安裝成功,就沒有截圖了,反正如果你跳出了安裝,就說明安裝成功,然後你可以到idle或者你的python相關編譯軟體上去測試 如果你在安裝中失敗了,...

爬蟲相關知識之CSS選擇器

列子 描述.intro 選擇class intro 的所有節點 name 選擇id name 的所有節點 選擇所有節點 p選擇所有p節點 div,p 選擇所有div節點和p節點 div p 選擇div節點內部的所有p節點 div p 選擇父節點為div的所有p節點 div p 選擇緊接在div節點之...

高效能 爬蟲原理

socket 原理 本質上就是乙個socket服務端,乙個客戶端.客戶端在連線服務端的時候只是封裝了http協議頭以及訪問的位址 阻塞 import socket 阻塞 請求 非阻塞 http用的就是這種 請求方式,請求只管發出去,而阻塞的方式還等請求連線成功再發訊息。mport socket ip...