Scrapy 框架
Scrapy是用純Python實(shí)現(xiàn)一個(gè)為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,用途非常廣泛。
異步:調(diào)用在發(fā)出之后,這個(gè)調(diào)用就直接返回,不管有無結(jié)果
非阻塞:關(guān)注的是程序在等待調(diào)用結(jié)果(消息,返回值)時(shí)的狀態(tài),指在不能立刻得到結(jié)果之前,該調(diào)用不會(huì)阻塞當(dāng)前線程。

流程圖
Scrapy Engine(引擎): 負(fù)責(zé)Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號(hào)、數(shù)據(jù)傳遞等。
Scheduler(調(diào)度器): 它負(fù)責(zé)接受引擎發(fā)送過來的Request請求,并按照一定的方式進(jìn)行整理排列,入隊(duì),當(dāng)引擎需要時(shí),交還給引擎。
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ì)分析、過濾、存儲(chǔ)等)的地方.
Downloader Middlewares(下載中間件):可以自定義擴(kuò)展下載功能的組件(代理、cokies等)。
Spider Middlewares(Spider中間件):可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses;和從Spider出去的Requests)。
各文件作用
spiders:爬蟲文件,提取數(shù)據(jù)和URL
items.py:定義要獲取的目標(biāo)
middleware.py:爬蟲中間件和下載中間件
pipelines.py:管道文件
settings.py:設(shè)置文件,配置信息
scrapy.cfg:配置文件
yield:?的就是一個(gè)生成器,帶有yeild的函數(shù)遇到y(tǒng)eild的時(shí)候就返回一個(gè)迭代值,下次迭代時(shí),代碼從 yield 的下一條語句繼續(xù)執(zhí)行,而函數(shù)的本地變量看起來和上次中斷執(zhí)行前是完全一樣的,于是函數(shù)繼續(xù)執(zhí)行,直到再次遇到 yield。
創(chuàng)建爬蟲項(xiàng)目
scrapy startproject 項(xiàng)目名
新建爬蟲文件
scrapy genspider 項(xiàng)目名 項(xiàng)目的域
數(shù)據(jù)持久化
存入MySQL數(shù)據(jù)庫或MongoDB數(shù)據(jù)庫,做數(shù)據(jù)持久化處理
在pipelines.py文件中,進(jìn)行數(shù)據(jù)的清洗和持久化,并在settings.py文件中激活管道
Request相關(guān)參數(shù)介紹
url: 就是需要請求,并進(jìn)行下一步處理的url
callback: 指定該請求返回的Response
headers: 請求頭
cookies: cookies,模擬用戶登錄需要指定用戶的cookies,字典dict型
meta: 比較常用,在不同的請求之間傳遞數(shù)據(jù)使用的。字典dict型
Response相關(guān)參數(shù)介紹
status: 響應(yīng)碼
url:響應(yīng)url
self.request(request對象)
self.headers(響應(yīng)頭)
創(chuàng)建爬蟲文件
scrapy genspider -t crawl 爬蟲文件 域名
在rules中包含一個(gè)或多個(gè)Rule對象,如果多個(gè)rule匹配了相同的鏈接,第一個(gè)會(huì)被使用。
參數(shù)
link_extractor:是一個(gè)Link Extractor對象,用于定義需要提取的鏈接。
callback: 回調(diào)函數(shù)
follow:是否跟進(jìn),follow 默認(rèn)設(shè)置為True
process_links:指定spider中哪個(gè)的函數(shù)將會(huì)被調(diào)用,該方法主要用來過濾。
process_request:指定處理函數(shù),根據(jù)該Rule提取到的每個(gè)Request時(shí),該函數(shù)將會(huì)被調(diào)用,可以對Request進(jìn)行處理,該函數(shù)必須返回Request或者None
通常防止爬蟲被反:
動(dòng)態(tài)設(shè)置User-Agent(隨機(jī)切換User-Agent,模擬不同用戶的瀏覽器信息)
禁用Cookies(前提是爬取的網(wǎng)站不需要cookies參數(shù))
使用cookies池
自定義中間件
設(shè)置延遲下載(降低訪問網(wǎng)站的頻率)
使用IP代理地址池
爬蟲的持久化
scrapy crawl 爬蟲名稱 -s JOBDIR=crawls/爬蟲名稱
注意Cookies 的有效期,請求序列化
Settings.py 設(shè)置文件參數(shù)
爬蟲的文件路徑
SPIDER_MODULES = ['ziruproject.spiders']
NEWSPIDER_MODULE = 'ziruproject.spiders'
用戶代理,一般設(shè)置這個(gè)參數(shù)用來偽裝瀏覽器請求
USER_AGENT = ''
是否遵守ROBOT協(xié)議,為False時(shí),表示不遵守(默認(rèn)為True)
ROBOTSTXT_OBEY = True
Scrapy downloader(下載器) 處理的最大的并發(fā)請求數(shù)量,默認(rèn): 16
CONCURRENT_REQUESTS
下載延遲的秒數(shù),用來限制訪問的頻率,默認(rèn)為:0
DOWNLOAD_DELAY
每個(gè)域名下能夠被執(zhí)行的最大的并發(fā)請求數(shù)據(jù)量,默認(rèn)為:8
CONCURRENT_REQUESTS_PER_DOMAIN
是否要攜帶cookies,一般情況下,不是必須要攜帶cookies的請求,我們將這個(gè)參數(shù)設(shè)置為False,默認(rèn)為: True
COOKIES_ENABLED
查看請求是否攜帶cookies,追蹤cookies
True:表示追蹤,F(xiàn)alse 不追蹤,默認(rèn)為:False 不追蹤
COOKIES_DEBUG
設(shè)置默認(rèn)的請求頭
DEFAULT_REQUEST_HEADERS
爬蟲中間件
SPIDER_MIDDLEWARES
下載中間件
DOWNLOADER_MIDDLEWARES
我們可以在這個(gè)參數(shù)下自定義擴(kuò)展
EXTENSIONS
設(shè)置并激活管道文件,為了存儲(chǔ)數(shù)據(jù)使用,后面的數(shù)字表示優(yōu)先級(jí),數(shù)字越小,優(yōu)先級(jí)越高
ITEM_PIPELINES
下載器超時(shí)時(shí)間(單位: 秒)默認(rèn): 180
DOWNLOAD_TIMEOUT
自動(dòng)限速(AutoThrottle)擴(kuò)展
該擴(kuò)展能根據(jù)Scrapy服務(wù)器及您爬取的網(wǎng)站的負(fù)載自動(dòng)限制爬取速度。
數(shù)據(jù)緩存:
目的:用來將已經(jīng)發(fā)送的請求緩存下來,一遍后續(xù)使用
是否啟用緩存策略
HTTPCACHE_ENABLED = True
緩存超時(shí)時(shí)間
HTTPCACHE_EXPIRATION_SECS = 0
緩存保存路徑
?HTTPCACHE_DIR = 'httpcache'
緩存忽略的Http狀態(tài)碼
HTTPCACHE_IGNORE_HTTP_CODES = []
緩存存儲(chǔ)的插件
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
關(guān)于日志信息的設(shè)置
LOG_ENABLED? ? ? ? 默認(rèn): True
是否啟用logging。
LOG_ENCODING
log的最低級(jí)別??蛇x的級(jí)別有: CRITICAL、 ERROR、WARNING、INFO、DEBUG 。
- CRITICAL - 嚴(yán)重錯(cuò)誤(critical)
- ERROR - 一般錯(cuò)誤(regular errors)
- WARNING - 警告信息(warning messages)
- INFO - 一般信息(informational messages)
- DEBUG - 調(diào)試信息(debugging messages)
LOG_FILE
默認(rèn): None
logging輸出的文件名。如果為None,則使用標(biāo)準(zhǔn)錯(cuò)誤輸出(standard error)。
Logging使用
Scrapy提供了log功能,可以通過 logging 模塊使用。
可以修改配置文件settings.py
LOG_FILE = "TencentSpider.log"
LOG_LEVEL = "INFO"
作者:_奮斗努力
鏈接:http://www.itdecent.cn/p/33180870ee48
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。