Yazar adı: Bu gönderi içeriğinin veya bilgilerinin eksik olduğunu düşünebilirsiniz, bunun nedeni yalnızca nereden başlayacağımı bilmem. İsteğiniz üzerine ek bilgilerle memnuniyetle düzenleyeceğim.Scrapy hatası indir ve remove_request hatası
ERROR: Error downloading <GET http://www.fifa.com/fifa-tournaments/players-coaches/people=44630/index.html>
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/twisted/internet/defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/Library/Python/2.7/site-packages/scrapy/core/downloader/__init__.py", line 75, in _deactivate
self.active.remove(request)
KeyError: <GET http://www.fifa.com/fifa-tournaments/players-coaches/people=44630/index.html>
2016-01-19 15:57:20 [scrapy] INFO: Error while removing request from slot
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/twisted/internet/defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/Library/Python/2.7/site-packages/scrapy/core/engine.py", line 140, in <lambda>
d.addBoth(lambda _: slot.remove_request(request))
File "/Library/Python/2.7/site-packages/scrapy/core/engine.py", line 38, in remove_request
self.inprogress.remove(request)
KeyError: <GET http://www.fifa.com/fifa-tournaments/players-coaches/people=44630/index.html>
ben sadece bu tek URL üzerinde kavgacı çalıştırdığınızda kullanarak:
scrappy shell http://www.fifa.com/fifa-tournaments/players-coaches/people=44630/index.html
yok hatalardır
Running scrapy ben kazıma am tüm bağlantı arasında aşağıdaki hatayı bakın meydana gelen. Ben, binlerce benzer bağlantıyı sorunsuz bir şekilde karıştırıyorum ama bu sorunu ~ 10 bağlantıda görüyorum. Scrappy varsayılan 180
saniye indirme zaman aşımı kullanıyorum. Web tarayıcımda da bu bağlantılarla ilgili yanlış bir şey göremiyorum.
request = Request(url_nrd,meta = {'item' : item},callback=self.parse_player,dont_filter=True)
fonksiyonlarda ele alınır: Ayrıca
def parse_player(self, response):
if response.status == 404:
#doing stuff here
yield item
else:
#doing stuff there
request = Request(url_new,meta = {'item' : item},callback=self.parse_more,dont_filter=True)
yield request
def parse_more(self, response):
#parsing more stuff here
return item
:
ayrıştırma isteği tarafından başlatılır ben kavgacı içinde indirme yeniden deneme için varsayılan ayarları değişmedi (ama günlük dosyamda herhangi bir yeniden deneme görmüyorum).
ek notlar: benim kazıma tamamlanarak dont_filter=True
beri önceki ve sonraki isteklerde çağırdığında bir noktada önceki hatayla indirmek için başarısız bağlantıları, başarısız olmadı görebilirsiniz sonra.
Olası cevap: Ben örümcekler birinde bir KeyError
alıyorum ve bu örümceğin o tahsis sökme (remove_request
) başarısız olduğunu görüyoruz. dont_filter=True
'u ayarlıyorum ve aynı URL'de birkaç istekte bulunmam ve örümceğin anahtarının o URL gibi görünmesi olası mı? Örümcek, aynı URL'de bir önceki, eşzamanlı istek tarafından tahsis edildi mi?
Bu durumda, istek başına benzersiz bir anahtar nasıl olmalı ve URL'de dizine eklenmemiş?
DÜZENLEME
ben beri benim kodunu düzenledi çünkü kesin bilmiyorum parse_player
benim kod sorun olduğunu düşünüyorum, ama yield request
üzerinde kötü girinti gördüğümü hatırlamıyorum. Soruna neden olabileceğini düşündüğünüzde, bize bildirin.
çok ilginç bir problem, daha fazla örümcek kodunu ve belki de bunları kullanırken biraz orta sınıflar paylaşmanız gerektiğini düşünüyorum. – eLRuLL
@eLRuLL Ne yazık ki bu yazıdan beri scrapy kodumu tamamen değiştirdim.Şimdi tüm isteğimi filtreliyorum, ki bu daha iyi ve ben bu konuyu artık görmüyorum (bu yüzden bir şekilde "dont_filter" ın suçlu olduğunu düşünüyorum. Kodumu düzenlerken, soruna neden olabilecek bir sorun olduğunu hatırlıyorum. : - parse_player'da bir istek oluşturmak ve asla üretmemek. - ya da ben hiç bir yerde yaratmadığım bir istek vermekteydim. Maalesef kod yapım çok farklı olduğu için size daha fazla bilgi veremiyorum Bu soruyu kapatmaktan çekinmeyin – vrleboss
Sorunun ne olduğunu yansıtmayı denemek için gönderimi düzenliyorum – vrleboss