Python 刮掉N件物品后停止刮擦
我和Scrapy有麻烦。我需要的代码,将废掉多达1000个内部链接每个给定的网址。我的代码在命令行运行时可以工作,但爬行器不会停止,只会接收消息 我的代码如下: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
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
之间停止。你知道这是为什么吗?为了完整起见,我希望我的蜘蛛立即停止!据我所知,流程是异步的,因此在向流程发出请求时不会立即执行。虽然已经有很长一段时间了,但我正在处理内存问题,所以情况可能不再是这样了。至少你通过在用户代理中标识自己来进行负责任的爬网