1. 程式人生 > 其它 >執行緒、程序

執行緒、程序

高效能非同步爬蟲
目的:在爬蟲中使用非同步實現高效能的資料爬取操作

非同步爬蟲的方式:
1、多執行緒,多程序(不建議):
-好處:可以為相關阻塞的操作單獨開啟執行緒或者程序,阻塞操作就可以非同步執行
-弊端:無法限制的開啟多執行緒或者程序

2、執行緒池、程序池:
-好處:我們可以降低系統對程序或者執行緒建立和銷燬的一個頻率,從而很好的降低系統的開銷
-弊端:池中執行緒或者程序的數量有上限

3、單執行緒+非同步協程(推薦):
event_loop:事件迴圈,相當於一個無限迴圈,我們可以把一些函式註冊到這個事件迴圈上,
當滿足某些條件的時候,函式就會被迴圈執行

coroutine:協程物件,我們可以將協程物件註冊到事件迴圈中,它會被事件迴圈呼叫,


我們可以使用 async 關鍵字來定義一個方法,用這個方法在呼叫時不會立即執行,而是返回
一個協程物件

task:任務,它是協程物件的進一步封裝,包含了任務的各個狀態

future:代表將來執行或者還沒有執行的任務,實際上和 task 沒有本質區別

async:定義一個協程

await:用來掛起阻塞方法的執行

import asyncio

async def request( url ):
print( '正在請求的url是' , url )
print( '請求成功' , url )
#async修飾的函式,呼叫之後返回一個協程物件
c = request( 'www.baidu.com' )

#建立一個事件迴圈物件
loop = asyncio.get_event_loop( )
#將協程物件註冊到loop中,然後啟用loop
loop.run_until_complete( c )

#task的使用
loop = asyncio.get_event_loop( )
#基於loop建立一個task物件
task = loop.create_task( c )
print( task )
loop.run_until_complete( task )
print( task )

#future的使用
loop = asyncio.get_event_loop( )
task = asyncio.ensure_future( c )


print( task )
loop.run_until_complete( task )
print( task )

def callback_func( task ):
#result返回的就是任務物件中封裝的協程物件對應函式的返回值
print( task.result( ) )

#繫結回撥
loop = asyncio.get_event_loop( )
task = asyncio.ensure_future( c )
#將回調函式繫結到任務物件中
task.add_done_callback( callback_func )
loop.run_until_complete( task )

 

selenium模組使用
selenium模組和爬蟲之間具有怎樣的關聯
--便捷的獲取網站中動態載入的資料
--便捷實現模擬登入

什麼是selenium模組
--基於瀏覽器自動化的一個模組

selenium使用流程:
--環境安裝: pip install selenium
--下載一個瀏覽器的驅動程式
--下載路徑:
--驅動程式和瀏覽器的對映關係
--例項化一個瀏覽器物件

--編寫基於瀏覽器自動化的操作程式碼
發起請求:get( url )
標籤定位:find系列方法
標籤互動:send_keys( 'xxx' )
執行js程式:excute_script( 'jsCode' )
前進、後退:back( ) forward( )
關閉瀏覽器:quit( )

--selenium處理iframe
如果定位的標籤存在於iframe標籤之中,則必須使用switch_to.frame( id )
動作鏈(拖動):from selenium.webdriver import ActionChains
-例項化一個動作鏈物件:action = ActionChains( bro )
-click_and_hold( div ) :長按且點選操作
-move_by_offset( x,y )
-perform( ) 讓動作鏈立即執行
-action.release( ) 釋放動作鏈物件

scrapy框架
什麼是框架
--就是一個集成了很多功能並且具有很強通用性的一個專案模板
如何學習框架
--專門學習框架封裝的各種功能的詳細用法
什麼是scrapy
--爬蟲中封裝好的一個明星框架
scrapy功能:
--高效能的持久化儲存,非同步的資料下載,高效能的資料分析,分散式

scrapy框架的基本使用
環境安裝
--pip install scrapy
windows:
-pip install wheel
-下載twisted
-安裝twisted
-pip install pywin32
-pip install scrapy

建立一個工程:scrapy startproject xxxPro
在spiders子目錄中建立一個爬蟲檔案
-scrapy gensplider spiderName www.xxx.com