लेखक नोट: आपको लगता है कि इस पोस्ट में संदर्भ या जानकारी की कमी है, केवल इसलिए कि मुझे नहीं पता कि कहां से शुरू करना है। मैं आपके अनुरोध पर अतिरिक्त जानकारी के साथ खुशी से संपादित करूंगा।स्केपर डाउनलोड त्रुटि और remove_request त्रुटि
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>
जब मैं बस उस एकल URL पर अव्यवस्थित चलाने का उपयोग कर:
scrappy shell http://www.fifa.com/fifa-tournaments/players-coaches/people=44630/index.html
कोई त्रुटि नहीं हैं
रनिंग scrapy मुझे लगता है मैं कर रहा हूँ scraping सभी लिंक के बीच निम्न त्रुटि देख होने वाली। मैं बिना किसी समस्या के हजारों समान लिंक छीन रहा हूं लेकिन मुझे यह समस्या ~ 10 लिंक पर दिखाई देती है। मैं डिफ़ॉल्ट 180
सेकेंड स्क्रैपी से डाउनलोड टाइमआउट का उपयोग कर रहा हूं। मुझे अपने वेब ब्राउज़र में भी इन लिंक के साथ कुछ भी गलत नहीं दिख रहा है।
request = Request(url_nrd,meta = {'item' : item},callback=self.parse_player,dont_filter=True)
कौन सा कार्यों में नियंत्रित किया जाता है:
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
इसके अलावा:
पार्स अनुरोध द्वारा की जा रही मैं अव्यवस्थित में डाउनलोड पुनर्प्रयास के लिए चूक सेटिंग में बदलाव नहीं किया था (लेकिन मैं मेरी लॉग फ़ाइलों में कोई भी रीट्री न देखें)।
अतिरिक्त नोट्स: के बाद मेरी scraping पूरा किया और dont_filter=True
के बाद से मैं देख सकता हूँ जब पिछले और बाद में अनुरोधों में कहा जाता है कि लिंक है कि कुछ बिंदु पर पिछले त्रुटि के साथ डाउनलोड करने के लिए विफल रहा है, असफल नहीं किया।
संभावित जवाब: मुझे लगता है कि मैं मकड़ियों से एक पर एक KeyError
हो रही है और उस मकड़ी की कि de-आवंटन में विफल रहा है (remove_request
)। क्या यह संभव है क्योंकि ऐसा इसलिए है क्योंकि मैं dont_filter=True
सेटिंग कर रहा हूं और उसी यूआरएल पर कई अनुरोध कर रहा हूं और स्पाइडर की कुंजी यूआरएल प्रतीत होती है? कि मकड़ी को उसी यूआरएल पर पिछले, समवर्ती अनुरोध द्वारा आवंटित किया गया था?
उस मामले में प्रति अनुरोध एक अनूठी कुंजी कैसे है और यूआरएल पर अनुक्रमित नहीं है?
संपादित
मुझे लगता है कि parse_player
में मेरी कोड समस्या थी, क्योंकि मैं के बाद से मेरी कोड संपादित मुझे यकीन है कि के लिए पता नहीं है, लेकिन मैं yield request
पर बुरा मांगपत्र देखकर याद।
def parse_player(self, response):
if response.status == 404:
#doing stuff here
yield item
else:
paths = sel.xpath('some path extractor here')
for path in paths:
if (some_condition):
#doing stuff there
request = Request(url_new,meta = {'item' : item},callback=self.parse_more,dont_filter=True)
# Bad indent of yield request here!
yield request
मुझे बताएं कि क्या आपको लगता है कि इस मुद्दे के कारण हो सकता है।
एक बहुत ही रोचक समस्या है, मुझे लगता है कि यदि आप उनका उपयोग कर रहे हैं तो आपको अधिक मकड़ी कोड और शायद कुछ मध्यवर्ती शेयर साझा करना चाहिए। – eLRuLL
@eLRuLL दुर्भाग्य से मैंने उस पोस्ट के बाद से अपना स्केपर कोड पूरी तरह बदल दिया है।मेरे कोड, मैं एक संभावित मुद्दा यह है कि समस्या के कारण हो सकता था देखकर याद संपादित करते समय अब मैं सभी मेरे अनुरोध जो बेहतर है को फ़िल्टर और मुझे लगता है कि इस मुद्दे को अब और नहीं दिख रहा है (इसलिए मैं किसी भी तरह लगता है 'dont_filter' अपराधी यहाँ है। :।। - या तो 'parse_player' में एक अनुरोध बनाने और इसे कभी नहीं उपज - या मेरा एक अनुरोध है कि मैं पहली जगह में कभी नहीं बनाया उपज था दुर्भाग्य से मैं आप भी बहुत कुछ नहीं बता सकता के रूप में मेरे कोड संरचना काफी अलग है अब। btw उस सवाल को बंद करने के लिए स्वतंत्र महसूस। – vrleboss
मैं अपने पोस्ट को संपादित करने हूँ क्रम में प्रतिबिंबित करने के लिए क्या मुद्दा था की कोशिश करना। – vrleboss