2013-06-19 41 views
6

Tôi muốn trích xuất một số thông tin nhất định ra khỏi tài liệu html. Ví dụ. nó chứa một bảng (trong số bảng khác với các nội dung khác) như thế này:Trích xuất nội dung bảng từ html bằng python và BeautifulSoup

<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> 

tôi muốn trích xuất thông tin như ngày "Cấp ngày:". Có vẻ như BeautifulSoup4 có thể thực hiện điều này một cách dễ dàng, nhưng bằng cách nào đó tôi không quản lý nó đúng cách. Mã của tôi cho đến thời điểm này:

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 

Điều này cho tôi nội dung của hàng trong bảng đầu tiên và danh sách nội dung. Nhưng điều anh chị em tiếp theo là không làm việc đúng, tôi đoán tôi chỉ sử dụng nó sai. Tất nhiên tôi chỉ có thể phân tích nội dung thingy, nhưng dường như với súp đẹp được thiết kế để ngăn chúng tôi thực hiện chính xác điều này (nếu tôi bắt đầu phân tích bản thân mình, tôi có thể là cũng phân tích cú pháp toàn bộ tài liệu ...). Nếu ai đó có thể khai sáng cho tôi về cách làm thế nào để hoàn thành điều này, tôi sẽ rất biết ơn. Nếu có một cách tốt hơn thì BeautifulSoup, tôi sẽ quan tâm đến số nghe về điều đó.

Trả lời

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' 
Các vấn đề liên quan