我有一個看起來像這樣的 Scrapy 腳本:
主檔案
import os
import argparse
import datetime
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from spiders.mySpider import MySpider
parser = argparse.ArgumentParser(description='My Scrapper')
parser.add_argument('-v',
'--verbose',
help='Verbose mode',
action='store_true')
parser.add_argument('-t',
'--type',
help='Type',
type=str)
args = parser.parse_args()
if args.type != 'expected':
parser.error("Wrong type")
if __name__ == "__main__":
settings = get_project_settings()
settings['LOG_ENABLED'] = args.verbose
process = CrawlerProcess(settings=settings)
process.crawl(MySpider, type_arg=args.type)
process.start()
我的蜘蛛.py
from scrapy import Spider
from scrapy.http import Request, FormRequest
import scrapy.exceptions as ScrapyExceptions
class MySpider(Spider):
name = 'MyScrapper'
allowed_domains = ['www.webtoscrape.com']
start_urls = ['http://www.webtoscrape.com/path/to/page.html']
def parse(self, response):
# ...
# Some logic
# ...
if condition:
raise ScrapyExceptions.UsageError(reason="Wrong argument")
當我parser.error()對main.py檔案提出 a 時,我的行程按預期回傳非零退出代碼。但是,當我scrapy.exceptions.UsageError()在mySpider.py檔案上提出 a 時,我收到一個 0 退出代碼,因此我運行我的腳本的 Jenkins 管道步驟認為它已經成功并繼續執行管道。我用python3 main.py --type my_type命令運行我的腳本。
為什么腳本執行沒有注意到mySpider.py模塊上引發的使用錯誤應該回傳非零退出代碼?
uj5u.com熱心網友回復:
經過幾個小時的嘗試,找到了這個執行緒。問題是當抓取失敗時,Scrapy 不使用非零退出代碼。我設法通過使用 Crawler stats collection來解決此問題。
主檔案
if __name__ == "__main__":
settings = get_project_settings()
settings['LOG_ENABLED'] = args.verbose
process = CrawlerProcess(settings=settings)
process.crawl(MySpider, type_arg=args.type)
crawler = list(process.crawlers)[0]
process.start()
failed = crawler.stats.get_value('custom/failed_job')
if failed:
sys.exit(1)
我的蜘蛛.py
class MySpider(Spider):
name = 'MyScrapper'
allowed_domains = ['www.webtoscrape.com']
start_urls = ['http://www.webtoscrape.com/path/to/page.html']
def parse(self, response):
# ...
# Some logic
# ...
if condition:
self.crawler.stats.set_value('custom/failed_job', 'True')
raise ScrapyExceptions.UsageError(reason="Wrong argument")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/426243.html
