問題是這樣呈現的, scrapy 撰寫的爬蟲以 scrapy crawl 啟動 spider A 時,卻啟動了不相關的 spider B,吐出來一堆該 spider B 中未實做完成而造成的(執行期)錯誤。
一開始的直覺是,我啟動了錯誤的 spider ,因此瘋狂修改命令列指令,甚至故意啟動 spider B,當然,錯誤仍然一直出現。寫程式最怕的就這種隔離不了的錯誤,看不到的臭蟲躲在角落竊笑,笑得你心裏發寒。
python - Scrapy spider shows errors of another unrelated spider in the same project - Stack Overflow 這篇討論是我翻查過的串文中最接近的一篇,但是與我遇到的問題不直接相關。然而,他其中一句話隔了半天以後才點醒了我:
SpiderLoader imports and caches all of the spiders in a project when initiated.
所以 spider B 被載入了,這是完全沒有必要的;所以 spider B 中尚未準備好被執行的程式碼被執行了,吐出了錯誤訊息,而讓人誤以為 spider B 被錯誤地執行了,其實它只是被載入而已;當然對某些動態形態系統 ( dynamic typing system ) 來說,這是很自然且被稱許的事情。
相關的知識可以查看 https://www.cnblogs.com/kingron/p/14345855.html 及 https://docs.scrapy.org/en/2.11/_modules/scrapy/spiderloader.html,然而這個問題的呈現是如此的幽微,除錯起來格外的吃力。謹以此梗圖致敬
沒有留言:
張貼留言