Scrapy(二)- 自定義擴(kuò)展纠吴,配置文件詳解

Scrapy 自定義擴(kuò)展

自定義擴(kuò)展時(shí)茬腿,利用信號(hào)在指定位置注冊(cè)指定操作。

新建custom_extensions.py

from scrapy import signals
class MyExtend:

    def __init__(self,crawler):
        self.crawler = crawler
        # 在指定信號(hào)上注冊(cè)操作
        crawler.signals.connect(self.start, signals.engine_started)
        crawler.signals.connect(self.close, signals.spider_closed)

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler)

    def start(self):
        print('signals.engine_started.start')

    def close(self):
        print('signals.spider_closed.close')

最后需要在settings.py里的修改EXTENSIONS:

EXTENSIONS = {
   'scrapy_learn.custom_extensions.MyExtend': 300,
}

可以用的信號(hào)

engine_started = object()  # 引擎啟動(dòng)時(shí)
engine_stopped = object()  # 引擎停止時(shí)
spider_opened = object()   # 爬蟲啟動(dòng)時(shí)
spider_idle = object()     # 爬蟲閑置時(shí)
spider_closed = object()   # 爬蟲停止時(shí)
spider_error = object()    # 爬蟲錯(cuò)誤時(shí)
request_scheduled = object() # 調(diào)度器調(diào)度時(shí)
request_dropped = object() # 調(diào)取器丟棄時(shí)
response_received = object() # 得到response時(shí)
response_downloaded = object() # response下載時(shí)
item_scraped = object()    # yield item 時(shí)
item_dropped = object()    # drop item 時(shí)

有了這些信號(hào)化戳,就可以在指定時(shí)刻自定義某些操作单料。


配置文件(settings.py)詳解

# 1. 爬蟲名稱埋凯,不是spider,name里的名稱,而是整個(gè)爬蟲項(xiàng)目的名稱扫尖,
# 很多網(wǎng)站都會(huì)有自己的爬蟲(百度白对,谷歌等都有)。
BOT_NAME = 'scrapy_learn'

# 2. 爬蟲應(yīng)用路徑
SPIDER_MODULES = ['scrapy_learn.spiders']
NEWSPIDER_MODULE = 'scrapy_learn.spiders'

# 3. 客戶端 user-agent請(qǐng)求頭换怖,常偽造成瀏覽器
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36'

# 4. 是否遵循爬蟲規(guī)則甩恼,正經(jīng)的要遵循,但我們搞爬蟲都不正經(jīng)
ROBOTSTXT_OBEY = False

# 5. 并發(fā)請(qǐng)求數(shù)沉颂,默認(rèn)16
CONCURRENT_REQUESTS = 32

# 6. 延遲下載秒數(shù)条摸,默認(rèn)0
DOWNLOAD_DELAY = 3

# 7. 單域名訪問并發(fā)數(shù),并且延遲下次秒數(shù)也應(yīng)用在每個(gè)域名铸屉,比CONCURRENT_REQUESTS更加細(xì)致的并發(fā)
CONCURRENT_REQUESTS_PER_DOMAIN = 16

# 單IP訪問并發(fā)數(shù)钉蒲,如果有值則忽略:CONCURRENT_REQUESTS_PER_DOMAIN,
# 并且延遲下次秒數(shù)也應(yīng)用在每個(gè)IP
CONCURRENT_REQUESTS_PER_IP = 16

# 8. 是否支持cookie彻坛,cookiejar進(jìn)行操作cookie顷啼,默認(rèn)支持
COOKIES_ENABLED = True
# 是否是調(diào)試模式,調(diào)試模式下每次得到cookie都會(huì)打印
COOKIES_DEBUG = True

# 9. Telnet用于查看當(dāng)前爬蟲的信息(爬了多少小压,還剩多少等)线梗,操作爬蟲(暫停等)等...椰于,
# cmd中:telnet 127.0.0.1 6023(6023是專門給爬蟲用的端口)
# telnet 命令
# est() 檢查引擎狀態(tài)
# engine.pass 暫停引擎怠益, 還有很多命令,在網(wǎng)上可搜
TELNETCONSOLE_ENABLED = True

# 10. 默認(rèn)請(qǐng)求頭
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}

# 中間件瘾婿,需要詳細(xì)講蜻牢,另寫
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    'scrapy_learn.middlewares.ScrapyLearnSpiderMiddleware': 543,
#}
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    'scrapy_learn.middlewares.ScrapyLearnDownloaderMiddleware': 543,
#}

# 11. 定義pipeline處理請(qǐng)求
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'scrapy_learn.pipelines.ScrapyLearnPipeline': 300,
}

# 12. 自定義擴(kuò)展,基于信號(hào)進(jìn)行調(diào)用
# See https://doc.scrapy.org/en/latest/topics/extensions.html
EXTENSIONS = {
   # 'scrapy.extensions.telnet.TelnetConsole': None,
}

# 自動(dòng)限速算法(智能請(qǐng)求)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
AUTOTHROTTLE_ENABLED = True
# 第一次下載延遲幾秒
AUTOTHROTTLE_START_DELAY = 5
# 最大延遲
AUTOTHROTTLE_MAX_DELAY = 60
# 波動(dòng)范圍偏陪,不用管
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False

# 做緩存的抢呆,以后說
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

# 13. 爬蟲允許的最大深度,可以通過meta查看當(dāng)前深度笛谦;0表示無深度
DEPTH_LIMIT = 4

# DEPTH_PRIORITY只能設(shè)置為0或1抱虐,
# 0深度優(yōu)先,一下找到底饥脑,然后再找其他的
# 1廣度優(yōu)先恳邀,一層一層找
# 他們內(nèi)部的原理就是根據(jù)response.meta里的depth(層數(shù))來找。
# DEPTH_PRIORITY = 0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灶轰,一起剝皮案震驚了整個(gè)濱河市谣沸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笋颤,老刑警劉巖乳附,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赋除,警方通過查閱死者的電腦和手機(jī)阱缓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來举农,“玉大人茬祷,你說我怎么就攤上這事〔⒒龋” “怎么了祭犯?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滚停。 經(jīng)常有香客問我沃粗,道長(zhǎng),這世上最難降的妖魔是什么键畴? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任最盅,我火速辦了婚禮,結(jié)果婚禮上起惕,老公的妹妹穿的比我還像新娘涡贱。我一直安慰自己,他們只是感情好惹想,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布问词。 她就那樣靜靜地躺著,像睡著了一般嘀粱。 火紅的嫁衣襯著肌膚如雪激挪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天锋叨,我揣著相機(jī)與錄音垄分,去河邊找鬼。 笑死娃磺,一個(gè)胖子當(dāng)著我的面吹牛薄湿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偷卧,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼豺瘤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了涯冠?” 一聲冷哼從身側(cè)響起炉奴,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛇更,沒想到半個(gè)月后瞻赶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赛糟,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年砸逊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了璧南。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡师逸,死狀恐怖司倚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情篓像,我是刑警寧澤动知,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站员辩,受9級(jí)特大地震影響盒粮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奠滑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一丹皱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宋税,春花似錦摊崭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至淆攻,卻和暖如春阔墩,著一層夾襖步出監(jiān)牢的瞬間嘿架,已是汗流浹背瓶珊。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耸彪,地道東北人伞芹。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蝉娜,于是被迫代替她去往敵國(guó)和親唱较。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容