我对scrapy Crawlspider有一个问题:基本上,如果引发了CloseSpider异常,它不会像它应该做的那样退出。代码如下:
from scrapy.spiders import CrawlSpider, Rule
from scrapy.exceptions import CloseSpider
from scrapy.linkextractors import LinkExtractor
import re
class RecursiveSpider(CrawlSpider):
name = 'recursive_spider'
start_urls = ['https://www.webiste.com/']
rules = (
Rule(LinkExtractor(), callback='parse_item', follow=True),
)
miss = 0
hits = 0
def quit(self):
print("ABOUT TO QUIT")
raise CloseSpider('limits_exceeded')
def parse_item(self, response):
item = dict()
item['url'] = response.url
item['body'] = '\n'.join(response.xpath('//text()').extract())
try:
match = re.search(r"[A-za-z]{0,1}edical[a-z]{2}", response.body_as_unicode()).group(0)
except:
match = 'NOTHING'
print("\n")
print("\n")
print("\n")
print("****************************************INFO****************************************")
if "string" in item['url']:
print(item['url'])
print(match)
print(self.hits)
self.hits += 10
if self.hits > 10:
print("HITS EXCEEDED")
self.quit()
else:
self.miss += 1
print(self.miss)
if self.miss > 10:
print("MISS EXCEEDED")
self.quit()
print("\n")
print("\n")
print("\n")问题是,尽管我可以看到它进入了条件中,并且我可以看到在日志中引发了生态异常,但爬虫仍在继续爬行。我用以下命令运行它:
scrapy crawl recursive_spider发布于 2018-08-03 01:02:11
我猜这是scrapy的一个例子,只是关闭的时间太长了,而不是真正忽略了异常。引擎不会退出,直到它运行完所有计划/发送的请求,所以我建议降低CONCURRENT_REQUESTS/CONCURRENT_REQUESTS_PER_DOMAIN设置的值,看看这是否适用于您。
发布于 2018-08-03 01:15:25
您创建了一个“递归”爬行器,因此它以递归方式工作。删除"rules“参数,它将在完全爬网后停止。
https://stackoverflow.com/questions/51658531
复制相似问题