前提・実現したいこと
pythonのbeautifulSoupでfind('aaaa').textを実行した際、find('aaaa')で要素がない場合には、「AttributeError: 'NoneType' object has no attribute 'text'」となってしまいますが、要素がない場合はこのエラーを発生させずに別の文字で出力したいと考えています。
そこで、lambda関数を組み合わせて、findで要素がない場合に返り値として文字列の'None'を返せないかとコードを記載したのですが、上手くデータが取得できません。
lambda関数を使わない方法でもよいので、何か方法はありませんでしょうか。
※普通にtry-exceptで回避する方法もあるかと思いますが、ロジックを汎用化したく、出来る限り簡潔なコードにしたいとも考えています。
発生している問題・エラーメッセージ
問題は上記のとおりです。
また、該当のソースコードで出力される内容(result)は以下になります。
[<function Request.<locals>.<listcomp>.<lambda> at 0x000001E7FA7F1378>, <function Request.<locals>.<listcomp>.<lambda> at 0x000001E7FA7F1400>]
[<function Request.<locals>.<listcomp>.<lambda> at 0x000001E7FA7F1488>, <function Request.<locals>.<listcomp>.<lambda> at 0x000001E7FA7F1510>]
[<function Request.<locals>.<listcomp>.<lambda> at 0x000001E7FA7F1598>, <function Request.<locals>.<listcomp>.<lambda> at 0x000001E7FA7F1620>]
・
・
該当のソースコード
python
1soup = BeautifulSoup(response.text, 'html.parser') 2 3result = ([[lambda gro2 : gro2.find('aaaaa').text if gro2.find('aaaaa').text is not None else 'None',lambda gro3 : gro3.find('bbbbb').text if gro3.find('bbbbb').text is not None else 'None'] 4 for gro1 in soup.findAll('group1') 5 for gro2 in gro1.findAll('group2') 6 for gro3 in gro2.findAll('group3')]) 7
試したこと
find()関数の使い方で何か有効な手段はないかググってみましたが、特に見当たりませんでした。
補足情報(FW/ツールのバージョンなど)
Python3.7
Windows10
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/13 03:27