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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

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

Q&A

解決済

1回答

604閲覧

python 要素を特定し、その要素より下の部分からスクレイピング

keisukefukuhara

総合スコア7

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

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

0グッド

0クリップ

投稿2021/12/08 06:14

前提・実現したいこと

<div class> ```html <div class> <h1> </h1> <p> </p> <p> </p> <h2> </h2> <p> </p> <i> </i> <p> </p> <h3> </h3> <p> </p> <i>hoge</i> <ul> </ul> <li>hoge2</li> <li>hoge3</li> <li>hoge4</li> <li>hoge5</li> <i>hoge6</i> <ul> </ul> <li>hoge7</li> <li>hoge8</li> <li>hoge9</li> <li>hoge10</li> <h3> </h3> <p> </p> <i>hoge11</i> <ul> </ul> <li>hoge12</li> <li>hoge13</li> <li>hoge14</li> <li>hoge15</li> <h2> </h2> <p> </p> <p> </p> <ul> </ul> <li>hogehoge</li> <li>hogehoge2</li> <li>hogehoge3</li> <li>hogehoge4</li> </div> ``` 上記のような構造のwebサイトがあった際に、下記のような動作を行いたいのですが、実現可能でしょうか 1.<h3>を見つけてくる 2.<h3>の下にある<i>を見つけてテキストを取得 3.<h3>の下にある<ul>から<li>のテキストをそれぞれ抜き出す 4.次の<h3>を探してきて2、3を行う 5.<h2>が出てきたらストップし、それ以降の情報を取らない

実現したいのは<h3>を探してきて、それ以降の情報を取り出しリスト化。そして<h2>が出てきたところで情報取得を終わるということを自動化

困っていること
情報を取得したい範囲が<div>で囲われていないので、<div>での範囲指定ができない。<h3>から<h2>までという範囲指定は可能かどうかがわからない

上記のような範囲指定が可能ならば、後はその範囲でfor文を回せば実現可能だと感じています。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

求めている手順とは違いますが、欲しいのはこういう結果ではないのですか?

python

1from bs4 import BeautifulSoup 2 3html = '''<div class> 4<h1> </h1> 5 <p> </p> 6 <p> </p> 7 <h2> </h2> 8 <p> </p> 9 <i> </i> 10 <p> </p> 11 <h3> </h3> 12 <p> </p> 13 <i>hoge</i> 14 <ul> </ul> 15 <li>hoge2</li> 16 <li>hoge3</li> 17 <li>hoge4</li> 18 <li>hoge5</li> 19 <i>hoge6</i> 20 <ul> </ul> 21 <li>hoge7</li> 22 <li>hoge8</li> 23 <li>hoge9</li> 24 <li>hoge10</li> 25 <h3> </h3> 26 <p> </p> 27 <i>hoge11</i> 28 <ul> </ul> 29 <li>hoge12</li> 30 <li>hoge13</li> 31 <li>hoge14</li> 32 <li>hoge15</li> 33 <h2> </h2> 34 <p> </p> 35 <p> </p> 36 <ul> </ul> 37 <li>hogehoge</li> 38 <li>hogehoge2</li> 39 <li>hogehoge3</li> 40 <li>hogehoge4</li> 41</div>''' 42 43soup = BeautifulSoup(html) 44result = [] 45for h3 in soup.find_all('h3'): 46 for ns in h3.findNextSiblings(): 47 if ns.name == 'i': 48 result.append(ns.text) 49 break 50 51print(result)

実行結果

python

1>>> print(result) 2['hoge', 'hoge11']

投稿2021/12/08 06:38

ppaul

総合スコア24670

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

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

keisukefukuhara

2021/12/08 06:50

ppaul様 回答ありがとうございます。 得たい結果としては [['hoge', 'hoge2'], ['hoge', 'hoge3'],........., ['hoge', 'hoge5'], ['hoge11', 'hoge12'], ['hoge11', 'hoge13'] ......['hoge11', 'hoge15']] というリストを作りたいです。
keisukefukuhara

2021/12/08 07:43

ppaul様 findNextSiblings() を使用すれば欲しい情報が得られそうです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問