1
soup = BeautifulSoup(''.join(html))
table = soup.find("table")
firstRow = table.contents[0]

for tr in firstRow:
  if 'Total' in tr:
    text = ''.join(tr.find(text=True))
    print(text)

テーブル要素には、プレーン テキストではなくテキストへのリンクが含まれている場合があります。その場合、上記の for ループはすべてのセルをループし、テキスト 'Total' を検出しません <a title="err">Total</a> 。リンクがある場合、ループを変更してリンク内のテキストを検索するにはどうすればよいですか?

4

1 に答える 1

1

反復変数の呼び出しtrは誤解を招きます。テーブル行を反復処理しています。個々のアイテムはtd、またはth要素、または単なるセルです。表の行ではありません。

Beautiful Soup のドキュメントを見ると、次のstringプロパティが必要なようです。

タグに子が 1 つしかなく、その子が NavigableString の場合、子は .string として使用できます。タグの唯一の子が別のタグで、そのタグに .string がある場合、親タグはその子と同じ .string を持ちます。

そう:

for cell in firstRow:
    if "Total" in cell.string:
        # ...

それがうまくいかない場合 (つまり、文字列内のテキスト以外に必要なものがセルにある場合)、「合計」をテストする前に、テーブル セル内のすべてのテキストを取得する必要があります。

for cell in firstRow:
    text = "".join(cell.find_all(text=True))
    if "Total" in text:
        print(text)
于 2012-09-20T23:41:38.013 に答える