【Pythonサンプルコード】スクレイピングで「特定の文字列を含む行」だけを抽出したい時の簡単な方法を解説
「特定の文字列を含む行」だけを抽出したい
Pythonスクレイピングで特定の場所にあるテキストを抽出するとき、「タグ」や「class_」や「id」などで場所を指定するのが一般的です。
ただそれ以外の方法としてテキストを指定して抽出する方法もあるので、ご紹介したいと思います。
サンプルコード
import re import requests from bs4 import BeautifulSoup #BeautifulSoupの設定 headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"} url="https://syosetu.com/syuppan/view/bookid/3387/" response = requests.get(url=url, headers=headers) html = response.content soup = BeautifulSoup(html, "lxml") #ここで「書籍情報」内のテキストを全取得 all_text=soup.find(class_="book_contentinfo").text #ここで取得したテキストを1行ずつ分割してリストに収納 all_text_list=all_text.split("\n") #リストを1行ずづ読み込んで部分一致する行だけ抽出 for text in all_text_list: if "出版社" in text: print(text)
解説
all_text=soup.find(class_="book_contentinfo").text
の部分で、book_contentinfoにクラス指定されているタグに挟まれているテキスト全体を取得しています。
all_text_list=all_text.split("\n")
ここで「split」を使って、テキストを改行(\n)ごとに分け、リストに入れています。
参考ページ
【Python入門】split関数で文字列の分割の仕方 - Qiita
for text in all_text_list: if "出版社" in text: print(text)
ここではリストを1行ずつ読み込んで、部分一致する行だけprintしています。
このprintの部分をリストなり他の変数なりに変更することで、特定の文字列を含む行のデータだけを取得することが可能となります。