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

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

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

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

Python

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

Q&A

2回答

1134閲覧

pythonのスクレイピング(タグだけ異なる場合)

help-man

総合スコア58

スクレイピング

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

Python

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

0グッド

1クリップ

投稿2021/07/30 11:57

編集2021/07/31 04:24

pythonのスクレイピングでタグは違うけどclassは一緒の場合のスクレイピング方法が分かりません。
例えば

<li class="Aという属性値"><a href="〇〇">123</a></li> <span class="Bという属性値">456<br class="pc-none">(-0.5%)</span> <h1 class="Cという属性値"><a href="〇〇">こんにちは</a> <small>(7/30)</small></h1> があった場合、どうやって綺麗にコードを書けばよろしいのでしょうか? いちいち AAA = soup.find(class_="Aという属性値") print((AAA).text)←この場合は123 BBB = soup.find(class_="Bという属性値") print((BBB).text)←この場合は456と-0.5% CCC = soup.find(class_="Cという属性値") print((CCC).text)←この場合は『こんにちは』と(7/30) と書きたくありません。 つまりliとspanとh1のclassを一括りにしてスクレイピングしたいです。 調べたところおそらく【soup.select(".属性値A .属性値B .属性値C")】と書くんだと思います。 何卒ご教授をお願いいたします。

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

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

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

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

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

attakei

2021/07/30 13:06 編集

質問内容のコード例だと、全要素でclassも違っています。 そのため質問の文との内容齟齬が起きています。 内容の確認と必要に応じて補足等をお願いします。
help-man

2021/07/30 13:29

早速のご返信ありがとうございました。 すいません。全要素が違うのは理解ができるのですがclassが違うとはどういう意味でしょうか?
attakei

2021/07/30 13:37

↑への返信の前に念のため確認したいのですが、質問文にあるclassは何を指していますか?この内容だと2通りの解釈ができるのですが、 1. HTMLとしてのclass属性の中身 2. Python側のコードのclass 3. その他、上記とは関係ない何か 最初の追記・修正依頼は(1)の解釈を前提にしています。 例示されているHTML相当のものは、実体としては <li class="A">www</li> <span class="B">xxx</span> <h1 class="C">yyy</h1> <ul class="D">zzz</ul> という形態になるのですが、各要素のclassはそれぞれ、A・B・C・Dとなっておりバラバラです。 (少なくとも「一緒」という表現にはならないと思っています)
help-man

2021/07/30 13:46

HTMLとしてのclass属性の中身となっております <li class="A">〇〇</li> <span class="B">〇〇</span> <h1 class="C">〇〇</h1> <ul class="D">〇〇</ul> となっております。 大変失礼いたしました。
otn

2021/07/30 14:03

あなたの言う「classは一緒の場合」とは具体的にどんな意味ですか?
help-man

2021/07/30 15:34

例えば『<li class="A"><a href="〇〇">123</a></li>』や『<span class="B">456<br class="C">789</span>』です。 class(属性)を指定して要素(ここで言う『123』と『456』と『789』)を取得したいんです
otn

2021/07/30 15:44 編集

「classは一緒」というのは一般的には「class属性の値は同じ」という意味なのですが、 あなたの言う「一緒」とは一般的な日本語でどういう意味ですか?
help-man

2021/07/31 04:15 編集

私の言う一緒とは「classという入れ物の名前が一緒」という意味です。属性値は違います。
otn

2021/07/30 16:31

「classという入れ物の名前が一緒」というのは、「どれにもclass属性がある」という意味ですかね? 属性値は不問で、class属性が有りさえすればいいと言うこと?
help-man

2021/07/31 04:16 編集

「どれにもclass属性がある」という意味です。←訂正しました。すいません。
quickquip

2021/07/31 02:53 編集

情報はこの欄にてはなく質問を編集して記載してください
quickquip

2021/07/31 02:52

質問は意図がわかるように編集しておいてください。
help-man

2021/07/31 04:13

quickquipさん>編集しましたがこれでいかがでしょうか?
guest

回答2

0

属性値は不問でclass属性が有りさえすればいいです

Python

1import re 2 3soup.find_all(class_=re.compile("."))

でしょうか。

投稿2021/07/30 16:39

otn

総合スコア85901

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

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

0

soup.select('[class]')

でも。

python

1>>> text="""<li class="A"><a href="〇〇">123</a></li> 2... <span class="B">456<br class="pc-none">(-0.5%)</span> 3... <h1 class="C"><a href="〇〇">こんにちは</a> <small>(7/30)</small></h1>""" 4 5>>> from bs4 import BeautifulSoup 6 7>>> soup = BeautifulSoup(text, 'lxml') 8 9>>> soup.select('[class]') 10[<li class="A"><a href="〇〇">123</a></li>, <span class="B">456<br class="pc-none"/>(-0.5%)</span>, <br class="pc-none"/>, <h1 class="C"><a href="〇〇">こんにちは</a> <small>(7/30)</small></h1>] 11 12>>> for element in soup.select('[class]'): 13... print(element.text) 14123 15456(-0.5%) 16 17こんにちは (7/30)

投稿2021/07/30 20:55

quickquip

総合スコア11235

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問