いつもお世話になっております。この質問は、
beautifulsoupでMediumの本文を抽出したい
の続きになります。
【実現したいこと】
Melianさんのコードにより、①のサイトでは無事解決することができました。
今回の質問内容は、前回の質問のサイト①の本文も
https://medium.com/cotinetwork/coti-newsletter-september-20th-a9cac08e22df
および今回の質問のサイト②の本文も
https://sundaeswap-finance.medium.com/sundaeswaps-iso-spo-vote-post-mortem-24159136aeb4
また他のMediumのブログの本文も、共通のコードで抽出したいと考えております。
完璧に本文を再現できなくても構いません。大体の本文が抽出できれば良いです。
【問題点】
Melianさんのコードにより、①のサイトでは無事解決することができました。ありがとうございます。
ですが、
同じ内容を②のサイト
https://sundaeswap-finance.medium.com/sundaeswaps-iso-spo-vote-post-mortem-24159136aeb4
で行ってみたところ、戻り値が
Python
1Sign in 2SundaeSwap Labs 34 days ago·5 min read 4456 55 6456 7456 85
となりました。どうやら、本文よりも先にpタグが含まれている部分があり、そちらのテキストを取得してしまったようです。
beautifulsoupのselect_one関数は最初の1つだけを取得しているからこのようなことが起こることは認識しているのですが、2つめ以降のpタグを取得する方法に困っています。
ぜひともお知恵をお貸しいただければと思います。どうぞよろしくお願いいたします。
【試したこと】
select_oneではなくselectにして、またコード内にsectionというタグが複数あり、3つめくらいだと本文を抽出できそうかなと思い
Python
1section_list = soup.select('section') 2cls_name_list = section_list[1].select("p") 3cls_name = ' '.join(cls_name_list[2].select_one('p').get('class')) 4text = '\n'.join(i.text for i in soup.select(f'p[class*="{cls_name[:8]}"]')) 5print(text)
を試してみましたが
AttributeError: 'NoneType' object has no attribute 'get'
が表示されてしまいました。おそらくcls_name_list[2].select_one('p')がNoneになっているからだと思われます。
あなたの回答
tips
プレビュー