進(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í)行過(guò)程中擁有獨(dú)立的內(nèi)存單元时鸵,而多個(gè)線程共享內(nèi)存胶逢,從而極大提高了程序的運(yùn)行效率
線線程不能夠獨(dú)立執(zhí)行,必須依存在進(jìn)程中
線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開(kāi)銷(xiāo)小寥枝,但不利于資源的管理和保護(hù)宪塔;而進(jìn)程正相反磁奖。
多進(jìn)程常用來(lái)處理計(jì)算密集型任務(wù)
多線程常用來(lái)處理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ù)而編寫(xiě)的應(yīng)用框架比搭,用途非常廣泛冠跷。
框架的力量,用戶只需要定制開(kāi)發(fā)幾個(gè)模塊就可以輕松的實(shí)現(xiàn)一個(gè)爬蟲(chóng)身诺,用來(lái)抓取網(wǎng)頁(yè)內(nèi)容以及各種圖片蜜托,非常之方便。
Scrapy 使用了 Twisted['tw?st?d] 異步網(wǎng)絡(luò)框架來(lái)處理網(wǎng)絡(luò)通訊霉赡,可以加快我們的下載速度橄务,不用自己去實(shí)現(xiàn)異步框架,并且包含了各種中間件接口穴亏,可以靈活的完成各種需求蜂挪。
Scrapy Engine(引擎): 負(fù)責(zé)Spider、ItemPipeline嗓化、Downloader棠涮、Scheduler中間的通訊,信號(hào)刺覆、數(shù)據(jù)傳遞等严肪。
Scheduler(調(diào)度器): 它負(fù)責(zé)接受引擎發(fā)送過(guò)來(lái)的Request請(qǐng)求,并按照一定的方式進(jìn)行整理排列谦屑,入隊(duì)驳糯,當(dāng)引擎需要時(shí),交還給引擎氢橙。
Downloader(下載器):負(fù)責(zé)下載Scrapy Engine(引擎)發(fā)送的所有Requests請(qǐng)求结窘,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來(lái)處理充蓝,
Spider(爬蟲(chóng)):它負(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ì)分析、過(guò)濾卑笨、存儲(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)目名稱(chēng))
進(jìn)入到spidres文件夾中創(chuàng)建爬蟲(chóng)文件scrapy genspider 爬蟲(chóng)文件名稱(chēng) 網(wǎng)站的域
使用pycharm打開(kāi)項(xiàng)目,設(shè)置虛擬環(huán)境scrapy項(xiàng)目的框架
chinaz:項(xiàng)目文件夾
spiders:爬蟲(chóng)文件(存放所有的爬蟲(chóng)文件)
zzw.py:爬蟲(chóng)文件(解析response響應(yīng)赤兴,提取目標(biāo)數(shù)據(jù)和url)
items.py:編寫(xiě)要爬取的字段
middlewares.py:中間件(爬蟲(chóng)中間件,下載中間件)
pipelines.py:數(shù)據(jù)管道(在這里做數(shù)據(jù)持久化)
settings.py:設(shè)置文件(設(shè)置請(qǐng)求頭妖滔,設(shè)置下載延遲,設(shè)置是否遵守robot協(xié)議,以及激活管道……)
scrapy.cfg:配置文件(部署項(xiàng)目時(shí)會(huì)使用到)