😸
哲学者名言のスクレイピング
こちらの記事(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