いくつかの不安定なHTMLテーブルをBeautifulSoupのリストに解析するのに苦労しています。問題のテーブルには</td>タグがありません。
次のコードを使用します(私が解析している実際のテーブルではありませんが、機能的には似ています):
import bs4
test = "<table> <tr><td>1<td>2<td>3</tr> <tr><td>1<td>2<td>3</tr> </table>"
def walk_table2(text):
"Take an HTML table and spit out a list of lists (of entries in a row)."
soup = bs4.BeautifulSoup(text)
return [[x for x in row.findAll('td')] for row in soup.findAll('tr')]
print walk_table2(test)
私に与える:
[[<td>1<td>2<td>3</td></td></td>, <td>2<td>3</td></td>, <td>3</td>], [<td>4<td>5<td>6</td></td></td>, <td>5<td>6</td></td>, <td>6</td>]]
予想よりも:
[[<td>1</td>, <td>2</td>, <td>3</td>], [<td>1</td>, <td>2</td>, <td>3</td>]]
Beautiful Soupが使用しているlxmlパーサーは、<td>の次のインスタンスではなく、</tr>の次のインスタンスの前に</td>タグを追加することを決定したようです。
この時点で、パーサーが終了tdタグを正しい場所に配置するための適切なオプションがあるかどうか、または文字列をBeautifulSoupに投げる前に正規表現を使用して手動で配置する方が簡単かどうか疑問に思っています。 。 何かご意見は?前もって感謝します!