2010-01-06 11 views
14

मैं वेब से डेटा स्क्रैप करने के लिए पाइथन और सुंदर सूप सीख रहा हूं, और एक HTML तालिका पढ़ता हूं। मैं इसे ओपन ऑफिस में पढ़ सकता हूं और यह कहता है कि यह तालिका # 11 है।सुंदरसप का उपयोग करके आप किसी विशेष तालिका से सभी पंक्तियां कैसे प्राप्त करते हैं?

ऐसा लगता है जैसे सुंदर सूप पसंदीदा विकल्प है, लेकिन क्या कोई मुझे बता सकता है कि किसी विशेष तालिका और सभी पंक्तियों को कैसे पकड़ें? मैंने मॉड्यूल दस्तावेज को देखा है, लेकिन मेरे सिर को इसके चारों ओर नहीं मिल सकता है। मुझे जो उदाहरण मिलते हैं, उनमें से कई उदाहरण मुझे ज़्यादा करने की अपेक्षा करते हैं।

उत्तर

24

यदि आपके पास सुंदर सूप के साथ पार्स करने के लिए HTML का एक हिस्सा है तो यह बहुत सीधे आगे होना चाहिए। सामान्य विचार findChildren विधि का उपयोग करके अपनी तालिका में नेविगेट करना है, फिर आप string संपत्ति के साथ सेल के अंदर टेक्स्ट मान प्राप्त कर सकते हैं।

>>> from BeautifulSoup import BeautifulSoup 
>>> 
>>> html = """ 
... <html> 
... <body> 
...  <table> 
...   <th><td>column 1</td><td>column 2</td></th> 
...   <tr><td>value 1</td><td>value 2</td></tr> 
...  </table> 
... </body> 
... </html> 
... """ 
>>> 
>>> soup = BeautifulSoup(html) 
>>> tables = soup.findChildren('table') 
>>> 
>>> # This will get the first (and only) table. Your page may have more. 
>>> my_table = tables[0] 
>>> 
>>> # You can find children with multiple tags by passing a list of strings 
>>> rows = my_table.findChildren(['th', 'tr']) 
>>> 
>>> for row in rows: 
...  cells = row.findChildren('td') 
...  for cell in cells: 
...   value = cell.string 
...   print "The value in this cell is %s" % value 
... 
The value in this cell is column 1 
The value in this cell is column 2 
The value in this cell is value 1 
The value in this cell is value 2 
>>> 
+0

वह चाल थी! कोड काम किया और मैं इसे आवश्यकतानुसार संशोधित करने में सक्षम होना चाहिए। बहुत धन्यवाद। एक आखिरी सवाल। जब आप बच्चों और वें बच्चों के लिए टेबल खोजते हैं तो मैं कोड का पालन कर सकता हूं। क्या यह बस मेरी मेज खोज रहा है और टेबल हेडर और टेबल पंक्तियों को वापस कर रहा है? अगर मैं केवल टेबल पंक्ति चाहता था, तो मैं बस केवल tr के लिए खोज सकता था? कई धन्यवाद फिर से! – Btibert3

+2

हां, '.findChildren (['th', 'tr']) 'टैग प्रकार' ''' या' tr' वाले तत्वों की खोज कर रहा है। यदि आप केवल 'tr' तत्व ढूंढना चाहते हैं तो आप' .findChildren ('tr') '(एक सूची नहीं, केवल स्ट्रिंग) का उपयोग करेंगे –

+0

यह भी ध्यान देने योग्य है कि [PyQuery] (https://pythonhosted.org /pyquery/api.html) सुंदर सूप के लिए वास्तव में वास्तव में एक अच्छा विकल्प है। –

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