一.介紹:
Scrapy是一個純Python編寫,爲了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
二.環境搭建:
1. scrapy需要安裝第三方庫文件,lxml和Twisted
2. 下載地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
3.下載好文件之後,在DOS命令下pip install 文件的位置(lxml,twisted)安裝。
安裝完成就可以安裝: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來運行
神奇的事情就發生了