2013-06-19 9 views
6

के साथ एचटीएमएल से टेबल सामग्री निकालने के लिए मैं कुछ एचटीएमएल दस्तावेज़ से कुछ जानकारी निकालना चाहता हूं। जैसेपाइथन और सुंदर सूप

<table class="details"> 
      <tr> 
        <th>Advisory:</th> 
        <td>RHBA-2013:0947-1</td> 
      </tr> 
      <tr>  
        <th>Type:</th> 
        <td>Bug Fix Advisory</td> 
      </tr> 
      <tr> 
        <th>Severity:</th> 
        <td>N/A</td> 
      </tr> 
      <tr>  
        <th>Issued on:</th> 
        <td>2013-06-13</td> 
      </tr> 
      <tr>  
        <th>Last updated on:</th> 
        <td>2013-06-13</td> 
      </tr> 

      <tr> 
        <th valign="top">Affected Products:</th> 
        <td><a href="#Red Hat Enterprise Linux ELS (v. 4)">Red Hat Enterprise Linux ELS (v. 4)</a></td> 
      </tr> 


    </table> 

मैं की तारीख की तरह सूचना निकालना चाहते हैं: यह एक मेज इस तरह (अन्य सामग्री के साथ अन्य तालिकाओं के अलावा) शामिल है "पर जारी किए गए:"। ऐसा लगता है कि BeautifulSoup4 यह आसानी से कर सकता है, लेकिन किसी भी तरह से मैं इसे सही नहीं मानता। मेरे कोड अब तक:

from bs4 import BeautifulSoup 
    soup=BeautifulSoup(unicodestring_containing_the_entire_htlm_doc) 
    table_tag=soup.table 
    if table_tag['class'] == ['details']: 
      print table_tag.tr.th.get_text() + " " + table_tag.tr.td.get_text() 
      a=table_tag.next_sibling 
      print unicode(a) 
      print table_tag.contents 

यह मैं पहली तालिका पंक्ति की सामग्री हो जाता है, और यह भी सामग्री की एक सूची। लेकिन अगली भाई चीज सही काम नहीं कर रही है, मुझे लगता है कि मैं इसे गलत इस्तेमाल कर रहा हूं। बेशक मैं सिर्फ सामग्री को पार्स कर सकता हूं, लेकिन मुझे लगता है कि सुंदर सूप हमें यह करने से रोकने के लिए डिज़ाइन किया गया था (अगर मैं खुद को पार्स करना शुरू करता हूं, तो मैं के रूप में पूरे डॉक्टर को अच्छी तरह से पार्स कर सकता हूं ...)। अगर कोई मुझे इस बारे में जानकारी दे सकता है कि इसे कैसे लागू किया जाए, तो मैं आभारी रहूंगा। यदि सुंदर सूप तो बेहतर तरीका है, तो मुझे इसके बारे में में रुचि होगी।

उत्तर

13
>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup(unicodestring_containing_the_entire_htlm_doc) 
>>> table = soup.find('table', {'class': 'details'}) 
>>> th = table.find('th', text='Issued on:') 
>>> th 
<th>Issued on:</th> 
>>> td = th.findNext('td') 
>>> td 
<td>2013-06-13</td> 
>>> td.text 
u'2013-06-13'