我有一個蜘蛛,它從一個redis列表中獲取URL。Scrapy關閉蜘蛛如果沒有網址爬行
我想在沒有找到URL時很好地關閉spider。我試圖執行CloseSpider
例外,但它似乎並沒有達到這個地步
def start_requests(self):
while True:
item = json.loads(self.__pop_queue())
if not item:
raise CloseSpider("Closing spider because no more urls to crawl")
try:
yield scrapy.http.Request(item['product_url'], meta={'item': item})
except ValueError:
continue
即使我提高CloseSpider例外,但我仍然得到下面的錯誤:
[email protected]:/scrapper# scrapy crawl general -a country=my -a log=file
2017-07-17 12:05:13 [scrapy.core.engine] ERROR: Error while obtaining start requests
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/scrapy/core/engine.py", line 127, in _next_request
request = next(slot.start_requests)
File "/scrapper/scrapper/spiders/GeneralSpider.py", line 20, in start_requests
item = json.loads(self.__pop_queue())
File "/usr/local/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
而且,我也嘗試在相同的函數中捕獲TypeError,但它也不起作用。
是否有處理這種
感謝任何推薦的方式
很好的方式做到這一點,得益於 –
@BLANQUERAdrien - 超越你自己的問題,併發布您的代碼/錯誤,我們會看到發生了什麼,這是更適合OP的問題,優雅地退出其發電機功能。 – zwer
@zwer感謝它現在按預期工作。有一件事我仍然困惑。在什麼時候我們可以捕捉到蜘蛛的例外。我的意思是scrapy框架是什麼標準?謝謝 –