调试蜘蛛
本文档解释了最常用的调试蜘蛛技术。 请考虑以下刮草蜘蛛:
基本上这是一个简单的蜘蛛,它分析两页的项目(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)
有关详细信息,请参阅日志记录部分。