2010-01-25 20 views
5

मैं एक साइट में डॉउलोड वेबपृष्ठों को बैच करना चाहता हूं। मेरी 'urls.txt' फ़ाइल में 5000000 यूआरएल लिंक हैं। यह लगभग 300 मीटर है। इन यूआरएल को एक बहु-थ्रेड कैसे लिंक करते हैं और इन वेबपृष्ठों को कैसे लोड करते हैं? या बैच इन वेबपृष्ठों को कैसे लोड करें?पायथन, बहु-धागे, वेबपृष्ठ लाएं, वेबपृष्ठ डाउनलोड करें

मेरे विचारों:

with open('urls.txt','r') as f: 
    for el in f: 
     ##fetch these urls 

या मुड़?

क्या इसके लिए कोई अच्छा समाधान है?

+2

आप इसे अपने आप को कार्यक्रम करना चाहते हैं? आप इसे 'wget' आसानी से कर सकते हैं। – notnoop

उत्तर

1

एक बार में 5 एम वेब पेजों को निश्चित रूप से डाउनलोड करना एक अच्छा विचार नहीं है, क्योंकि आप अपने नेटवर्क बैंडविड्थ और आपके ओएस के फाइल डिस्क्रिप्टर समेत कई चीजें अधिकतम कर देंगे। मैं 100-1000 के बैचों में जाऊंगा। आप सॉकेट प्राप्त करने के लिए urllib.urlopen का उपयोग कर सकते हैं और फिर कई धागे पर बस() पढ़ सकते हैं। आप select.select का उपयोग करने में सक्षम हो सकते हैं। यदि ऐसा है, तो आगे बढ़ें और सभी 1000 एक बार डाउनलोड करें और प्रत्येक फ़ाइल हैंडल वितरित करें जो 10 कार्यकर्ता धागे कहने के लिए रिटर्न का चयन करें। यदि चयन काम नहीं करेगा, तो अपने बैचों को 100 डाउनलोड तक सीमित करें और प्रति डाउनलोड एक थ्रेड का उपयोग करें। निश्चित रूप से आपको 100 से अधिक धागे शुरू नहीं करना चाहिए क्योंकि आपका ओएस उड़ सकता है या कम से कम धीमा हो सकता है।

3

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

हालांकि, यदि आपको इन संसाधनों को बड़े कार्यक्रम के हिस्से के रूप में लाने की आवश्यकता है, तो इसे खोल के साथ करना आदर्श नहीं हो सकता है। इस मामले में, मैं दृढ़ता से ट्विस्ट की अनुशंसा करता हूं, जो समानांतर में कई अनुरोध करना आसान बनाता है।

कुछ साल पहले मैंने इस बारे में एक उदाहरण लिखा था कि यह कैसे करना है। http://jcalderone.livejournal.com/24285.html पर एक नज़र डालें।

+0

धन्यवाद :) यह बहुत अच्छा है! – bell007

1

सबसे पहले अपनी फ़ाइल को पार्स करें और यूआरएल को कतार में दबाएं और फिर कतार और डाउनलोड से यूआरएल खींचने के लिए 5-10 कार्यकर्ता धागे को बढ़ाएं। कतार इस के साथ आपका दोस्त हैं।

+0

धन्यवाद! "कतार इस के साथ आपका दोस्त हैं।" :) – bell007

0

एक wget स्क्रिप्ट शायद सबसे सरल है, लेकिन आप एक अजगर-मुड़ रेंगने समाधान के लिए देख रहे हैं, बाहर की जाँच scrapy

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