爬虫蜘蛛的运行与调试(43)python Scrapy教程1.51以上版本

本文档介绍了调试蜘蛛的最常用技术。考虑下面的scrapy蜘蛛:

import scrapy  from myproject.items import MyItem    class MySpider(scrapy.Spider):      name = 'myspider'      start_urls = (          'http://example.com/page1',          'http://example.com/page2',          )        def parse(self, response):          # collect `item_urls`          for item_url in item_urls:              yield scrapy.Request(item_url, self.parse_item)        def parse_item(self, response):          item = MyItem()          # populate `item` fields          # and extract item_details_url          yield scrapy.Request(item_details_url, self.parse_details, meta={'item': item})        def parse_details(self, response):          item = response.meta['item']          # populate more `item` fields          return item

 

基本上这是一个简单的蜘蛛,它解析两页的项目(start_urls)。项目还具有与附加信息的详细信息页面,所以我们使用meta的功能,Request通过一个部分填充的项目。

解析命令

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

要查看从特定网址抓取的项目,请执行以下操作:

$ scrapy parse --spider=myspider -c parse_item -d 2 <item_url>  [ ... scrapy log lines crawling example.com spider ... ]    >>> STATUS DEPTH LEVEL 2 <<<  # Scraped Items  ------------------------------------------------------------  [{'url': <item_url>}]    # Requests  -----------------------------------------------------------------  []

 

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

$ scrapy parse --spider=myspider -c parse_item -d 2 -v <item_url>  [ ... scrapy log lines crawling example.com spider ... ]    >>> DEPTH LEVEL: 1 <<<  # Scraped Items  ------------------------------------------------------------  []    # Requests  -----------------------------------------------------------------  [<GET item_details_url>]      >>> DEPTH LEVEL: 2 <<<  # Scraped Items  ------------------------------------------------------------  [{'url': <item_url>}]    # Requests  -----------------------------------------------------------------  []

 

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

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

 

Scrapy壳牌

虽然该parse命令对于检查蜘蛛的行为非常有用,但除了显示收到的响应和输出之外,检查回调内部发生的事情也没什么帮助。如何在parse_details有时没有收到项目的情况下调试情况 ?

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

from scrapy.shell import inspect_response    def parse_details(self, response):      item = response.meta.get('item', None)      if item:          # populate more `item` fields          return item      else:          inspect_response(response, self)

 

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

在浏览器中打开

有时您只想查看某个响应在浏览器中的外观,您可以使用该open_in_browser功能。以下是如何使用它的示例:

from scrapy.utils.response import open_in_browser    def parse_details(self, response):      if "item name" not in response.body:          open_in_browser(response)

 

open_in_browser将打开一个浏览器,其中包含Scrapy在此时收到的响应,调整基本标签以便正确显示图像和样式。

记录

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

def parse_details(self, response):      item = response.meta.get('item', None)      if item:          # populate more `item` fields          return item      else:          self.logger.warning('No item received for %s', response.url)

 

有关更多信息,请查看“ 日志记录”部分。

本文目录导航

  • 解析命令
  • Scrapy壳牌
  • 在浏览器中打开
  • 记录
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。
超哥软件库 » 爬虫蜘蛛的运行与调试(43)python Scrapy教程1.51以上版本