😸

哲学者名言のスクレイピング

2023/05/20に公開

こちらの記事(https://tomo8language.com/quotes-list-philosopher/)を用いて、スクレイピングの練習をしたので、その際の思考整理としてのメモ書きです。

【目標】
哲学者の名前とその名言を表示するコードを作成する

【コード】
まず広い範囲から、スクレイピングして、徐々に範囲を狭めていく

from time import sleep

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://tomo8language.com/quotes-list-philosopher/'

r = requests.get(url)

r.raise_for_status()

soup = BeautifulSoup(r.content, 'lxml')
chu_titles = soup.select('.wp-block-heading')
for h2 in chu_titles:
    print(h2)#こっからテキスト情報のみ出力したい

出力結果が以下のようになりました。

<h2 class="wp-block-heading">哲学者の名言集まとめ一覧(あいうえお順)</h2>
<h2 class="wp-block-heading">アリストテレスの名言紹介</h2>
<h2 class="wp-block-heading">イマヌエル・カントの名言紹介</h2>
<h2 class="wp-block-heading">エーリッヒ・フロムの名言紹介</h2>
<h2 class="wp-block-heading">セーレン・キルケゴールの名言紹介</h2>
<h2 class="wp-block-heading">孔子の名言紹介</h2>
<h2 class="wp-block-heading">ソクラテスの名言紹介</h2>
<h2 class="wp-block-heading">ニーチェの名言紹介</h2>
<h2 class="wp-block-heading">ハンナ・アーレントの名言紹介</h2>
<h2 class="wp-block-heading">ピタゴラスの名言紹介</h2>
<h2 class="wp-block-heading">プラトンの名言紹介</h2>
<h2 class="wp-block-heading">ヘーゲルの名言紹介</h2>
<h2 class="wp-block-heading">マルクス・アウレリウスの名言紹介</h2>
<h2 class="wp-block-heading">孟子の名言紹介</h2>
<h2 class="wp-block-heading">モンテスキューの名言紹介</h2>
<h2 class="wp-block-heading">老子の名言紹介</h2>

ただ、このh2タグを削除して、テクストのみの表示をしたい時は.textを追加する

print(h2.text)

そして、肝心な名言のみを取得するコードは、試行錯誤もありつつ、以下のコードで取得できた。

from time import sleep

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://tomo8language.com/quotes-list-philosopher/'

r = requests.get(url)

r.raise_for_status()

soup = BeautifulSoup(r.content, 'lxml')
chu_titles = soup.select('.wp-block-heading')
for h2 in chu_titles:
    print(h2)#こっからテキスト情報のみ出力したい

#for文で全部の名言を出力したい
#とりあえず、名言も出力する:名言の書いてあるエリアから、どんどん範囲を狭める

all_meigen = soup.select('strong:last-of-type')#これあってる?範囲をどんどん狭めたつもりだが
for meigen in all_meigen:
    print(meigen)

そして、このようにやればさらにコードをコンパクトにできることがわかった

from time import sleep

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://tomo8language.com/quotes-list-philosopher/'

r = requests.get(url)

r.raise_for_status()

soup = BeautifulSoup(r.content, 'lxml')
chu_titles = soup.select('.wp-block-heading')
all_meigen = soup.select('.fz-18px > strong')
for meigen in chu_titles + all_meigen:
    print(meigen.text)

【ふりかえり】

Discussion