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)
(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)
(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):
(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):
(method, url, req_kwargs)
response = requests.request(method=method, url=url, **req_kwargs)
(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...