Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 刮掉N件物品后停止刮擦_Python_Scrapy - Fatal编程技术网

Python 刮掉N件物品后停止刮擦

Python 刮掉N件物品后停止刮擦,python,scrapy,Python,Scrapy,我和Scrapy有麻烦。我需要的代码,将废掉多达1000个内部链接每个给定的网址。我的代码在命令行运行时可以工作,但爬行器不会停止,只会接收消息 我的代码如下: from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.item import Item, Field from scrapy.con

我和Scrapy有麻烦。我需要的代码,将废掉多达1000个内部链接每个给定的网址。我的代码在命令行运行时可以工作,但爬行器不会停止,只会接收消息

我的代码如下:

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.item import Item, Field
from scrapy.contrib.closespider import CloseSpider

class MyItem(Item):
    url= Field()

class MySpider(CrawlSpider):
    name = 'testspider1'
    allowed_domains = ['angieslist.com']
    start_urls = ['http://www.angieslist.com']

    rules = (Rule(SgmlLinkExtractor(), callback='parse_url', follow=True), )

    def parse_url(self, response):
        item = MyItem()
        item['url'] = response.url

        scrape_count = self.crawler.stats.get_value('item_scraped_count')
        print scrape_count

        limit = 10

        if scrape_count == limit:
            raise CloseSpider('Limit Reached')

        return item

我的问题是尝试在错误的位置应用close spider。这是一个需要在settings.py文件中设置的变量。当我在那里手动设置它,或者在命令行中将它设置为一个参数时,它起了作用(在N的10-20范围内停止)

settings.py:

BOT_NAME = 'internal_links'
SPIDER_MODULES = ['internal_links.spiders']
NEWSPIDER_MODULE = 'internal_links.spiders'
CLOSESPIDER_PAGECOUNT = 1000
ITEM_PIPELINES = ['internal_links.pipelines.CsvWriterPipeline']
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'yo mama'
LOG_LEVEL = 'DEBUG'

你确定它不会停止吗?我相信在收到CloseSpider后,scrapy将帮助处理已经请求的项目。我的意思是,它不会立即停止,但不会有新的项目被要求可能会对你感兴趣。你是对的,它确实停止了。但是,我计划扩大这个过程,并希望删除任何不必要的处理。我希望能有办法“在一角硬币上停下来”。可以这么说。还有,你为什么不用弗兰克,我想你找到了我需要的东西。我只是想弄清楚如何实现/测试它。Alik,我来试试。我已经实现了相同的方法,正如你所说,它在所需值的
10-20
之间停止。你知道这是为什么吗?为了完整起见,我希望我的蜘蛛立即停止!据我所知,流程是异步的,因此在向流程发出请求时不会立即执行。虽然已经有很长一段时间了,但我正在处理内存问题,所以情况可能不再是这样了。至少你通过在用户代理中标识自己来进行负责任的爬网