私はredisリストからURLを取るスパイダーを持っています。クローズするURLがない場合、クローズスパイダー
URLが見つからないときにクモをきれいに閉じたいと思います。私はCloseSpider
例外を実装しようとしたが、私が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
それがこの点に到達していないようです。また
[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を捕まえようとしましたが、うまくいきません。
あなたはjson.loads()
にそれを与える(またはそれを呼び出すときTypeError
をキャプチャ)する前にself.__pop_queue()
あれば返す何かをチェックする必要があり、この
おかげ
ニースの方法は、それを行うには、感謝 –
@BLANQUERAdrienは - あなた自身の質問を上昇し、コード/エラーを投稿し、我々は何が起こっているかがわかりますが、これはあります彼のジェネレータ機能を正常に終了させてOP問題に合わせて調整しました。 – zwer
@zwerこれは期待どおりに動作しています。私はまだ混乱しています。どの時点で、我々はクモの例外を捕まえることができます。私は、標準とは何かをフレームワークという観点から考えていますか?ありがとう –