Scrapy架構(gòu)圖(綠線是數(shù)據(jù)流向)
Scrapy Engine(引擎)
: 負(fù)責(zé)Spider们陆、ItemPipeline餐曹、Downloader摆屯、Scheduler中間的通訊馆纳,信號诗良、數(shù)據(jù)傳遞等。
Scheduler(調(diào)度器)
: 它負(fù)責(zé)接受引擎發(fā)送過來的Request請求鲁驶,并按照一定的方式進(jìn)行整理排列鉴裹,入隊,當(dāng)引擎需要時钥弯,交還給引擎径荔。
Downloader(下載器)
:負(fù)責(zé)下載Scrapy Engine(引擎)發(fā)送的所有Requests請求,并將其獲取到的Responses交還給Scrapy Engine(引擎)寿羞,由引擎交給Spider來處理猖凛,
Spider(爬蟲)
:它負(fù)責(zé)處理所有Responses,從中分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù)绪穆,并將需要跟進(jìn)的URL提交給引擎辨泳,再次進(jìn)入Scheduler(調(diào)度器).
Item Pipeline(管道)
:它負(fù)責(zé)處理Spider中獲取到的Item虱岂,并進(jìn)行進(jìn)行后期處理(詳細(xì)分析、過濾菠红、存儲等)的地方第岖。
Downloader Middlewares(下載中間件)
:你可以當(dāng)作是一個可以自定義擴(kuò)展下載功能的組件。
Spider Middlewares(Spider中間件)
:你可以理解為是一個可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses;和從Spider出去的Requests)
制作 Scrapy 爬蟲 一共需要4步:
1.新建項目 (scrapy startproject xxx):新建一個新的爬蟲項目
scrapy startproject mySpider
scrapy.cfg: 項目的配置文件试溯。
mySpider/: 項目的Python模塊蔑滓,將會從這里引用代碼。
mySpider/items.py: 項目的目標(biāo)文件遇绞。
mySpider/pipelines.py: 項目的管道文件键袱。
mySpider/settings.py: 項目的設(shè)置文件。
mySpider/spiders/: 存儲爬蟲代碼目錄摹闽。```
2.明確目標(biāo) (編寫items.py):明確你想要抓取的目標(biāo)
1.打開 mySpider 目錄下的 items.py蹄咖。
2.Item 定義結(jié)構(gòu)化數(shù)據(jù)字段,用來保存爬取到的數(shù)據(jù)付鹿,有點像 Python 中的 dict澜汤,但是提供了一些額外的保護(hù)減少錯誤。
3.可以通過創(chuàng)建一個 scrapy.Item 類舵匾, 并且定義類型為 scrapy.Field 的類屬性來定義一個 Item(可以理解成類似于 ORM 的映射關(guān)系)
import scrapy
class ItcastItem(scrapy.Item):
name = scrapy.Field()
title = scrapy.Field()
info = scrapy.Field()
3.制作爬蟲 (spiders/xxspider.py):制作爬蟲開始爬取網(wǎng)頁
(1) 在當(dāng)前目錄下輸入命令俊抵,將在mySpider/spider目錄下創(chuàng)建一個名為itcast的爬蟲,并指定爬取域的范圍:
scrapy genspider YingShi "66ys.tv"
YingShi 項目名字
66ys.tv 網(wǎng)址域名
(2) 打開 mySpider/spider目錄里的 itcast.py.然后增加代碼
4.存儲內(nèi)容 (pipelines.py):
scrapy保存信息的最簡單的方法主要有四種坐梯,-o 輸出指定格式的文件徽诲,命令如下:
scrapy crawl itcast -o teachers.json
json lines格式,默認(rèn)為Unicode編碼
scrapy crawl itcast -o teachers.jsonl
csv 逗號表達(dá)式烛缔,可用Excel打開
scrapy crawl itcast -o teachers.csv
xml格式
scrapy crawl itcast -o teachers.xml