タイトル画像
琴葉葵

推しアニメのグッズの予約受付があるの知らなかったからタイミング逃しちゃってすごくショックなんだけど...

琴葉茜

あらま、それは残念だったねぇ

琴葉葵

見逃しがないように公式サイトの最新情報を細かくチェックするのは大変だし、見てない時に限ってこういうことがあるんだよ

琴葉茜

じゃあ、サイトの最新情報のチェックをPythonにしてもらったらどうかな?

琴葉葵

え!?Pythonってパソコンの中だけじゃなくてサイトの情報を取ることもできるの!?

琴葉茜

そうなんだよねー
ちなみにサイトの情報を取得することを「スクレイピング」って言うよ!

解説画像1
琴葉葵

それはぜひ教えてほしい!

琴葉茜

じゃあまずは、スクレイピングするための外部ライブラリを2つ紹介するよ!

解説画像2
解説画像3
琴葉葵

(...なんか美味しそうな名前)

琴葉茜

「requests」はサイトの情報を取得するんだけどデータ型は文字列の状態だから、その後に「BeautifulSoup」を使って情報を解析して操作できるようにするんだ

琴葉葵

急に外部ライブラリが2種類も出てきたけど覚えられるかな...

琴葉茜

「requests」はシンプルだから大丈夫
基本的にはこの書き方を知っていれば良いよ!

解説画像4
琴葉葵

これだけでサイトの情報が取れるんだね!!

琴葉茜

簡単でしょ?ちなみに取得しているのはスクレイピング練習用ページを構成している「htmlファイル」の中身になっているよ

琴葉葵

だけど、確かにこのままじゃ中身がよく分からないね

琴葉茜

そこで使うのが「BeautifulSoup」だよ
実際に使ってるところを見てみようか

解説画像5
琴葉葵

おお!プログラムの方はまだよく分からないけど綺麗にデータが取れてる!!

琴葉茜

じゃあ少しずつ段階を踏んでデータの取得方法を説明しようかな

琴葉葵

よろしくお願いします!!

琴葉茜

...っとその前に、HTMLの構成について簡単に紹介しておくね

解説画像6
琴葉茜

ちなみに「タグ」は「<p></p>」とか「<h1></h1>」とかのことね!

琴葉葵

HTMLはタグに囲まれた部分がサイト上に表示されて、タグの中にデザインの情報とかを入れてるって感じだね

琴葉茜

それだけ分かっていればスクレイピングは多分大丈夫かな!
もし見ているサイトのHTMLの構成を見たい時は次のようにすると確認できるよ!

解説画像7
琴葉葵

いつも使ってたブラウザにそんな機能があったのか...!!

琴葉茜

さて、そしたら改めて...
まず最初はhtmlの中から取得したい情報を持っているタグを指定するよ

琴葉茜

最初に一致したタグだけで良い場合は「.find()」で、一致したタグを全部取得したい場合は「.find_all()」を使うよ

解説画像8
琴葉葵

指定する時はタグの名前を指定するか、タグの中に入ってる情報で指定するって感じなんだね

琴葉茜

次にタグの中から欲しいデータを取得する方法を説明するね

琴葉茜

タグで囲まれたテキストを取得したい場合は「.text」で、タグの中の情報を取得したい場合は「.get('〇〇')」を使うんだ

解説画像9
琴葉葵

うーん...
それぞれがどこのどういう情報が取れるのかがいまいちピンとこない...

琴葉茜

そしたら、こうすると分かりやすいかな?

解説画像10
琴葉葵

なんとなく分かった!

琴葉茜

まぁやってることは結構ワンパターンだから、使ってるうちに慣れてくると思うよ!

琴葉茜

最後に一覧表を置いておくから、また忘れたら確認してみてね!

構文説明例(soup = BeautifulSoup(html, "html.parser"))
soup.title
HTMLの<title>タグを取得
print(soup.title)
soup.find(tag)
最初に一致したタグを取得
data = soup.find("h1")
data = soup.find(class_="〇〇")
soup.find_all(tag)
一致するタグを全て取得
datas = soup.find_all("p")
datas = soup.find_all(class_="〇〇")
.text
タグ内のテキストだけを取得
data.text
.get("属性")
属性の値を取得
data.get("href")
data.get("class")
.name
タグの名前を取得
print(data.name)
琴葉茜

ちなみに一覧の例にも書いてるけど、「class="〇〇"」を使って指定する場合は「.find(class_="〇〇")」って感じで「_」がつくから気をつけてね

琴葉葵

はーい!