網(wǎng)絡(luò)爬蟲涉及到的技術(shù)相關(guān)知識(shí)點(diǎn)很多洪规,這里面我們羅列了一些基本的相關(guān)知識(shí),以便我們逐個(gè)擊破。下面是一張關(guān)于爬蟲的知識(shí)結(jié)構(gòu)圖:
獲取網(wǎng)頁技術(shù)互站,一般是通過一門語言來實(shí)現(xiàn)的玖瘸。不管是C职烧、C++貌踏、java十气、.net還是python都有自己的web通信庫捕捂。我們討論的則是關(guān)于python語言的爬蟲工具瑟枫。
最常用的三個(gè)python爬蟲庫
1、urllib庫
python內(nèi)置的http訪問庫指攒,這個(gè)庫我平時(shí)用的相對(duì)較少力奋,一般用于爬蟲系統(tǒng)中的某個(gè)功能實(shí)現(xiàn)校驗(yàn)使用,原因是可以通過更簡(jiǎn)單易用的requests替代它幽七。
2景殷、requests庫
requests是python實(shí)現(xiàn)的簡(jiǎn)單易用的HTTP庫,使用起來比urllib簡(jiǎn)潔很多,腳本型的爬蟲絕大多數(shù)使用這個(gè)庫實(shí)現(xiàn)猿挚。
3咐旧、aiohttp庫
相比requests的阻塞式HTTP請(qǐng)求庫,aiohttp是一個(gè)提供異步web服務(wù)的庫(如果把requests想象成串行執(zhí)行绩蜻,那么aiohttp則是并行執(zhí)行)铣墨,asyncio可以實(shí)現(xiàn)單線程并發(fā)IO操作,通過aiohttp庫實(shí)現(xiàn)的爬蟲办绝,運(yùn)行效率高伊约。
最常用的三個(gè)python爬蟲框架
4、Scrapy框架
Scrapy是一個(gè)為爬蟲而生的應(yīng)用框架孕蝉,他的主要作用是提取結(jié)構(gòu)性數(shù)據(jù)屡律。支持異步網(wǎng)絡(luò)通訊,Scrapy需要遵循他的爬蟲編寫規(guī)范降淮,需要花費(fèi)時(shí)間成本熟悉框架結(jié)構(gòu)和規(guī)則超埋。Scrapy真的很強(qiáng)大。
5佳鳖、Selenium框架
Selenium準(zhǔn)確的將是用于做自動(dòng)化測(cè)試工具霍殴,利用它可以驅(qū)動(dòng)瀏覽器執(zhí)行特定的動(dòng)作,如點(diǎn)擊系吩、下拉等操作来庭,同時(shí)還可以獲取瀏覽器當(dāng)前呈現(xiàn)的頁面的源代碼,做到可見即可爬穿挨。對(duì)于一些JavaScript動(dòng)態(tài)渲染的頁面來說月弛,此種抓取方式非常有效。缺點(diǎn)就是爬蟲的運(yùn)行效率不高絮蒿。
6、Splash框架
Splash是一個(gè)JavaScript渲染服務(wù)叁鉴,是一個(gè)帶有HTTP API的輕量級(jí)瀏覽器土涝,同時(shí)它對(duì)接了Python中的Twisted和QT庫。利用它幌墓,我們同樣可以實(shí)現(xiàn)動(dòng)態(tài)渲染頁面的抓取但壮。
附:框架與類庫的區(qū)別主要表現(xiàn)在以下幾個(gè)方面:
1、從結(jié)構(gòu)上說常侣,框架內(nèi)部是高內(nèi)聚的蜡饵,而類庫內(nèi)部則是相對(duì)松散的。
2胳施、框架封裝了處理流程的控制邏輯溯祸,而類庫幾乎不涉及任何處理流程和控制邏輯。
3、框架具有IOC(控制反轉(zhuǎn))能力焦辅,而類庫沒有博杖。
4、框架專注于特定領(lǐng)域筷登,而類庫卻是更通用的剃根。
5、框架通常建立在眾多類庫的基礎(chǔ)之上前方,而類庫一般不會(huì)依賴于某框架狈醉。