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

Pythonを学習する上で実践課題としてWebスクレイピングに絞って試してみました。
Webスクレイピングって?
ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラー[1]あるいはウェブ・スパイダー[2]とも呼ばれる。
https://ja.wikipedia.org/wiki/ウェブスクレイピング
どうやら今まで人力でやっていたWeb検索→リスト化などの作業がプログラムを動作させることで自動化させることができる方法らしいです。
環境準備
環境構築でつまずくと話にならないので、一番簡単に動かしてみる方法を記載します。
Google Colabを使ってみよう
Google Colabというブラウザーベースのオンラインの実行環境を利用しました。Googleのアカウントを保持していれば誰でも無料ですぐにPythonコードを実行することが可能です。
適当に登録等してこの画面がでれば実行準備は整いました。

この中にPythonコードを記述し矢印のボタン(またはShift+Enter)を押すだけでコードが実行されます。
Pythonプログラムの実行
Hello Worldの実行
print("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情報の表示
実行例

一応情報は取れていることがわかりますね。
タイトル名情報取得
#タイトルストリング取得
# 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)
実行例

リンクされている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"))
実行例

リンクされている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の開発ツール等で確認して下さい。

実行例

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ファイルがダウンロードされ、このようなデータが得られます。

とりあえずのまとめ
このように簡単にWebサイトの情報が取得できることがわかりました。
これらを応用すればより高度な動作も実現できますので、別途記事を書きたいと思います。
まずは自分でも勉強を進めてみます。
-
前の記事
超音波センサー(URM37)を使って距離測定【Arduino超入門】 2019.05.05
-
次の記事
Automator 複数ページ起動&自動ログイン 2019.05.17