Google Colabを使った初めてのWebスクレイピング【Python超入門】

Google Colabを使った初めてのWebスクレイピング【Python超入門】

Pythonを学習する上で実践課題としてWebスクレイピングに絞って試してみました。

Webスクレイピングって?

ウェブスクレイピング: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラー[1]あるいはウェブ・スパイダー[2]とも呼ばれる。 

https://ja.wikipedia.org/wiki/ウェブスクレイピング

どうやら今まで人力でやっていたWeb検索→リスト化などの作業がプログラムを動作させることで自動化させることができる方法らしいです。

環境準備

環境構築でつまずくと話にならないので、一番簡単に動かしてみる方法を記載します。

Google Colabを使ってみよう

Google Colabというブラウザーベースのオンラインの実行環境を利用しました。Googleのアカウントを保持していれば誰でも無料ですぐにPythonコードを実行することが可能です。
適当に登録等してこの画面がでれば実行準備は整いました。

Google Colab Screen

この中にPythonコードを記述し矢印のボタン(またはShift+Enter)を押すだけでコードが実行されます。

Pythonプログラムの実行

Hello Worldの実行

print("Hello, World. ")

ここはサクッと上記コードをコピーし実行してみましょう。
以下が実行例です。

Google Colab Screen Hello World

header, encode, content情報取得

ここからは実際にWebサイトからの情報取得を行ってみましょう。

import requests#HTTP用ライブラリの読み込み
 
r = requests.get('https://instanttry.com')#対象URLはここを書き換えてください
print(r.headers)#ヘッダー情報の表示
print(r.encoding)#エンコード情報の表示
print(r.content)#content情報の表示

実行例

import HTTP library

一応情報は取れていることがわかりますね。

タイトル名情報取得

#タイトルストリング取得
# coding: UTF-8
from bs4 import BeautifulSoup
import requests
from google.colab import files

# アクセスするURL
url = "https://instanttry.com"

# htmlを取得、BeautifulSoupで扱う
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser') # BeautifulSoupの初期化

print(soup.title.string)

実行例

Get title information

リンクされているURL一括取得

#タイトルストリング取得  URL取得
# coding: UTF-8
from bs4 import BeautifulSoup
import requests
from google.colab import files

# アクセスするURL
url = "https://instanttry.com"

# htmlを取得、BeautifulSoupで扱う

r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser') # BeautifulSoupの初期化

tags = soup.find_all("a")
for tag in tags:
  print(tag.get("href"))

実行例

Get URL information

リンクされているURL&記事名一括取得

#タイトルストリング取得 タイトル&URL
# coding: UTF-8
from bs4 import BeautifulSoup
import requests
from google.colab import files

# アクセスするURL
url = "https://instanttry.com"

# htmlを取得、BeautifulSoupで扱う

r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser') # BeautifulSoupの初期化

tags = soup.find_all("h2",{"class": "heading-archive"})#後述!!!
for tag in tags:
  print(tag.a.string)
  print(tag.a.get("href"))

なお今回は取得したい記事名が”heading-archive”の箇所にあったため、そのように指定しています。欲しい情報がどこにあるかは該当ページのソースコードをGoogle Chromeの開発ツール等で確認して下さい。

Charome dev tool

実行例

Output

CSV出力

上記内容で取得した情報をCSVにして出力してみます。
CSV出力にはpandasというライブラリを用います。

#タイトルストリング取得 タイトル&URL CSV出力
# coding: UTF-8
from bs4 import BeautifulSoup
import requests
from google.colab import files
import pandas as pd
columns = ["Name","URL"]
df2 = pd.DataFrame(columns=columns)

# アクセスするURL
url = "https://instanttry.com"

# htmlを取得、BeautifulSoupで扱う

r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser') # BeautifulSoupの初期化

tags = soup.find_all("h2",{"class": "heading-archive"})
for tag in tags:
  name = tag.a.string#記事名
  url = tag.a.get("href")#URL
  se = pd.Series([name,url], columns)
  df2 = df2.append(se, columns)
  
filename = "output.csv"
df2.to_csv(filename, encoding = "utf-8-sig")
files.download(filename)

実行するとcsvファイルがダウンロードされ、このようなデータが得られます。

csv content

とりあえずのまとめ

このように簡単にWebサイトの情報が取得できることがわかりました。
これらを応用すればより高度な動作も実現できますので、別途記事を書きたいと思います。
まずは自分でも勉強を進めてみます。