Scrapy

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)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本主題主要是scrapy入門,包含內(nèi)容如下:??1. Scrapy框架環(huán)境搭建;??2. 理解scrapy框架結(jié)...
    楊強(qiáng)AT南京閱讀 1,526評(píng)論 0 10
  • 說起寫爬蟲,大多數(shù)第一時(shí)間想到的就是python了。python語法簡潔明了,加上及其豐富好用的庫,用它來寫爬蟲有...
    瘋狂的哈丘閱讀 8,347評(píng)論 1 15
  • scrapy框架Scrapy是用純Python實(shí)現(xiàn)一個(gè)為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,用途非常廣...
    糖炒栗子_01c5閱讀 2,998評(píng)論 0 2
  • 文章裡出現(xiàn)的人名與時(shí)空順序都經(jīng)過調(diào)整,有出現(xiàn)家屬的照片都會(huì)霧化處理,雖然影響了整個(gè)畫面,不過我得保護(hù)客戶的隱私。來...
    10萬次快門之後閱讀 204評(píng)論 0 0
  • 全民健身挑戰(zhàn)日
    草草丹丹閱讀 163評(píng)論 0 0

友情鏈接更多精彩內(nèi)容