【簡単】pythonでスクレイピングしてみた

プログラミング

今回は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に指定しています。これがないと文字化けしてしまいます。

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

参考

Pythonでスクレイピングを利用してデータを収集する方法を解説
404 Not Found - Qiita - Qiita
BeautifulSoupの文字化けが止まらない時の解消方法 – Python | Let's Hack Tech
BeautifulSoupの文字化け プログラムにおいて、日本語というのはすごくめんどくさいです。 日本に生まれたことを後悔するレベルでメンドクサイ。 今回はrequestsを使ったスクレイピングにおける、BeautifulSoupの文字化

コメント

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

タイトルとURLをコピーしました