質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1910閲覧

python beautifulsoup タグの追加について

Wish_N

総合スコア35

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/08/13 09:02

下記のhtmlを読み込みタグを追加して、再度保存したいと考えています。

対象ファイルのhtml構成

html

1<table border="1" class="dataframe"> 2 <thead> 3 <tr style="text-align: right;"> 4 <th></th> 5 <th></th> 6 <th>a</th> 7 <th>b</th> 8 <th>c</th> 9 <th>d</th> 10 <th>e</th> 11 <th>f</th> 12 <th>g</th> 13 <th>h</th> 14 <th>i</th> 15 <th>j</th> 16 <th>k</th> 17 </tr> 18 <tr> 19 <th>L</th> 20 <th></th> 21 <th></th> 22 <th></th> 23 <th></th> 24 <th></th> 25 <th></th> 26 <th></th> 27 <th></th> 28 <th></th> 29 <th></th> 30 <th></th> 31 <th></th> 32 </tr> 33 </thead> 34 <tbody> 35 <tr> 36 <th>123</th> 37 <td></td> 38 <td>789</td> 39 <td>789</td> 40 <td>789</td> 41 <td>789</td> 42 <td>789</td> 43 <td>789</td> 44 <td>789</td> 45 <td>789</td> 46 <td>789</td> 47 <td>789</td> 48 <td>789</td> 49 </tr> 50 </tbody> 51</table>

上記のhtmlファイルに、下記のタグを追加したいと考えています。

html

1<tr style="text-align: left;" > 2    <th colspan="13">aaaaaaa</th> 3</tr>

理想の位置は、<thrad>タグの直後に追加したいと考えています。

html

1 <thead> 2 <tr style="text-align: left;" > 3 <th colspan="13">aaaaaaa</th> 4 </tr> 5 <tr style="text-align: right;"> 6 <th></th> 7 <th></th> 8 <th>a</th> 9 <th>b</th>

beautifulsoupでタグの追加は出来るのですが、
soup = BeautifulSoup(f.read(), 'html.parser')
nt = soup.new_tag('tr', id='code')

意図した位置にタグの追加を行うことができていません。
また、タグの追加を行った後のhtmlファイルを保存することもできていません。
実装方法に関して回答いただけると幸いです。

不足情報等ありましたら追加させていただきます。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

insert で指定の位置に挿入してみてください。

スクレイピング - Beautiful Soup の DOM ツリーの編集方法 まとめ - Pynote

python

1html = """ 2<table border="1" class="dataframe"> 3 <thead> 4 <tr style="text-align: right;"> 5 <th></th> 6 <th></th> 7 <th>a</th> 8 <th>b</th> 9 <th>c</th> 10 <th>d</th> 11 <th>e</th> 12 <th>f</th> 13 <th>g</th> 14 <th>h</th> 15 <th>i</th> 16 <th>j</th> 17 <th>k</th> 18 </tr> 19 <tr> 20 <th>L</th> 21 <th></th> 22 <th></th> 23 <th></th> 24 <th></th> 25 <th></th> 26 <th></th> 27 <th></th> 28 <th></th> 29 <th></th> 30 <th></th> 31 <th></th> 32 <th></th> 33 </tr> 34 </thead> 35 <tbody> 36 <tr> 37 <th>123</th> 38 <td></td> 39 <td>789</td> 40 <td>789</td> 41 <td>789</td> 42 <td>789</td> 43 <td>789</td> 44 <td>789</td> 45 <td>789</td> 46 <td>789</td> 47 <td>789</td> 48 <td>789</td> 49 <td>789</td> 50 </tr> 51 </tbody> 52</table> 53""" 54 55from bs4 import BeautifulSoup 56 57soup = BeautifulSoup(html, "html.parser") 58nt = soup.new_tag("tr", id="code") 59 60# 追加するタグ 61tag_to_add = BeautifulSoup( 62 """ 63<tr style="text-align: left;" > 64    <th colspan="13">aaaaaaa</th> 65</tr>""" 66) 67 68# thread の子のインデックス0の位置 (つまり、先頭) に挿入する。 69soup.thead.insert(0, tag_to_add) 70print(soup) 71 72# 保存する。 73with open("edit.html", "w") as f: 74 f.write(str(soup))
<table border="1" class="dataframe"> <thead> <tr style="text-align: left;">     <th colspan="13">aaaaaaa</th> </tr> <tr style="text-align: right;"> <th></th> <th></th> <th>a</th> <th>b</th> <th>c</th> <th>d</th> <th>e</th> <th>f</th> <th>g</th> <th>h</th> <th>i</th> <th>j</th> <th>k</th> </tr> <tr> <th>L</th> <th></th> <th></th> <th></th> <th></th> <th></th> <th></th> <th></th> <th></th> <th></th> <th></th> <th></th> <th></th> </tr> </thead> <tbody> <tr> <th>123</th> <td></td> <td>789</td> <td>789</td> <td>789</td> <td>789</td> <td>789</td> <td>789</td> <td>789</td> <td>789</td> <td>789</td> <td>789</td> <td>789</td> </tr> </tbody> </table>

投稿2019/08/13 09:16

編集2019/08/13 09:17
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wish_N

2019/08/13 09:53

ありがとうございます。 無事に意図した結果を得ることができました。 質問直後に正確な回答を頂け大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問