2012-03-20 16 views
12

के साथ HTML-फ़ाइलों से डेटा निकालने के लिए मुझे HTML-files से डेटा निकालने की आवश्यकता है। प्रश्न में फाइलें, सबसे अधिक संभावना है, स्वचालित रूप से जेनरेट की जाती हैं। मैंने इन फ़ाइलों में से एक का कोड पेस्टबिन में अपलोड किया है: http://pastebin.com/9Nj2Edfv। यह वास्तविक पृष्ठ का लिंक है: http://eur-lex.europa.eu/Notice.do?checktexts=checkbox&val=60504%3Acs&pos=1&page=1&lang=en&pgs=10&nbl=1&list=60504%3Acs%2C&hwords=&action=GO&visu=%23texteसुंदर सूप और पायथन

मुझे निकालने की आवश्यकता वाले डेटा को अलग-अलग शीर्षकों के अंतर्गत पाया जाता है।

यह वही है मैं अब तक है:

from BeautifulSoup import BeautifulSoup 
ecj_data = open("data\ecj_1.html",'r').read() 

soup = BeautifulSoup(ecj_data) 

celex = soup.find('h1') 
auth_lang = soup('ul', limit=14)[13].li 
procedure = soup('ul', limit=20)[17].li 

print "Celex number:", celex.renderContents(), 
print "Authentic language:", auth_lang 
print "Type of procedure:", procedure 

मैं सभी डेटा स्थानीय रूप से संग्रहीत जो कारण यह फ़ाइल ecj_1.html खोलता है।

सेलेक्स नंबर और प्रामाणिक भाषा कुछ हद तक अच्छा काम करती है।

CELEX रिटर्न

"Celex number: 
61977J0059" 

auth_lang रिटर्न "Authentic language: <li>French</li>"

मैं सिर्फ H1 टैग (नहीं अंत में छुट्टी) की सामग्री की जरूरत है।

[इसके अलावा, मैं सिर्फ "फ्रेंच" लौटने के लिए auth_lang, और नहीं <li> -tags की जरूरत है।] यह एक समस्या अब और नहीं है। मुझे एहसास हुआ कि मैं "auth_lang" के अंत में ".text" जोड़ सकता हूं। दूसरी ओर

प्रक्रिया इस रिटर्न:

Type of procedure: <li> 
    <strong>Type of procedure:</strong> 
    <br /> 
    Reference for a preliminary ruling 
    </li> 

जो काफी गलत है के रूप में मैं सिर्फ यह की जरूरत है "संदर्भ एक प्रारंभिक सत्तारूढ़ के लिए" वापस जाने के लिए।

क्या कोई तरीका है जिससे मैं इसे प्राप्त कर सकता हूं?

दूसरा संपादित करें: मैं celex = soup('h1', limit=2)[0] साथ celex = soup.find('h1') प्रतिस्थापित और प्रिंट CELEX को .text गयी।

उत्तर

3

प्रत्येक पाए गए अनुक्रमों की सामग्री सूचियां हैं, केवल पहले दो लंबाई 1 हैं। हालांकि procedure 5 तत्व लंबा है, और जिस प्रविष्टि के बाद आप हैं (इस मामले में) चौथा है। मैंने न्यूलाइन से छुटकारा पाने के लिए splitlines() का भी उपयोग किया है।

print "Celex number:", celex.contents[0].splitlines()[1] 
print "Authentic language:", auth_lang.contents[0].splitlines()[0] 
print "Type of procedure:", procedure.contents[4].splitlines()[1] 

उत्पादन:

Celex number: 61977J0059 
Authentic language: French 
Type of procedure: Reference for a preliminary ruling 
+0

Fraxel: आपको बहुत बहुत धन्यवाद! यह एक सम्मोहन की तरह काम करता है। विचार किसी भी तरह से इस फ़ाइल के आउटपुट को डेटाबेस में स्थानांतरित करना है। मेरा मानना ​​है कि आपने भविष्य की समस्या का समाधान किया होगा जब आपने मुझे दिखाया कि न्यूलाइन से कैसे छुटकारा पाना है क्योंकि वे बाद में कुछ खराब कर सकते हैं। फिर से धन्यवाद! – A2D2

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