2013-06-19 4 views
6

Я хочу извлечь определенную информацию из html-документа. Например. она содержит таблицу (среди других таблиц с другим содержимым), как это:Извлечение содержимого таблицы из html с помощью python и 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> 

Я хочу, чтобы извлечь информацию, как дата «Дата выпуска:». Похоже, что 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 

Это заставляет меня содержимое первой строки таблицы, а также перечисление содержимого. Но следующий брат не работает правильно, я думаю, я просто использую его неправильно. Конечно, я мог просто разобрать содержимое, но мне кажется, что красивый суп был разработан, чтобы помешать нам сделать именно это (если я начну разбираться, я мог бы как хорошо разобрать весь документ ...). Если бы кто-то мог просветить меня о том, как это сделать, я буду благодарен. Если есть лучший способ, то BeautifulSoup, мне было бы интересно узнать об этом .

ответ

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' 
Смежные вопросы