こんにちは、ミナピピン(@python_mllover)です。requestsとbeautifulsoupでスクレイピングしていると取得したHTMLの中で、アフィリエイト広告など特定の文字列以降いらねぇって場合があると思います。
beautifulsoupにも特定の要素だけをピンポイントで削除するdiscompose()がありますが、こういったニーズとは少し違います。そんな時にどうすればいいのか、という話ですが結論からいくとsoupを文字列に変換してstr型のデフォルト機能であるstr.splitメソッドで特定の文字以降を削除するというのが簡単だと思います。
str.splitメソッドで特定の文字以降を削除する
イメージとしてはこんな使いかたです。
import requests from bs4 import BeautifulSoup r = requests.get('http://~~~~') soup = BeautifulSoup(r.content, 'html_parser') # スクレイピングした記事のテキストの中にh4タグのプロモーションが含まれている場合それ以降を削除する str(soup).split('<h4>プロモーション</h4>')[0]
beautufulsoupの型はstr()で文字列に変換できます。文字列からsoupに戻すのはエンコード関連でめんどくさいのでこの処理は最後にやるのが無難だと思います。では~
参考:https://www.relief.jp/docs/python-get-string-before-specific-character.html
コメント