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

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

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

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

Q&A

解決済

1回答

870閲覧

複数のURLから共通のclassで取得した値をistに代入し、共通のclassが該当しないページだけ代わりの値を代入する方法

youri0326

総合スコア22

Python

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

0グッド

0クリップ

投稿2019/01/21 09:29

同一ドメインの複数のURLから特定の値を取得したいと思います。

その際、共通のclassを元に、値の取得を考えておりますが、ページによっては該当のclassがありません。
textによってタグを外した状態で値を取得したいのですが、classがないページの値が含まれているため『object has no attribute'text'』とエラーが表示されます。

※エラーにならないページだけで取得した場合、またはtextを指定しなければエラーにはなりません。

取得した値は、タグを外した状態で、順番通りにlistに代入し、エラーの原因となるページに関しては、"none"などの文字列としてlistに代入したいと思っております。

エラーの問題を解決する方法をご教示いただけたら幸いです。

#試したこと兼、該当のソース

import requests
from bs4 import BeautifulSoup
import xlrd
import openpyxl
import time
import pandas as pd
from multiprocessing import Pool,cpu_count

all_urls = ['https://domain.com/a','https://domain.com/b','https://domain.com/c','https://domain.com/d']
csv_list = []

for url in all_urls:
time.sleep(1)
response = requests.get(url)
response.encoding = response.apparent_encoding
soup = BeautifulSoup(response.text, 'html.parser')
atag = soup.find('span',{"class" : "A"})
answer = atag.text
csv_list.append(answer)

#該当URLのソース例:https://domain.com/a

<span class="A">apple</span>

#該当URLのソース例:https://domain.com/b
※このページだけ該当のclassが存在しないという仮定です

#該当URLのソース例:https://domain.com/c
<span class="A">cat</span>

#該当URLのソース例:https://domain.com/d
<span class="A">diamond</span>

#取得後の目的とするリストの状態
csv_list =['apple','none','cat','diamond',]

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

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

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

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

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

guest

回答1

0

ベストアンサー

atagがNoneでないときとそうであるときとで分岐すれば良いです。

Python

1if atag: 2 answer = atag.text 3else: 4 answer = 'none'

あるいは

Python

1answer = atag.text if atag else 'none'

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
Python
特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

投稿2019/01/21 09:37

編集2019/01/21 09:38
LouiS0616

総合スコア35660

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

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

youri0326

2019/01/21 09:49

ありがとうございます。エラーなく稼動できました。teratailのコードの書き方について、かしこまりました。 ご丁寧にご教示いただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問