2012-04-29 7 views
8

मैं HTML फ़ाइलों को पार्स करने के लिए सुंदर सूप का उपयोग कर रहा हूं, जबकि सभी स्क्रिप्ट मैं लिखता हूं लेकिन धीमा लेकिन धीमा। इसलिए मैं सुंदर सूप के साथ श्रमिकों के मल्टीप्रोसेसिंग पूल का उपयोग करने पर प्रयोग कर रहा हूं, इसलिए मेरा प्रोग्राम अधिक तेज़ी से चल सकता है (मुझे 100,000 - 1,000,000 एचटीएमएल फाइलें खोलने की ज़रूरत है)। मैंने जो स्क्रिप्ट लिखी है वह अधिक जटिल है लेकिन मैंने यहां एक छोटा सा उदाहरण लिखा है। मैं इस तरह कुछ करने के लिए कोशिश कर रहा हूँ और मैं त्रुटिमल्टीप्रोसेसिंग पूल मैप के साथ सुंदर सूप का उपयोग करते समय रिकर्सन गहराई त्रुटि

बार आ रही है:

संपादित कोड

from bs4 import BeautifulSoup 
from multiprocessing import Pool 
def extraction(path): 
    soup=BeautifulSoup(open(path),"lxml") 
    return soup.title 

pool=Pool(processes=4) 
path=['/Volume3/2316/http/www.metro.co.uk/news/852300-haiti-quake-victim-footballers-stage-special-tournament/crawlerdefault.html','/Volume3/2316/http/presszoom.com/story_164020.html'] 
print pool.map(extraction,path) 
pool.close() 
pool.join() 

कुछ करने के बाद 'RuntimeError एक वस्तु नमकीन बनाना जबकि अधिकतम प्रत्यावर्तन गहराई से अधिक हो गई' कुछ पदों के माध्यम से खोज और खुदाई, मुझे पता चला कि त्रुटि हो रही है क्योंकि सुंदर सूप पाइथन दुभाषिया ढेर की गहराई से अधिक है। मैंने सीमा बढ़ाने और एक ही कार्यक्रम चलाने की कोशिश की (मैं 3000 तक चला गया) लेकिन त्रुटि एक ही है। मैंने सीमा बढ़ाने को रोक दिया क्योंकि एचटीएमएल फाइलों को खोलते समय समस्या सुंदर सूप के साथ है।

सुंदर सूप के साथ मल्टीप्रोसेसिंग का उपयोग करने से मेरा निष्पादन समय तेज हो जाएगा, लेकिन मैं यह समझने में सक्षम नहीं हूं कि फ़ाइलों को खोलने के लिए इसे कैसे लागू किया जाए।

क्या किसी के पास मल्टीप्रोसेसिंग के साथ सुंदर सूप का उपयोग करने या इस तरह की त्रुटियों पर कैसे आना है, इस पर कोई अन्य दृष्टिकोण है?

किसी भी प्रकार की सहायता की सराहना की जाएगी, मैं इसे ठीक करने की कोशिश करने के घंटों तक बैठा हूं और समझता हूं कि मुझे त्रुटि क्यों मिल रही है।

संपादित

मैं फ़ाइलों को मैं रास्तों में दे दिया है के साथ ऊपर कोड का परीक्षण किया और मैं के रूप में

ऊपर

फ़ाइलें यहाँ पहुँचा जा सकता है (http://ec2-23-20-166-224.compute-1.amazonaws.com/sites/html_files/)

+1

उपरोक्त स्क्रिप्ट आपके द्वारा वर्णित त्रुटि उत्पन्न नहीं करती है। क्या आप वास्तव में परीक्षण की गई सबसे सरल स्क्रिप्ट पेस्ट कर सकते हैं, और _does_ इस त्रुटि को उत्पन्न करता है? – senderle

+0

हाय, उत्तर के लिए धन्यवाद .. मैंने लिंक में दिए गए उपरोक्त HTML पृष्ठों के साथ कोड का परीक्षण किया और मुझे त्रुटि मिली "रनटाइम त्रुटि: ऑब्जेक्ट चुनते समय अधिकतम रिकर्सन गहराई पार हो गई" मदद के लिए धन्यवाद – kich

उत्तर

3

ही RuntimeError मिला मुझे लगता है कि कारण पूरे soup.title -object की वापसी है। ऐसा लगता है, यह सभी children और parent तत्वों और उनके बच्चों और माता-पिता और इस समय विश्लेषण किया जाता है, और इससे रिकर्सन त्रुटि बढ़ जाती है।

तो वस्तु की सामग्री तुम क्या जरूरत है, तो आप बस str -method कॉल कर सकते हैं:

return soup.title.__str__() 

दुर्भाग्य से, इसका मतलब है, आप अन्य सभी उपलब्ध कराई गई जानकारी के लिए पहुँच नहीं है अब बीएस 4 लाइब्रेरी द्वारा।

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