当条件发生时,python scrapy停止scrapy

时间:2014-01-16 18:09:34

标签: python python-2.7 scrapy

我想从网站上提取所有数据。

我正在使用scrapy 0.20.2

我的代码是

class MySpider(CrawlSpider):
    start_urls = ['TheWebsite']
    rules = [Rule(SgmlLinkExtractor(allow=['/?page=\d+']), 'parse')]

    def parse(self, response):
        sites = sel.xpath('MyXPath')
        for site in sites:
            if condition < 8:
                yield Request(Link, meta = {'date': Date},\
                   callback = self.MyFunction)
            else:
                # Code to stop scrapy goes here.

抓取工具会搜索具有以下语法的网址中的所有数据:

Mywebsite?page=INTEGER

但是当发生特定情况时,我想停止抓取。在我的代码中,我希望在else发生时执行此操作。怎么样?

2 个答案:

答案 0 :(得分:1)

要退出for循环,请使用break

for site in sites:
    if condition < 8:
        # ...
    else:
        break

这会使您超出for循环,因此退出parse。如果您需要重新发送值,而不是隐式return None,则可以return代替break,这也将退出该函数。 break还允许您在函数中包含更多代码:

for ...:
    if something:
        break
# do something else before finishing

答案 1 :(得分:0)

使用break终止for循环或使用return语句离开该功能。

for site in sites:
    if condition < 8:
        yield Request(Link, meta={'date': Date}, callback = self.MyFunction)
    else:
        break