调试蜘蛛

本文档解释了最常用的调试蜘蛛技术。 请考虑以下刮草蜘蛛:

基本上这是一个简单的蜘蛛,它分析两页的项目(start_urls)。项目还有一个附加信息的详细信息页面,因此我们使用请求的元功能来传递部分填充的项目。

解析命令

检查蜘蛛输出的最基本方法是使用parse命令。它允许在方法级别检查蜘蛛的不同部分的行为。它具有灵活且易于使用的优点,但不允许在方法内调试代码。

为了查看从特定网址中删除的项目:

$ scrapy parse --spider = myspider -c parse_item -d 2 <item_url>

[... scrapy log lines crawling example.com spider ...]

>>>状态深度2 <<<

#Scraped Items ----------------------------------------------- -------------

[{'url':<item_url>}]

# 要求 - - - - - - - - - - - - - - - - - - - - - - - - -----------------

[]

使用--verbose或-v选项,我们可以看到每个深度级别的状态:

$ scrapy parse --spider = myspider -c parse_item -d 2 -v <item_url>

[... scrapy log lines crawling example.com spider ...]

>>>深度:1 <<<

#Scraped Items ----------------------------------------------- -------------

[]

# 要求 - - - - - - - - - - - - - - - - - - - - - - - - -----------------

[<GET item_details_url>]

>>>深度:2 <<<

#Scraped Items ----------------------------------------------- -------------

[{'url':<item_url>}]

# 要求 - - - - - - - - - - - - - - - - - - - - - - - - -----------------

[]

检查从单个start_url中删除的项目,也可以轻松实现:

$ scrapy parse --spider = myspider -d 3'http://example.com/page1'

刮壳

虽然解析命令对于检查蜘蛛的行为非常有用,但除了显示接收到的响应和输出之外,检查回调中发生的情况几乎没有帮助。当parse_details有时收到没有项目时如何调试情况?

幸运的是,在这种情况下,shell是你的面包和黄油(请参阅从蜘蛛调用shell以检查响应):

从scrapy.shell导入inspect_response

def parse_details(self,response):

item = response.meta.get('item',None)

如果项目:

    #填充更多\`item\`字段

    归还物品

其他:

    inspect\_response(回应,自我)

另请参阅:从spider调用shell以检查响应。

在浏览器中打开

有时你只想看看浏览器中某个响应的样子,可以使用open_in_browser函数。这是一个如何使用它的例子:

从scrapy.utils.response导入open_in_browser

def parse_details(self,response):

如果“项目名称”没有响应.body:

    open\_in\_browser(响应)

open_in_browser将打开一个浏览器,并在此处使用Scrapy收到的响应,调整基本标签,使图像和样式正确显示。

记录

日志记录是获取有关蜘蛛运行信息的另一个有用选项。虽然不是那么方便,但是它的优点在于,如果需要,日志将在以后的所有运行中可用:

def parse_details(self,response):

item = response.meta.get('item',None)

如果项目:

    #填充更多\`item\`字段

    归还物品

其他:

    self.logger.warning('没有收到%s'的项目,response.url)

有关详细信息,请参阅日志记录部分。

results matching ""

    No results matching ""