Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 如何从脚本中强制关闭刮屑蜘蛛_Python 3.x_Scrapy - Fatal编程技术网

Python 3.x 如何从脚本中强制关闭刮屑蜘蛛

Python 3.x 如何从脚本中强制关闭刮屑蜘蛛,python-3.x,scrapy,Python 3.x,Scrapy,我有一个从脚本运行的scrapy机器人,我的问题是:spyder完成爬行后,程序不会结束,所以基本上程序永远运行,直到我手动关闭它,现在这个spyder是一个更大的程序的一部分,所以我不能像其他进程没有发生过的那样关闭它。那么我如何安全地关闭它呢。 我已经浏览了stackoverflow和其他论坛,我得到了,第一个完全不可用,相信我,我已经尝试过了,第二个看起来很有希望,但出于某种原因,close spider当我收到信号spider closed 这是机器人: def pricebot(pro

我有一个从脚本运行的scrapy机器人,我的问题是:spyder完成爬行后,程序不会结束,所以基本上程序永远运行,直到我手动关闭它,现在这个spyder是一个更大的程序的一部分,所以我不能像其他进程没有发生过的那样关闭它。那么我如何安全地关闭它呢。 我已经浏览了stackoverflow和其他论坛,我得到了,第一个完全不可用,相信我,我已经尝试过了,第二个看起来很有希望,但出于某种原因,
close spider
当我收到信号
spider closed

这是机器人:

def pricebot(prod_name):
  class PriceBot(scrapy.Spider):
    name = 'pricebot'
    query = prod_name
    if query.find(' ') is not -1:
        query = query.replace(' ', '-')
    start_urls = ['http://www.shopping.com/'+query+'/products?CLT=SCH']

    def parse(self, response):

        prices_container = response.css('div:nth-child(2) > span:nth-child(1) > a:nth-child(1)')
        t_cont = response.css('div:nth-child(2)>h2:nth-child(1)>a:nth-child(1)>span:nth-child(1)')

        title = t_cont.xpath('@title').extract()
        price = prices_container.xpath('text()').extract()
        #Sanitise prices results
        prices = []
        for p in price:
            prices.append(p.strip('\n'))
        #Grouping Prices To Their Actual Products
        product_info = dict(zip(title, prices))
        with open('product_info.json','w') as f:
            f.write(json.dumps(product_info))
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})

process.crawl(PriceBot)
process.start() 

完成后,我需要做其他事情,准确地说,调用其他3个函数

显示您的代码为什么要在函数中声明spider?把它移到别处,然后把它作为一个参数传递。。。关于程序没有完成,我想如果你在管理蜘蛛,那么你想保留一个对主反应堆的引用并关闭它。你需要在这里展示你如何管理爬行器的其他相关代码…它在一个函数中,因为它不只是发生,它应该只在需要时发生,特别是当用户单击按钮时。给它传递一个参数似乎很好,你能详细说明一下我是如何做到的吗?这就是我为spider Mate编写的所有代码,告诉我们你的代码为什么要在函数中声明spider?把它移到别处,然后把它作为一个参数传递。。。关于程序没有完成,我想如果你在管理蜘蛛,那么你想保留一个对主反应堆的引用并关闭它。你需要在这里展示你如何管理spider的其他相关代码…这是一个函数,因为它不只是发生,它应该只在需要时发生,特别是当用户单击按钮时。给它传递一个参数似乎很好,你能详细说明我如何做到吗?这就是我为spider mate提供的所有代码