0

BeautifulSoupを使用して HTML ページを解析しています。ページの最初のテーブルで作業する必要があります。そのテーブルにはいくつかの行が含まれています。各行にはいくつかの「td」タグが含まれており、「td」タグの 1 つに「img」タグがあります。そのテーブルのすべての情報を取得したい。しかし、そのテーブルを印刷すると、「img」タグに関連するデータは取得されません。

soap.findAll("table") を使用してすべてのテーブルを取得し、処理する最初のテーブルを選択しました。html は次のようになります。

<table id="abc"
  <tr class="listitem-even">
    <td class="listitem-even">
      <table border = "0"> <tr> <td class="gridcell">
               <img id="img_id" title="img_title" src="img_src" alt="img_alt" /> </td> </tr>
      </table>
    </td>
    <td class="listitem-even"
      <span>some_other_information</span>
    </td>
  </tr>
</table>

「img」タグを含むテーブル内のすべてのデータを取得するにはどうすればよいですか? ありがとう、

4

1 に答える 1

3

ネストされたテーブルがあるため、tr/td/img タグを解析する前に、ツリー内のどこにいるかを確認する必要があります。

from bs4 import BeautifulSoup
f = open('test.html', 'rb')
html = f.read()
f.close()
soup = BeautifulSoup(html)

tables = soup.find_all('table')

for table in tables:
     if table.find_parent("table") is not None:
         for tr in table.find_all('tr'):
                 for td in table.find_all('td'):
                         for img in td.find_all('img'):
                                 print img['id']
                                 print img['src']
                                 print img['title']
                                 print img['alt']

あなたの例に基づいて以下を返します:

img_id
img_src
img_title
img_alt
于 2013-09-16T15:10:56.147 に答える