@hiromax358 (Hiro)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Pythonコードで、あるサイトに行って、HTMLからテキストにし、stripで余計な文字を削除して表示させたいのですが。

初めて質問をさせて頂きます。

Pythonの勉強を始めたばかりのゴリゴリ初心者なのです。

あるサイトに行って、HTMLをテキストで抜き取って
stripで余計な文字を削除して表示させたいのですが


AttributeError Traceback (most recent call last)
in
19 for t in name:
20 ret.append(t.text)
---> 21 ret.strip(t.text)
22
23 print (ret) # ['item1', 'item2', ~]

AttributeError: 'list' object has no attribute 'strip'

と以上のエラーが出てしまいます。
何とか自分なりに、ネットで調べたのですがどうしても解かりません。

どなたか、教えて頂けないでしょうか?

コードは以下の通りです。
自分で書いたコードではなく、参考にさせて頂いたコードに

ret.strip(t.text)

のみを追加したのみです。
これがなければ正常に動作します。


モジュールのインポート

import urllib.request
from bs4 import BeautifulSoup

対象のサイトURL

url = "URLサイト"

URLリソースを開く

res = urllib.request.urlopen(url)

インスタンスの作成

soup = BeautifulSoup(res, 'html.parser')

必要な要素とclass名

name = soup.find_all("div", class_="search_result")

取得したタイトル情報を出力

ret = []
for t in name:
ret.append(t.text)
ret.strip(t.text)

print (ret) # ['item1', 'item2', ~]

0 likes

4Answer

エラーはリストオブジェクトにstrip() という組み込み関数は定義されていませんよ、ということです。
str オブジェクトならstripは定義されているのでt.text.strip() としたらいいんじゃないでしょうか。

1Like

Comments

  1. @hiromax358

    Questioner

    Adaachill様

    t.text.strip() を追加して
    かなり見やすい、テキストが出てきました。

    関数定義されていなかったのですね。
    勉強になりました。

    ちなみに、retに入れたテキストの余計な文字を削除する事は
    可能なのでしょうか?
  2. リスト内包表記でret = [i.strip() for i in ret]
    とかでどうでしょう。

image.png

\n の改行ならstrip()で消せています。
示してくれたコードでは改行を消した後の出力をretに代入していないため、retの中身が変わっていないだけです。変数名をretのままにしたいならret = ret.strip()にすればいいです。

このことはpython 改行削除とかでぐぐると出てくると思いますよ。
自分でまずは試したり調べるのが大事だと思います。

1Like

Adaachill様

返事遅れまして、すみませんでした。

重ね重ね、ご返答いただき有難うございます。

自分なりに、ここ数日考えていたのですがやはりどうしても解からない事があります。

最終的に簡略化するとこの様な事例なのです。
それは、以下のコードです。

ret = 'abcd \n\n\n\n\n\n\n\n '
ret.strip()
print(ret)

※ ¥はバックスラッシュです(すみません、変換できませんでした・・・)

このコードを実行して、自分では 
abcdと表示させるつもりが、\nの改行が消えてくれません。
この場合はどの様なコードを使えば良いのでしょうか?

何卒、宜しくお願い致します。

0Like

ご返答、有難うございます。

自分でもググって調べたのですが、どうしても解かりませんでした。

根本的な基礎を勉強する事にします。

色々、有難うございました。

0Like

Your answer might help someone💌