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

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

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

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

Q&A

1回答

751閲覧

エラーの改善方法を詳しく教えて欲しいです。

Issei.Yaguchi

総合スコア1

Python

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

0グッド

0クリップ

投稿2021/08/17 01:59

前提・実現したいこと

Python初心者です。Qiitaのhttps://qiita.com/cocet33000/items/7beb9e67be6ca07acd15
におけるサンプルコードを実装したいのですがエラーが改善できず実行できないので改善方法を教えて欲しいです。jupyter notebookで実行しています。

発生している問題・エラーメッセージ

Error --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-26-6c2b0f96e446> in <module> 8 URL = 'https://www.fashion-press.net/snaps/sex/mens?page=' + str(page) 9 soup = openURL(URL) ---> 10 snaps = soup.find_all(attrs={'class': 'fp_media_tile'}) 11 12 if len(snaps) != 0: # 写真がある場合はブランドを取得 AttributeError: 'bool' object has no attribute 'find_all'

該当のソースコード

Python

1import re 2import uuid 3 4from bs4 import BeautifulSoup 5import requests 6import numpy as np 7import pandas as pd 8import collections 9 10# URLからbs4オブジェクトを生成 11def openURL(URL:int): 12 res = requests.get(URL) 13 if res.status_code != requests.codes.ok: 14 print('Error') 15 return(False) 16 return BeautifulSoup(res.text) 17 18# bs4オブジェクトから着用ブランドのリストを取得 19def getBrandList(snaps): 20 BrandList = [] 21 for snap in snaps: 22 BrandList.append(list(set(map(lambda x: x.text, snap.find_all('a', attrs = {'href':re.compile('^/snaps/brand')}))))) #1コーデに同ブランドは1つまで 23 24 return BrandList 25 26# bs4オブジェクトから名前を取得 27def getNameList(snaps): 28 NameList = [] 29 for snap in snaps: 30 NameList.append(snap.find('a')['title']) 31 return NameList 32 33if __name__ == '__main__': 34 flag = True 35 page = 1 36 BrandList = [] 37 NameList = [] 38 39 while flag: 40 URL = 'https://www.fashion-press.net/snaps/sex/mens?page=' + str(page) 41 soup = openURL(URL) 42 snaps = soup.find_all(attrs = {'class':'fp_media_tile'}) 43 44 45 if len(snaps) != 0: #写真がある場合はブランドを取得 46 tmpBrandList = getBrandList(snaps) 47 BrandList.extend(tmpBrandList) 48 NameList.extend(getNameList(snaps)) 49 print('get page' + str(page)) 50 page += 1 51 52 else: #写真がない場合は終了 53 flag = False 54 print('END') 55 56 df = pd.DataFrame(data=BrandList, index=NameList) #pandasのDataFrame型に 57 df.to_csv('StreetSnapMen.csv') # csv形式で保存

補足

find_allを何かに変えれば良いのでしょうか?
丁寧に教えてもらえると幸いです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

udon-ken

2021/08/17 02:09 編集

これ、サンプルコードを実装というか、サンプルコードをそのまま丸ごとコピーして実行してこのような結果になっているのでしょうか??
Issei.Yaguchi

2021/08/17 02:30

なので実行結果は >>> df.shape (1492, 8) のようになるはずなのですがならなかったので修正点(どこをどのように修正すれば良いか)を教えて欲しいです
udon-ken

2021/08/17 02:37 編集

であればotnさんの回答の通りです。 関数openURL()からFalseというbool値が返ってきているため、それに対してfind_allというメソッドを実行しようとして、「bool型にはfind_allは無いよ」と言われています。 解決策は多分…無いですね。 そのURLに対してブラウザでアクセスするとアクセスできるのにプログラムからアクセスしようとするとエラーになるというのは…スクレイピングされないように何らかの対策をされたような気がします。 サンプルコード、2年以上前のものっぽいですしね。 ああ・・・無いというかあるにはありますが、相手が拒否しているものの突破方法を教えるのはモラルとしてあれなんで・・・それは自分で考えて下さいとしか言えないですね。
Issei.Yaguchi

2021/08/17 02:40

わかりました...丁寧な解答ありがとうございます!
guest

回答1

0

openURLからfalseが返っています。
つまり、if res.status_code != requests.codes.ok:が成立したということで、HTMLページの取得が失敗したと言うことでしょう。

あと、
誤:サンプルコードを実装したいのですが
正:サンプルコードを実行したいのですが

投稿2021/08/17 02:10

otn

総合スコア84555

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

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

Issei.Yaguchi

2021/08/17 02:27

otnさん迅速な対応ありがとうございます。また正しい文章の指摘ありがとうございます。 if res.status_code != requests.codes.ok:が成立しないためにはreturn(False)ごと削除すれば良いということなのでしょうか。 初心者ですみません。
otn

2021/08/17 02:37

ウェブページが取得できていないので、プログラムをどうしても無理です。 ・URLが間違っている ・ネットワーク的な原因でウェブページが取得できない のどちらかでしょう。 まずは、res.status_code をprintしてみて値を見ましょう。
Issei.Yaguchi

2021/08/17 02:41

わかりましたやってみます! 迅速な対応ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問