進(jìn)程,線程
········進(jìn)程,能夠完成多任務(wù),比如在一臺(tái)電腦上能夠同時(shí)運(yùn)行多個(gè)QQ
········線程,能夠完成多任務(wù),比如一個(gè)QQ中的多個(gè)聊天窗口
········進(jìn)程是系統(tǒng)進(jìn)行資源分配基本單位
········線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位
····線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享所在進(jìn)程所擁有的全部資源
區(qū)別:
一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程
線程的劃分尺度小于進(jìn)程(資源比進(jìn)程少),使得多線程程序的并發(fā)性高
進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大提高了程序的運(yùn)行效率
線線程不能夠獨(dú)立執(zhí)行,必須依存在進(jìn)程中
線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開銷小,但不利于資源的管理和保護(hù);而進(jìn)程正相反。
多進(jìn)程常用來處理計(jì)算密集型任務(wù)
多線程常用來處理IO密集型任務(wù)
隊(duì)列
創(chuàng)建一個(gè)隊(duì)列:queue_obj = queue.Queue(maxsize=30)
maxsize :表示允許存儲(chǔ)的最
(FIFO) : 對(duì)列--先進(jìn)先出
存值 : queue_obj.put( )
取值 : queue_obj.get( )
獲取隊(duì)列的大小 : queue_obj.qsize( )
判斷隊(duì)列是否滿 : queue_obj.full( )
判斷隊(duì)列是否為空 : queue_obj.empty()
注意 : 隊(duì)列是線程安全的,list,dict 是非線程安全的,使用的時(shí)候最好使用線程鎖
Scrapy 框架
Scrapy是用純Python實(shí)現(xiàn)一個(gè)為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,用途非常廣泛。
框架的力量,用戶只需要定制開發(fā)幾個(gè)模塊就可以輕松的實(shí)現(xiàn)一個(gè)爬蟲,用來抓取網(wǎng)頁內(nèi)容以及各種圖片,非常之方便。
Scrapy 使用了 Twisted['tw?st?d] 異步網(wǎng)絡(luò)框架來處理網(wǎng)絡(luò)通訊,可以加快我們的下載速度,不用自己去實(shí)現(xiàn)異步框架,并且包含了各種中間件接口,可以靈活的完成各種需求。
Scrapy Engine(引擎): 負(fù)責(zé)Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號(hào)、數(shù)據(jù)傳遞等。
Scheduler(調(diào)度器): 它負(fù)責(zé)接受引擎發(fā)送過來的Request請(qǐng)求,并按照一定的方式進(jìn)行整理排列,入隊(duì),當(dāng)引擎需要時(shí),交還給引擎。
Downloader(下載器):負(fù)責(zé)下載Scrapy Engine(引擎)發(fā)送的所有Requests請(qǐng)求,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,
Spider(爬蟲):它負(fù)責(zé)處理所有Responses,從中分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入Scheduler(調(diào)度器),
Item Pipeline(管道):它負(fù)責(zé)處理Spider中獲取到的Item,并進(jìn)行進(jìn)行后期處理(詳細(xì)分析、過濾、存儲(chǔ)等)的地方.
Downloader Middlewares(下載中間件):你可以當(dāng)作是一個(gè)可以自定義擴(kuò)展下載功能的組件。
Spider Middlewares(Spider中間件):你可以理解為是一個(gè)可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses;和從Spider出去的Requests)
scrapy基本介紹
創(chuàng)建一個(gè)項(xiàng)目scrapy startproject projectname(項(xiàng)目名稱)
進(jìn)入到spidres文件夾中創(chuàng)建爬蟲文件scrapy genspider 爬蟲文件名稱 網(wǎng)站的域
使用pycharm打開項(xiàng)目,設(shè)置虛擬環(huán)境scrapy項(xiàng)目的框架
chinaz:項(xiàng)目文件夾
spiders:爬蟲文件(存放所有的爬蟲文件)
zzw.py:爬蟲文件(解析response響應(yīng),提取目標(biāo)數(shù)據(jù)和url)
items.py:編寫要爬取的字段
middlewares.py:中間件(爬蟲中間件,下載中間件)
pipelines.py:數(shù)據(jù)管道(在這里做數(shù)據(jù)持久化)
settings.py:設(shè)置文件(設(shè)置請(qǐng)求頭,設(shè)置下載延遲,設(shè)置是否遵守robot協(xié)議,以及激活管道……)
scrapy.cfg:配置文件(部署項(xiàng)目時(shí)會(huì)使用到)