【问题标题】:How do define which spider the scrapy shell uses?如何定义 scrapy shell 使用的蜘蛛?
【发布时间】:2011-07-02 21:20:11
【问题描述】:

我正在尝试使用 Scrapy shell 测试一些 XPath,但它似乎在调用我不完整的蜘蛛模块来进行抓取,这不是我想要的。有没有办法定义哪个蜘蛛scrapy 使用它的外壳?更何况,Scrapy 为什么要这么做?它不应该知道蜘蛛还没有准备好使用吗?这就是我使用shell的原因吗?否则我会使用

scrapy crawl spider_name

如果我想使用特定的蜘蛛。

编辑:在查看了 Spider 文档之后,我找到了以下关于 shell 中使用的蜘蛛实例的描述。

spider - 已知处理 URL 的 Spider,如果没有为当前 URL 找到蜘蛛,则为 BaseSpider 对象

这意味着,scrapy 已经将 URL 与我的蜘蛛关联起来,并且正在使用它而不是 BaseSpider。不幸的是,我的蜘蛛还没有准备好进行测试,那么有没有办法强制它使用 BaseSpider 作为外壳呢?

【问题讨论】:

  • 如果您正在尝试调试您的蜘蛛,您可能希望查看文档的这一部分:doc.scrapy.org/topics/…
  • 我不是在调试我的蜘蛛,而是调试一个 XPath。这是使用 Scrapy shell 完成的,但 shell 似乎正在创建我定义的蜘蛛的实例,而不是默认的 BaseSpider 类。
  • @ThomasK 网址现在不可用:(
  • @Weixiao.Fan:他们似乎对文档进行了一些重组。试试这个:doc.scrapy.org/en/0.12/topics/…

标签: python scrapy web-crawler


【解决方案1】:

Scrapy 根据allowed_domains 属性自动选择蜘蛛。如果给定域有多个蜘蛛,Scrapy 将使用BaseSpider

但是,它只是一个 python shell,你可以实例化任何你想要的蜘蛛。

>>> 从 myproject.spiders.myspider 导入 MySpider >>> 蜘蛛 = MySpider() >>> spider.parse_item(响应)

编辑:作为使用您的蜘蛛的解决方法,您可以设置allowed_domains = []

【讨论】:

    【解决方案2】:

    shell isn't intended to be used with a spider:

    您可以尝试调试您的抓取 代码非常快,无需 运行蜘蛛。 ... [It] 用于测试 XPath 表达式。

    【讨论】:

    • 我明白,这就是我想要做的,但它会创建一个我定义的蜘蛛类的实例。
    【解决方案3】:

    你应该修改你的设置文件来改变DEFAULT_ITEM_CLASS

    根据文档:

    将使用的默认类 用于实例化 废壳。

    【讨论】:

    • 虽然这不是正确的答案,但在 settings.py 中更改 SPIDER_MODULES = [] 就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多