2016-01-20 9 views
9

लेखक नोट: आपको लगता है कि इस पोस्ट में संदर्भ या जानकारी की कमी है, केवल इसलिए कि मुझे नहीं पता कि कहां से शुरू करना है। मैं आपके अनुरोध पर अतिरिक्त जानकारी के साथ खुशी से संपादित करूंगा।स्केपर डाउनलोड त्रुटि और 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 

मुझे बताएं कि क्या आपको लगता है कि इस मुद्दे के कारण हो सकता है।

+0

एक बहुत ही रोचक समस्या है, मुझे लगता है कि यदि आप उनका उपयोग कर रहे हैं तो आपको अधिक मकड़ी कोड और शायद कुछ मध्यवर्ती शेयर साझा करना चाहिए। – eLRuLL

+0

@eLRuLL दुर्भाग्य से मैंने उस पोस्ट के बाद से अपना स्केपर कोड पूरी तरह बदल दिया है।मेरे कोड, मैं एक संभावित मुद्दा यह है कि समस्या के कारण हो सकता था देखकर याद संपादित करते समय अब ​​मैं सभी मेरे अनुरोध जो बेहतर है को फ़िल्टर और मुझे लगता है कि इस मुद्दे को अब और नहीं दिख रहा है (इसलिए मैं किसी भी तरह लगता है 'dont_filter' अपराधी यहाँ है। :।। - या तो 'parse_player' में एक अनुरोध बनाने और इसे कभी नहीं उपज - या मेरा एक अनुरोध है कि मैं पहली जगह में कभी नहीं बनाया उपज था दुर्भाग्य से मैं आप भी बहुत कुछ नहीं बता सकता के रूप में मेरे कोड संरचना काफी अलग है अब। btw उस सवाल को बंद करने के लिए स्वतंत्र महसूस। – vrleboss

+0

मैं अपने पोस्ट को संपादित करने हूँ क्रम में प्रतिबिंबित करने के लिए क्या मुद्दा था की कोशिश करना। – vrleboss

उत्तर

5

और यदि आप केवल त्रुटियों को अनदेखा करते हैं ??

 
def parse_player(self, response): 
    if response.status == 200: 
     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 
+0

और ... एक बहुत ही सरल जवाब बक्षीस प्राप्त करें। अच्छी रणनीति और भाग्य –

संबंधित मुद्दे