是否有一种特殊的机制可以强制scrapy打印出所有python异常/ stacktrace。
我犯了一个简单的错误,导致list属性错误导致AttributeError在日志中没有完整显示 出现的是:
2015-11-15 22:13:50 [scrapy] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 264,
'downloader/request_count': 1,
'downloader/request_method_count/GET': 1,
'downloader/response_bytes': 40342,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2015, 11, 15, 22, 13, 50, 860480),
'log_count/CRITICAL': 1,
'log_count/DEBUG': 1,
'log_count/INFO': 1,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'spider_exceptions/AttributeError': 1,
'start_time': datetime.datetime(2015, 11, 15, 22, 13, 49, 222371)}
因此它显示了AttributeError计数为1,但没有告诉我在哪里以及如何,我不得不在代码中手动放置ipdb.set_trace()以找出它出错的地方。 Scrapy本身继续执行其他线程而不打印任何东西
ipdb>
AttributeError: "'list' object has no attribute 'match'"
> /Users/username/Programming/regent/regentscraper/spiders/regent_spider.py(139)request_listing_detail_pages_from_listing_id_list()
138 volatile_props = ListingScanVolatilePropertiesItem()
--> 139 volatile_props['position_in_search'] = list_of_listing_ids.match(listing_id) + rank_of_first_item_in_page
140
# -*- coding: utf-8 -*-
# Scrapy settings for regentscraper project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# http://doc.scrapy.org/en/latest/topics/settings.html
# http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
# http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html
import sys
import os
import django
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__name__), os.pardir)))
print sys.path
os.environ['DJANGO_SETTINGS_MODULE'] = 'regent.settings'
django.setup() #new for Django 1.8
BOT_NAME = 'regentscraper'
SPIDER_MODULES = ['regentscraper.spiders']
NEWSPIDER_MODULE = 'regentscraper.spiders'
ITEM_PIPELINES = {
'regentscraper.pipelines.ListingScanPipeline': 300,
}
答案 0 :(得分:1)
我遇到了与上述相同的事件。 我的环境中使用了以下版本:
我通过在scn中加载的dnango设置中添加“LOGGING_CONFIG = None”解决了这个问题。 我创建了一个新的django设置文件作为settings_scrapy,其中包含以下内容:
<强> mysite.settings_scrapy 强>
try:
from mysite.settings import *
LOGGING_CONFIG = None
except ImportError:
pass
然后,设置文件在scrapy的设置文件中加载为:
import sys
import os
import django
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings_scrapy'
django.setup()
之后,对蜘蛛和管道中的异常进行了堆栈跟踪。
<强>参考强>
https://docs.djangoproject.com/en/1.11/topics/logging/#disabling-logging-configuration
答案 1 :(得分:0)
到目前为止,我可以在实际的蜘蛛中找到堆栈跟踪的海洋,看起来你正试图连接成一个定义的项目?
我恳请你们将蜘蛛完全冷敷以及你的物品包括在内,以帮助解决这个问题,虽然这是两年前所以我确信你已经开始或想出来了
由于堆栈跟踪注释'“list”对象没有属性“匹配”',这是一个错误,因为您正在使用已经是python中的逻辑的列表,如您所知。 。似乎是罪魁祸首,因为堆栈Trace告诉你列表没有属性名称匹配ergo它使用列表函数sooo是啊....
也可能是你的完整蜘蛛代码,你必须找到你的项目值,然后重新定义为一个列表?
为了更好地衡量,在使用单词列表时,除非使用其功能强大的逻辑,否则请将其命名为“列出”除了...列表中的其他内容吗?