今回はpythonを使ったスクレイピング方法を紹介していきたいと思います。
スクレイピングとは簡単にいうとWEBサイトから情報を抽出する技術のことです。
意外と簡単にできたので、紹介していきたいと思います。
使うライブラリ
では、使っていくライブラリを紹介します。
今回使うライブラリはRequests、BeautifulSoup、pandasです。
RequestsはHTTP通信を利用してWebサイトのスクレイピングを簡単にできるライブラリです。
BeautifulSoupはRequestsでスクレイピングしたHTMLを成型したり、必要な情報を抽出したりすることができます。
pandasは得たデータをcsvに出力したり、整理したりするときに使います。
準備するもの
- jupyternotebook
Anacondaをインストールしていればどのライブラリもインストールなしで使えます。 jupyternotebookだけ準備しておきましょう。
スクレイピングしていこう
サイトのHTMLを取得する
では早速やっていきましょう。まず、サイトのURLから、HTMLを取得してみましょう。
これにはRequestsのgetメソッドとtextメソッドを使っていきます。
getメソッドにてHTMLを取得し、textメソッドで表示することができます。
例として自分のサイトスクレイピングしてみましょう。
from bs4 import BeautifulSoup import requests import pandas as pd url = "https://imagisi.com/" response = requests.get(url).text print(response)
すると、
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="HandheldFriendly" content="True"> <meta name="MobileOptimized" content="320"> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/> <title>プログラミング日記</title> <!--以下省略-->とHTMLが出力されるのが分かるかと思います。
HTMLを整理する
ただしこれだと少し見ずらいので整理を行っていきたいと思います。
BeautifulSoupのprettify()を使っていきます。
soup = BeautifulSoup(response,"html.parser") print(soup.prettify())
“html.parser”によって、HTMLの構造を読み取り、prettify()で整理してくれます。
ほしい情報をリスト化して取得
さて、HTMLを読み取ったら、次はほしい情報だけを取り出していきましょう。
今回はトップページにある
- 記事のタイトル
- 記事のURL
を探してリストにまとめたいと思います。
取得したHTMLのコードを見ると、

classが”entry-card-wrap”のaタグを取得すれば記事タイトルとURLを取得することができそうです。
コードを書くと
lists = soup.find_all("a",{"class": "entry-card-wrap"})
これでほしい情報のリストができました。ここから繰り返し処理をしてさらに情報を引き抜いていきます。
データフレームを作る
繰り返し処理をする前にデータの入れ物を作ります。表のようなものをイメージするとわかりやすいかと思います。
pandasを使います。
columns = ["title","url"] df = pd.DataFrame(columns = columns) print(df)
columnsは表の縦が何を意味しているかを表しています。ここではtitleとurlを読み取るのでそれが分かるように名前づけしています。
まだ何も入っていないので表はからの状態です。これから情報を詰めていきます。
繰り返し処理
まずはコードを見てみましょう。
for list in lists: title = list.get("title")#リストから欲しい情報を取得 url = list.get("href") se = pd.Series([title,url],columns)#情報を並べる df = df.append(se,columns)#追加 print(df)
listsからaタグの中にある”title”属性と”href”を取得して pd.Series で会うように並べ、.appendで表に追加していきます。これを繰り返していきます。
これでしっかりと表が作成されました。
csvに出力
では得られたデータをcsvに出力してみましょう。出力するにはdf.to_csv()を使います。
df.to_csv('サイトスクレイピング.csv', encoding='utf_8_sig')#出力
‘サイトスクレイピング.csv’ は出力するcsvファイルの名前です。
encoding=’utf_8_sig’は文字コードをUTF-8に指定しています。これがないと文字化けしてしまいます。

このように表示されていれば成功です!!
参考

コメント
[…] 前回 に続きおもしろそうなスクレイピング方法をまた見つけたので紹介していきたいと思います。 […]