AIを学ぶ

スクレイピングとは?HTML構造をBeautifulSoupを使って取得するには?基礎の基礎編!

更新日:

スクレイピングができれば、
webサイトから必要なものを抽出でき、
ホームページから好きな情報だけを取ってくることができます。

①スクレイピングとは?

スクレイピングとは、ウェブサイトから情報を取得し、その情報を加工して新たな情報を生成することを指します。
HTMLファイルを取得し、解析を行うことで必要な情報を絞込み、別ファイルに情報を書き出すまでを
スクレイピングと呼ぶことが多いです。

②実際どのようなデータがスクレイピングされているか

作業を自動化するにあたって、スクレイピングの技術は欠かせません。
web界隈で働いている方はその効力を実感することが多いでしょう。
スクレイピングでデータを効率的に活用することで、業務を効率化できたり、
生産性を高めたり、分析に活かすことで新たな知見を得るといった効果が期待できます。

スクレイピングの例としては、
調査を行うために、求人サイトの情報を抜き出したり、
様々なニュースサイトを巡回して、見出しを抜き出して一覧化したり、
日経データから、株価データを取得して、変動履歴をまとめたりといったものが挙げられます。
普段私達がみているgoogleの検索結果ページもスクレイピングによるものです。

もしこれらの作業を手作業で行うとすると、毎回
・該当webページにアクセスして
・該当する箇所をコピーして
・新しいファイルに貼り付けていく
という形で必要なデータ分繰り返さなければなりません。

上記の作業を自動で行うことで、夜処理を回し、朝出社すればデータが生成しているということも可能です。
スクレイピングはあなたの仕事を効率化することに重宝するでしょう。

③スクレイピングの実演

③-0:前準備

pythonで実行することを想定します。
https://colab.research.google.com
上記の「ファイルタブ」より、
「python3の新しいノートブック」を選択してください。

2つのライブラリ(便利ツール)を使用します。
request
pythonを使用してWebページを開くことが可能です。
使用方法がとてもシンプルなため使いやすいです。

Beautifulsoup
webページのスクレイピングに使用するライブラリです。
htmlの構造を解析してくれます。
※ファイルを、よく使う情報毎にまとめてくれるイメージです。

下記をgoogleコラボのセルに打ってください。
▼コード
import requests
from bs4 import BeautifulSoup

1,2行目:importをすることで、すでにgoogleコラボに格納されているコード群を読み込みます。(python上で使えるようになります。)

③-1:HTMLファイルの取得

それでは実際にスクレイピングを行ってみましょう。
スクレイピングは4つのプロセスから成り立ちます。
最初のプロセスはwebサーバーにアクセスして、
HTMLファイルを取得(ダウンロード)することから始まります。

下記をgoogleコラボのセルに打ってください。
▼コード
url = "https://ailearn.biz/"
response = requests.get(url)

1行目:urlという名前の変数に、今回取得したいhtmlファイルのurlを格納します。
2行目:url先のサーバーに「html情報取得したい」と言うレスポンスを投げて、その情報をresponseという名前の変数に格納します。つまり、requestライブラリはwebページを呼び出しデータを取得することができます。

③-2:HTMLファイルの解析

このステップでは取得したhtmlを解析します。
htmlファイルは少し複雑な形をしているので、情報を構造化することで、必要な情報を引き出しやすくします。

下記をgoogleコラボのセルに打ってください。
▼コード
soup = BeautifulSoup(response.text, "html.parser")

1行目:responseには既にhtml情報が格納されています。

それに加えて、「.text」でテキスト化を行い、"html.parser"の引数を指定することで、htmlファイルの情報を構造化します。構造化した情報を「soup」という変数に格納しています。構造化することで、タグ毎に検索が可能になり、例えばリンクが貼っている場所のみを抽出というような処理が可能になります。

③-3:情報の取得

このステップでは構造化したファイルから、必要な情報を取得します。
今回は、ailaernサイトに貼られているリンクを取得してみましょう。

下記をgoogleコラボのセルに打ってください。
▼コード
atag = soup.find_all("a")
ahref = atag.get("href")

1行目:構造化された情報が入っている「soup」からaタグを取得しています。(aタグはリンクが格納されているタグ)
2行目:指定したタグ(aタグ)から、指定した情報(href)を抜き出している処理です。

③-4:情報の書き出し

このステップで必要な形に書き換えます。
今回抜き出した情報は、相対パス(URLの一部が省略されている状態)でした。
省略されている部分を追加して、今回の条件に合うように情報を書き換えます。

下記をgoogleコラボのセルに打ってください。
▼コード
urllist = []
for i in ahref:
urllist.append("https://ailearn.biz/" + str(i))

1行目:空(何もデータが入っていない状態)のリスト(リスト名:urllist)を作成します。
2行目:ahrefには3の処理で、リストが格納されています。そのリストの中身を順番にiに格納していきます。
3行目:空のリストに、"https://ailearn.biz/"の文字列と、iの文字列を結合した、新しい文字列を格納します。

いかがでしたでしょうか。
今回はpythonでデータスクレイピングを行うための、基礎の基礎知識を紹介いたしました。
スクレイピングの手順を知るための参考になれば、編集者一同嬉しい限りです。

-AIを学ぶ

Copyright© 人工知能/AIならAILearn(あいらーん) , 2019 All Rights Reserved Powered by AFFINGER5.