1. 程式人生 > >Scrapy框架的原理及簡單使用

Scrapy框架的原理及簡單使用

一.介紹:

    Scrapy是一個純Python編寫為了爬取網站資料,提取結構性資料而編寫的應用框架。 可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。

二.環境搭建:

 Scrapy的安裝:
1. scrapy需要安裝第三方庫檔案,lxml和Twisted
2. 下載地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
3.下載好檔案之後,在DOS命令下pip install   檔案的位置(lxml,twisted)安裝。這裡如果報錯,提示更新pip.就輸入python -m pip install --upgrade pip 命令
安裝完成就可以安裝:pip  install  scrappy

還需要安裝 win32(啟動蜘蛛的時候會提示安裝,根據python版本來的我32位)
pip install pypiwin32

Scrapy  API地址:https://docs.scrapy.org/en/latest/

三.架構

   

元件詳解:

    ScrapyEngine (引擎)  

        引擎相當於Scrapy的心臟,負責控制資料在各元件之間流動,並在相應動作發生時觸發事件

    Scheduler (排程器)

        引擎將要處理的request交給排程器排隊等候,等待引擎呼叫後返回request

    Downloader (下載器)

        下載器負責獲取頁面資料,返回response響應給引擎,而後給Spider

    Downloader(下載器中介軟體)

        下載器中介軟體位於下載器和引擎之間,處理Downloader返回給引擎的response,通過自定義程式碼來擴充套件功能

    Spider Middlewares (Spider中介軟體)

        Spider中介軟體位於Spider和引擎之間,處理Spider的輸入response和輸出Item和requests,通過自定義程式碼

        來擴充套件功能

    Spider (蜘蛛)

        Spider是Scrapy使用者編寫的用於分析和處理Response並返回Item或額外跟進的Url的類,每個Spider負責處

        理一個(或一些)特定的網站

    ItemPipeline (管道)

        Item Pipeline負責處理被spider提取出來的item.典型的處理有清理、 驗證及持久化(例如存取到資料中)。

Scrapy執行流程: 

1.引擎訪問spider,spider執行,執行start_request返回需要處理的請求request交給引擎

2.引擎將request交給排程器secheduler排隊等待呼叫

3.排程器將request請求交給引擎,引擎將request交給下載器Downloader,在Internet進行下載,後返回response給引擎

4.引擎判斷是response將其交給Spider蜘蛛進行解析返回Item和requests給引擎

5.如果是Item,引擎將item交給管道piplines進行儲存等操作,是request的話。同樣交給secheduler處理

6.在item中如果發現url,也會返回request給引擎,再交給排程器處理

7.然後當下一個請求要處理的時候,再從頭開始依次執行

下面開始用程式碼簡單的瞭解一下Scrapy:

首先在命令列裡打一些命令(前提是下載好所需要的環境)

第一步:建立專案 scrapy startproject 專案名 然後cd 專案名目錄裡

第二步:建立蜘蛛 scrapy genspider 蜘蛛名 要爬取的路徑

這裡我們就將蜘蛛建立成功了。然後用idea工具開啟專案

一。首先。編寫我們自定義的蜘蛛類kgcSpider.py。如下:


二。下面編寫Items.py,封裝結構化資料


三。接著編寫管道,pipline.py。管道負責接收Item並決定,Item是否刪除繼續或不再處理

class KgcPipeline(object):
    def open_spider(self,spider):
        '''
        當蜘蛛啟動時自動執行
        :param spider:
        :return:
        '''
        self.file=open('kgc.csv','w',encoding='utf8') #開啟檔案,將資料寫入檔案中
    def close_spider(self,spider):
        '''
        當蜘蛛啟完成工作並關閉時執行
        :param spider:
        :return:
        '''
        self.file.close()
    def process_item(self, item, spider):
        '''
        蜘蛛每yield一個item,這個方法執行一次
        :param item:
        :param spider:
        :return:
        '''
        line=item['title']+","+item['price']+','+item['personNum']+"\n"
        self.file.write(line)
        return item

PS:在使用ItemPipline之前必須啟用管道,到settings.py裡將下面這行註釋去掉


四。由於要爬取圖片。我們要使用圖片管道所,以在settings.py裡進行設定

在ITEM_PIPELINES中新增 'scrapy.pipelines.images.ImagesPipeline':1,

啟用圖片管道


然後再其他地方加上下面這句來設定圖片的路徑:

IMAGES_STORE = '/home/hadoop/IdeaProjects/kgc/images'

五。最後。用scrapy crawl 蜘蛛名 來執行蜘蛛.

或者使用cmdline模組的execute來執行


神奇的事情就發生了