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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python

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

Q&A

解決済

1回答

226閲覧

python soup スクレイピング

raonarud

総合スコア88

Python

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

0グッド

0クリップ

投稿2019/03/09 15:32

編集2019/03/10 09:06

pythonでsoupを使ってスクレイピングをしたいのですが。下の場所の価格だけを取得したいのですが。このコードだとうまくいきません。td classの部分になります。ただのclassの部分はtext取得できるのですが tdがつくとうまく取得できません。。。textが含まれないっていうエラーが出てしまします。
どうかよろしくお願いします。

イメージ説明

python

1price = item_elems.find(class_="mainprice").text # 価格
#エラーコード price = item_elems.find(class_="mainprice").text # 価格 AttributeError: 'NoneType' object has no attribute 'text'

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

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

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

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

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

guest

回答1

0

ベストアンサー

item_elems.find(class_="mainprice") が'NoneType'だと出ているので、
item_elems に 対象のtdタグが無いように思いましたが、
item_elems に含まれているのでしょうか?

2019/3/10追記----------------------
ありがとうございます。
Noneになる理由が分からず恐縮ですが、下記で価格を取得できないでしょうか?

python

1#tdタグ内を取得 2tmp = item_elems.find(class_="mainprice").find("td") 3#spanタグは不要なので削除 4tmp.span.decompose() 5#余分な文字削除 6price = tmp.text.replace("¥" , "").replace("(税込)" , "") 7print(price)

投稿2019/03/09 16:22

編集2019/03/10 03:31
clear21

総合スコア76

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

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

raonarud

2019/03/10 01:43

ご回答ありがとうございます。まず item_elems.find(class_="mainprice")のみで試して見ましたがNoneになってました,,,,,,,,,,,,,,,,,
raonarud

2019/03/10 01:45

取得するclassの部分がおかしいのでしょうか?
raonarud

2019/03/10 01:58 編集

item_elems.find(class_="mainprice")のみで取得できたコードはこのようになっております。↓ "","","<td class=""mainprice"">¥498(税込)<span>定価より ¥10 おトク!</span> </td>"
clear21

2019/03/10 02:24

①>item_elems.find(class_="mainprice")のみで試して見ましたがNoneになってました,,,,,,,,,,,,,,,,, と ②>item_elems.find(class_="mainprice")のみで取得できたコードはこのようになっております。↓ について、仰っていることが異なるように読み取れてしまったのですが、 Noneになるときと、htmlコードが取得できるとき、それぞれ実行したpythonコードは何でしょうか?
raonarud

2019/03/10 03:48 編集

すみません。 ➀ tem_elems.find(class_="mainprice").textだとNone ② tem_elems.find(class_="mainprice")だと取得できたコードはこれ↓ "","","<td class=""mainprice"">¥498(税込)<span>定価より ¥10 おトク!</span> </td>" になります。わかりづらくてすみません。どうぞ宜しくお願い致します
raonarud

2019/03/10 03:45

ご返信ありがとうございます。上記コードを試させていただいたところ AttributeError: 'NoneType' object has no attribute 'span' になってしましますねえ。。。なぜなんでしょうw テキストも取り出せないし,,,,,,,,
raonarud

2019/03/10 03:52

ちなみにこのコードのみの追加でもエラーになってしましますね,,,,, #tdタグ内を取得 price = item_elems.find(class_="mainprice").find("td") エラー price = item_elems.find(class_="mainprice").find("td") AttributeError: 'NoneType' object has no attribute 'find'
clear21

2019/03/10 06:40

>② tem_elems.find(class_="mainprice")だと取得できたコードはこれ↓ >"","","<td class=""mainprice"">¥498(税込)<span>定価より ¥10 おトク!</span> ></td>" ↑ということでしたが、 >price = item_elems.find(class_="mainprice").find("td") だとNoneTypeでエラーっていうことですか。 上記②で取得できるということだったので、 少なくとも「price = ~」でNoneTypeでエラーは出ない想定でした。。。 対象Webページと item_elems にどのような関数値を入れたかを 教えていただくことはできますか?
raonarud

2019/03/10 08:26 編集

tem_elems.find(class_="mainprice")だと取得できますが.find("td")を語尾に追加するとNoneエラーになってしましますね。 item_elemsの関数部分はこのような感じになっております。 for item_elems in soup.select('div.list_group'):   tem_elems.find(class_="mainprice")
clear21

2019/03/10 11:06

ありがとうございます。 対象のWebページも教えていただくことはできますか?
raonarud

2019/03/10 12:46

すみません。"","","<td class=""mainprice"">¥498(税込)<span>定価より ¥10 おトク!</span> </td>"の場合のspanの部分を非表示にすれば表示できるところまで進みましたがspanを非表示にすることは可能でしょうか? .find('span')だとその部分だけが表示されますがその逆は可能でしょうか・?
clear21

2019/03/10 12:58

可能です。 .span.decompose() で削除できます。
raonarud

2019/03/10 13:03

実行して見ましたがNoneになってしましますねー HMTLコードはこれを取得できているのですが,,,, "","","<td class=""mainprice"">¥498(税込)<span>定価より ¥10 おトク!</span> </td>"
raonarud

2019/03/10 15:02

for で回しているのがダメなんでしょうか
raonarud

2019/03/10 15:10

urlをお送りさせて頂きますので、詳しく見ていただけないでしょうか?どうぞ宜しくお願い致します
raonarud

2019/03/10 15:13

HMTL箱のような状態になっております。 <tr><th class="tab01">価格</th> <td class="mainprice">¥498(税込)<span>定価より ¥12 おトク!</span> </td> </tr> <tr><th class="tab01">発売年月日</th><td class="tab01">2001/09-16</td></tr> </table> </div> </div>
clear21

2019/03/11 04:04

>urlをお送りさせて頂きますので、 >詳しく見ていただけないでしょうか? >どうぞ宜しくお願い致します →承知致しました。URLのご提示宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問