2009-12-05 20 views
6

लिखना मैं साइट पर क्रॉल करने के लिए पाइथन में एक मकड़ी लिख रहा हूं। परेशानी है, मुझे 2.5 मिलियन पृष्ठों की जांच करने की ज़रूरत है, इसलिए मैं वास्तव में गति के लिए अनुकूलित करने में कुछ मदद कर सकता हूं।एक तेज़ पायथन स्पाइडर

मुझे क्या करना है एक निश्चित संख्या के लिए पृष्ठों की जांच करना है, और यदि यह पृष्ठ के लिंक को रिकॉर्ड करने के लिए मिलता है। मकड़ी बहुत सरल है, इसे बहुत सारे पृष्ठों के माध्यम से क्रमबद्ध करने की जरूरत है।

मैं पाइथन के लिए बिल्कुल नया हूं, लेकिन पहले जावा और सी ++ का उपयोग किया है। मैंने अभी तक इसे कोडिंग शुरू करना शुरू कर दिया है, इसलिए पुस्तकालयों या ढांचे पर शामिल करने के लिए कोई भी सिफारिशें बहुत अच्छी होंगी। किसी भी अनुकूलन युक्तियों की भी सराहना की जाती है।

+3

प्रक्रिया को तेज करने के लिए आपकी सबसे अच्छी शर्त आपकी कनेक्शन की गति में सुधार करना है। यह आपकी बाधा होगी, पायथन गति नहीं। – tzot

उत्तर

9

आप MapReduce इस्तेमाल कर सकते हैं गूगल की तरह, Hadoop (विशेष रूप से अजगर के साथ: 1 और 2) के माध्यम से या तो, Disco, या Happy

विचार की पारंपरिक रेखा मानक पाइथन में अपना प्रोग्राम लिखती है, अगर आपको लगता है कि यह बहुत धीमा है, profile it, और विशिष्ट धीमी धब्बे को अनुकूलित करें। C/C++ एक्सटेंशन या यहां तक ​​कि ctypes का उपयोग करके, आप इन धीमी गति को तेजी से सी तक छोड़कर कर सकते हैं।

यदि आप केवल एक साइट को घुमा रहे हैं, तो wget -r (an example) का उपयोग करने पर विचार करें।

+0

क्या Wget समर्थन केवल HTML ला रहा है? मैं एक नाली से अधिक नहीं बनना चाहता हूं तो मुझे करना होगा। – MMag

+2

हां, wget पर '-A' ध्वज चलो आप स्वीकार किए गए एक्सटेंशन निर्दिष्ट करते हैं, और' -R' चलिए आप अस्वीकृत एक्सटेंशन निर्दिष्ट करते हैं। तो आप wget-r.gif, .jpg, .png -r example.com ' –

+0

+1 जैसे कुछ भी कर सकते हैं, व्हील को फिर से क्यों शुरू करें? – extraneon

3

लाखों अनुरोधों के साथ किसी की साइट को स्पिडर करना बहुत विनम्र नहीं है। क्या आप साइट के संग्रह के लिए वेबमास्टर से पूछ सकते हैं? एक बार आपके पास यह हो जाने के बाद, यह पाठ खोज का एक साधारण मामला है।

+0

वेबसाइट नहीं है अंग्रेजी में, और मैं पूछने के लिए भाषा नहीं बोलता। साथ ही, यह एक बहुत ही उच्च यातायात छवि साइट है (एक और कारण है कि मैं वास्तव में नहीं पूछ सकता) और मुझे केवल प्रत्येक पृष्ठ के HTML की आवश्यकता है, इसलिए उम्मीद है कि मैं उनके सर्वर पर एक नाली नहीं रहूंगा। मैं केवल एक बार प्रत्येक पृष्ठ को मकड़ी बनाने की योजना बना रहा हूं, और अपडेट के लिए कभी वापस नहीं आना चाहता हूं। – MMag

5

आप कहां परिणाम संग्रहीत कर रहे हैं? आप सर्वर के क्लस्टर में आसानी से अपने स्क्रैपिंग को समानांतर करने के लिए PiCloud की क्लाउड लाइब्रेरी का उपयोग कर सकते हैं।

+0

मेरे पास एक छोटे से RAID सरणी और कुछ स्वयंसेवकों के कंप्यूटर के साथ एक वर्कस्टेशन है। मैं केवल उन पृष्ठों को स्टोर करने की योजना बना रहा हूं जिनमें प्रासंगिक खोज शब्द है, जो <1% – MMag

+0

बेहतर स्टोर करने के लिए कम डेटा होना चाहिए। यदि आपको खुद को अधिक कम्प्यूटेशनल पावर की आवश्यकता होती है (समांतरता आप जो भी कर रहे हैं उससे काफी तेज हो जाएगी), निश्चित रूप से PiCloud को आज़माएं। – BrainCore

3

आप स्पाइडरिंग के दौरान नेटवर्क अनुरोधों के लिए बहुत समय बर्बाद करते हैं, इसलिए आप निश्चित रूप से समानांतर में अपने अनुरोध करना चाहते हैं। मैं शायद परिणाम डेटा को डिस्क पर सहेज दूंगा और फिर शब्द की खोज करने वाली फ़ाइलों पर दूसरी प्रक्रिया लूपिंग करूँगा। यदि आपको अतिरिक्त प्रदर्शन की आवश्यकता होती है तो उस चरण को कई मशीनों में आसानी से वितरित किया जा सकता है।

5

के रूप में आप अजगर के लिए नए हैं, मुझे लगता है कि निम्नलिखित सहायक आप :)

  • यदि आप पृष्ठ में निश्चित पैटर्न के लिए खोज करने के लिए, अपने रेगुलर एक्सप्रेशन से भी आप कर सकते हैं और पुन: उपयोग संकलन regex लिख रहे हैं के लिए हो सकता है संकलित ऑब्जेक्ट
  • BeautifulSoup एक HTML/xml पार्सर है जो आपके प्रोजेक्ट के लिए कुछ उपयोग हो सकता है।
+0

आपकी पोस्ट के स्वरूपण में से कुछ को निश्चित करें, आशा है कि आपको कोई फर्क नहीं पड़ता :) SO में आपका स्वागत है! आपके संपादन के लिए – onnodb

+0

thx :) – satoru

0

क्या एडम ने कहा। मैंने Xanga के नेटवर्क को मानचित्रित करने के लिए यह एक बार किया था। जिस तरह से मैंने इसे तेज़ी से बनाया है, वह थ्रेड-सुरक्षित सेट है जिसमें सभी उपयोगकर्ता नाम शामिल हैं जिन्हें मुझे देखना था। तब मेरे पास 5 या तो धागे एक ही समय में अनुरोध कर रहे थे और उन्हें संसाधित कर रहे थे। आप किसी भी पाठ (सबसे अधिक संभावना) को संसाधित करने की तुलना में पृष्ठ को डीएल के लिए प्रतीक्षा करने के लिए और अधिक समय व्यतीत करने जा रहे हैं, इसलिए एक ही समय में प्राप्त होने वाले अनुरोधों की संख्या बढ़ाने के तरीकों को ढूंढें।

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