Scrapy:停止爬行一个域,如果条件满足

问题描述:

跳到下一个我喜欢写BFO宽履带,其执行以下操作:Scrapy:停止爬行一个域,如果条件满足

  • 开始第一URL
  • 试图找到链接到Impressum RegEx: '.*mpressum.*'(翻译:印记)
  • 检查是否符合某些条件。在我的情况下,如果邮政编码在一定范围内
  • 如果满足条件继续爬行页面
  • 如果不符合条件,请停止对该域进行爬网以将其从未来爬网列入黑名单。
  • 与未来域继续

我怎样才能实现Scrapy这种行为?

基本上我这样做是因为我想回答以下问题:
德国的哪些域名在某个邮政编码范围内?

我的代码很混乱,因为我现在正在学习Scrapy。

+0

我固定格式错误和扩展的问题。 – zx485

+0

即使你的代码是一团糟 - 通过编辑分享给我们的问题将是有益的。 – zx485

您可以在刮刀中使用allowed_domains变量。当条件满足时,您只需从allowed_domains中删除该域。这不会取消已经排队的下载,我相信但不会让你排队新的。

PS:请参阅https://doc.scrapy.org/en/latest/topics/spider-middleware.html#scrapy.spidermiddlewares.offsite.OffsiteMiddleware

首先建立在你的蜘蛛变量blocked_domains

然后开始填充blocked_domains与您不想在抓取过程中抓取的域。

创建一个download middleware

和内部

def process_request(self, request, spider): 

    domain = request.url # extract domain of url from request.url 
    if domain in spider.blocked_domains: 
      return None # do not process request. 
    else: 
      return request # process request 
+0

我做过了,但是我没有明白,现在它什么也没做。 你可以发布最小的可运行代码吗? – amthenia

+0

您是否创建了中间件?你是否启用它?请发布您的完整项目代码,我会很乐意帮助你。 – Umair

+0

这也是我的第一个Python代码。我的想法可能不那么令人困惑。之后我发布我的代码。与中间件的部分是必不可少的,我写的东西有点微不足道。 – amthenia