2010-12-11 13 views
5

मैं पाइथन और बीटफुल सूप के लिए भी नया हूं! मैंने बीएस के बारे में सुना। इसे सामग्री को पार्स और निकालने के लिए एक बेहतरीन टूल कहा जाता है। तो यहां मैं हूं ...:सुंदर सूप [पायथन] और तालिका में पाठ का निकालने

मैं एक HTML दस्तावेज़ में किसी तालिका के पहले टीडी की सामग्री लेना चाहता हूं। उदाहरण के लिए, मैं इस तालिका

<table class="bp_ergebnis_tab_info"> 
    <tr> 
      <td> 
        This is a sample text 
      </td> 

      <td> 
        This is the second sample text 
      </td> 
    </tr> 
</table> 

मैं BeautifulSoup कैसे उपयोग कर सकते हैं पाठ लेने के लिए "यह एक नमूना पाठ है" है? मैं पूरे तालिका में प्राप्त करने के लिए soup.findAll ('table', attrs = {'class': 'bp_ergebnis_tab_info'}) का उपयोग करता हूं।

धन्यवाद ... या मुझे पर्ल के साथ पूरी चीजें प्राप्त करने का प्रयास करना चाहिए ... जो मैं इतना परिचित नहीं हूं। एक और हल PHP में एक regex होगा।

लक्ष्य [1] देखें: http://www.schulministerium.nrw.de/BP/SchuleSuchen?action=799.601437941842&SchulAdresseMapDO=142323

नोट; चूंकि एचटीएमएल थोड़ा अमान्य है - मुझे लगता है कि हमें कुछ सफाई करना है। इससे बहुत सारे PHP कोड हो सकते हैं - क्योंकि हम PHP में नौकरी को हल करना चाहते हैं। पर्ल भी एक अच्छा समाधान होगा।

कुछ संकेत और एक प्रारंभिक बिंदु के लिए विचारों के लिए बहुत-बहुत धन्यवाद शून्य

+1

ठीक है, स्पष्ट रूप से, आप अपने पर्ल प्रश्नों से अधिक लाभ उठाने में असफल रहे हैं, इसलिए मुझे यह भी यकीन नहीं है कि यह सवाल पर्ल के साथ क्यों टैग किया गया है। साथ ही, हर कुछ हफ्तों में नए खाते न बनाएं: एक बनाएं और इसके साथ चिपके रहें। @zero जानता है कि मैं किस बारे में बात कर रहा हूं। अन्य http: // stackoverflow पर एक नज़र डाल सकते हैं।कॉम/उपयोगकर्ता/477580/thebutcher और http://stackoverflow.com/q/3991571/100754 और वहां से जुड़े प्रश्न। –

उत्तर

12

पहले तालिका मिलेगी (के रूप में आप कर रहे हैं करते हुए)। सूची में पहला आइटम find बल्कि findall से रिटर्न का उपयोग करना (के बजाय सभी पाता की एक सूची लौट रहा - जो मामले में हम एक अतिरिक्त [0] जोड़ने के लिए होगा सूची के पहले तत्व लेने के लिए):

table = soup.find('table' ,attrs={'class':'bp_ergebnis_tab_info'}) 

तो पहले td खोजने के लिए फिर से find का उपयोग करें:

first_td = table.find('td') 

फिर renderContents() का उपयोग पाठ सामग्री को निकालने के लिए:

text = first_td.renderContents() 

... और काम किया जाता है (हालांकि आप भी प्रमुख और पीछे वाले स्पेस को दूर करने के strip() उपयोग कर सकते हैं:

trimmed_text = text.strip() 

यह देना चाहिए:

>>> print trimmed_text 
This is a sample text 
>>> 

के रूप में वांछित।

+0

हैलो psmears, उत्तर के लिए बहुत से धन्यवाद। आप मुझे खूबसूरत सूप का उपयोग करने के लिए प्रोत्साहित करते हैं! आपके संकेत बहुत ही सुन्दर और संक्षिप्त थे। "लियरिंग-ए-न्यू-तकनीक" की इस महान संपत्ति के लिए बहुत धन्यवाद। मैं खुश हूँ। ग्रीटिंग्स शून्य – zero

+0

क्या आप 'text =' की बजाय टेक्स्ट सामग्री के लिए 'find()' खोज सकते हैं? – User

-1

मैं ब्यूटीफुल सूप बहुत ही कुशल उपकरण तो :-) यह अवैध मार्क-अप के साथ एक पृष्ठ पार्स करने के लिए तो यह सक्षम होना चाहिए सक्षम है सीखने रखने लगता है आपके द्वारा संदर्भित पृष्ठ को संभालने के लिए। यदि आप मान्य मार्कअप के साथ एक वैध सुधारित पृष्ठ स्रोत प्राप्त करना चाहते हैं तो आप कमांड BeautifulSoup(html).prettify() कमांड का उपयोग करना चाह सकते हैं।

अपने प्रश्न के लिए के रूप में, अपने पहले soup.findAll(...) आदेश का परिणाम भी एक ब्यूटीफुल सूप वस्तु है और आप इस तरह उस में दूसरी बार कर सकते हैं,:

table_soup = soup.findAll('table' ,attrs={'class':'bp_ergebnis_tab_info'}) 
your_sample_text = table_soup.find("td").renderContents().strip() 

print your_sample_text 
+0

हैलो मार्टिन - महान संकेतों के लिए बहुत सारे धन्यवाद। मैं आपकी पोस्टिंग के बारे में बहुत खुश हूं: आप मुझे सुंदर सूप सीखने के लिए प्रोत्साहित करते हैं! मैं करूँगा! कोड के लिए के रूप में। मैं उपर्युक्त लक्ष्य-यूआरएल को कोड लागू करूंगा। मैं वापस आ गया और अपने सभी निष्कर्षों की रिपोर्ट करता हूं। दोबारा - आपकी मदद के लिए बहुत धन्यवाद! यह मेरे लिए एक महान सीखने वाली संपत्ति है! आपको नमस्कार (और पूरे समुदाय के लिए) – zero

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