2015-11-13 6 views
5

मैं एक ही मकड़ी के कई उदाहरण शुरू करते समय अटक गया हूं। मैं इसे 1 मकड़ी उदाहरण के लिए 1 यूआरएल की तरह चलाने के लिए चाहता हूँ। मुझे 50k यूआरएल को संसाधित करना है और इसके लिए मुझे प्रत्येक के लिए अलग-अलग उदाहरण शुरू करने की आवश्यकता है। मेरी मुख्य स्पाइडर स्क्रिप्ट में, मैंने यह सुनिश्चित करने के लिए कि मैं लंबे समय तक क्रॉल नहीं कर रहा हूं, मैंने 7 मिनट के लिए बंदपाइडर टाइमट सेट किया है।स्क्रैप - एक ही मकड़ी प्रक्रिया के कई उदाहरण कैसे शुरू करें?

from scrapy.crawler import CrawlerProcess 
from scrapy.utils.project import get_project_settings 
import urlparse 

for start_url in all_urls: 
    domain = urlparse.urlparse(start_url).netloc 
    if domain.startswith('ww'): 
     domain = domain.split(".",1)[1] 

    process = CrawlerProcess(get_project_settings()) 
    process.crawl('textextractor', start_url=start_url,allowed_domains=domain) 
    process.start() 

यह 1 यूआरएल के लिए पूरी तरह से चलाता है, बर उसके बाद जब 2 यूआरएल पारित हो जाता है यह त्रुटि नीचे देता है:: कृपया नीचे दिए गए कोड को देखने के

raise error.ReactorNotRestartable() 
ReactorNotRestartable 

कृपया सुझाव है कि क्या मैं इसे बनाने के लिए क्या करना चाहिए एक ही मकड़ी के कई उदाहरणों के लिए चलाएं। इसके अलावा, मैं धागे का उपयोग कर एक समय में स्केपर के कई उदाहरण शुरू करने के बारे में सोच रहा हूं। क्या यह एक अच्छा दृष्टिकोण होगा?

+0

इस मामले पर किसी भी अद्यतन के बारे में? – UriCS

उत्तर

0

यह कैसे

process = CrawlerProcess(get_project_settings()) 

for start_url in all_urls: 
    domain = urlparse.urlparse(start_url).netloc 
    if domain.startswith('ww'): 
     domain = domain.split(".",1)[1] 
    process.crawl('textextractor', start_url=start_url,allowed_domains=domain) 

process.start() 
+0

फरस मैंने आपके समाधान के साथ परीक्षण किया लेकिन यह सही परिणाम प्रदान नहीं करता है। यह समाधान '' 'ReactorNotRestartable''' त्रुटि देने के बिना कई उदाहरण शुरू करता है लेकिन यह केवल अंतिम उत्तीर्ण यूआरएल को क्रॉल करता है और अन्य यूआरएल के लिए यह क्रॉलिंग शुरू करता है लेकिन 1 से अधिक यूआरएल क्रॉल न करें और मकड़ी खत्म करें। मैंने उन यूआरएल को अलग से चेक किया है और वे उन पर क्रॉल किए गए डेटा का बहुत कुछ वापस कर देते हैं। प्लस जैसा कि मैंने उल्लेख किया है, मुझे 50k यूआरएल के लिए ऐसा करना है इसका मतलब है कि मैं एक बार में 50k यूआरएल के लिए क्रॉलिंग प्रक्रिया शुरू कर दूंगा? क्या यह एक अच्छा दृष्टिकोण प्रतीत होता है? – user3721618

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

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