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來運行


神奇的事情就發生了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章