Scrapy學(xué)習(xí)一

先放一張圖


1f422572f67914ce062b3084c369c83d.png

理解幾個(gè)概念:
Scrapy主要包括了以下組件:

引擎(Scrapy)

用來處理整個(gè)系統(tǒng)的數(shù)據(jù)流處理, 觸發(fā)事務(wù)(框架核心)

調(diào)度器(Scheduler)

用來接受引擎發(fā)過來的請求, 壓入隊(duì)列中, 并在引擎再次請求的時(shí)候返回. 可以想像成一個(gè)URL(抓取網(wǎng)頁的網(wǎng)址或者說是鏈接)的優(yōu)先隊(duì)列, 由它來決定下一個(gè)要抓取的網(wǎng)址是什么, 同時(shí)去除重復(fù)的網(wǎng)址

下載器(Downloader)

用于下載網(wǎng)頁內(nèi)容, 并將網(wǎng)頁內(nèi)容返回給蜘蛛(Scrapy下載器是建立在twisted這個(gè)高效的異步模型上的)

爬蟲(Spiders)

爬蟲是主要干活的, 用于從特定的網(wǎng)頁中提取自己需要的信息, 即所謂的實(shí)體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續(xù)抓取下一個(gè)頁面

項(xiàng)目管道(Pipeline)

負(fù)責(zé)處理爬蟲從網(wǎng)頁中抽取的實(shí)體,主要的功能是持久化實(shí)體、驗(yàn)證實(shí)體的有效性、清除不需要的信息。當(dāng)頁面被爬蟲解析后,將被發(fā)送到項(xiàng)目管道,并經(jīng)過幾個(gè)特定的次序處理數(shù)據(jù)。

下載器中間件(Downloader Middlewares)

位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應(yīng)。

爬蟲中間件(Spider Middlewares)

介于Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應(yīng)輸入和請求輸出。

調(diào)度中間件(Scheduler Middewares)

介于Scrapy引擎和調(diào)度之間的中間件,從Scrapy引擎發(fā)送到調(diào)度的請求和響應(yīng)。

Scrapy運(yùn)行流程大概如下:

1.引擎從調(diào)度器中取出一個(gè)鏈接(URL)用于接下來的抓取
2.引擎把URL封裝成一個(gè)請求(Request)傳給下載器
3.下載器把資源下載下來,并封裝成應(yīng)答包(Response)
4.爬蟲解析Response
5.解析出實(shí)體(Item),則交給實(shí)體管道進(jìn)行進(jìn)一步的處理
6.解析出的是鏈接(URL),則把URL交給調(diào)度器等待抓取

創(chuàng)建scrapy項(xiàng)目:

scrapy startproject myproject
項(xiàng)目結(jié)構(gòu).JPG

scrapy.cfg:配置文件;
items.py:項(xiàng)目的item;
settings.py:設(shè)置文件
spiders:目錄下放spider代碼

Items:

爬取的主要目標(biāo)就是從非結(jié)構(gòu)性的數(shù)據(jù)源提取結(jié)構(gòu)性數(shù)據(jù),例如網(wǎng)頁。 Scrapy提供 Item類來滿足這樣的需求。簡言之,就是把網(wǎng)頁上的數(shù)據(jù)轉(zhuǎn)成我們需要的對象。

聲明Items:

Item使用簡單的class定義語法以及 Field對象來聲明。例如:

import scrapy
class Product(scrapy.Item):
    name = scrapy.Field()
    price = scrapy.Field()
    stock = scrapy.Field()
    last_updated = scrapy.Field(serializer=str)

Field對象指明了每個(gè)字段的元數(shù)據(jù)(metadata)。例如下面例子中 last_updated 中指明了該字段的序列化函數(shù)。

db.music.find({},{'artist':1})

關(guān)于無法獲取到網(wǎng)易云音樂列表的問題:
網(wǎng)易云用了框架frame,所以你右鍵查看源代碼的時(shí)候,有兩個(gè)選擇,選擇框架源代碼就可以看到你想要的內(nèi)容了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容