PythonでWebスクレイピング!ブログ見出しを抽出する方法!

  • このエントリーをはてなブックマークに追加

Pythonを使ったWebスクレイピングを行うために、前回Webにリクエストを送信して情報を取得しました。ここではより意味のある情報として、ブログページのhタグ(見出し)のみを抽出する方法について紹介します。

こんにちは。wat(@watlablog)です。
最近はWebスクレイピングネタを連投していますが、本日は実用編!ブログ記事の見出しだけを抽出する方法を紹介します

ここで紹介している内容はWebスクレイピングの一例に過ぎません。僕はPython特化型学習サービス「PyQ(パイキュー)」で基礎を覚えました。体系的にPythonプログラミングやWebスクレイピングを覚えたい方は是非「PyQでPython学習!実際に登録してみた感想と気になる料金」の記事をご覧下さい。

HTMLのhタグを抽出してブログ見出し一覧を作ろう!

Webスクレイピングについてのおさらい

Webスクレイピングは過去、「PythonでWebスクレイピング!Requestsで情報取得!」で紹介した通り、情報収集の自動化が出来るようになり、生産性を大きく向上させることができるプログラミング技術です。

しかし、外部のWebサイトから情報を持って来るということは、相手のサイトに負荷をかける以外にも著作権の問題が潜んでいることを説明しました。

法的問題に発展させないためにも、上記記事の注意事項や事例をしっかり読んでおいて下さい。

技術は「正しく」使わないといけません!
マッド・サイエンティストにならないように気を付けましょう!

ブログの見出しを抽出すると記事の概要がわかる

では本題ですが、この記事では「ブログの見出し」を抽出する方法について説明します。

ブログの見出しとは、このページでも本文の書きだしの前に章や節として太字で書いてある内容(この本文の見出しは「ブログの見出しを抽出すると記事の概要がわかる」の部分)です。

この見出しというのは、ブログを書いている人であればかなり気を使って文章を考案している部分になります。

通常、ブログを書いている人、通称ブロガーはSEOSearch Engine Optimization)といって、検索エンジンに最適化するように記事を構成しようとします(読まれたい一心で。例外もあります。)。

その時、タイトルメタディスクリプション見出しといった内容にキーワード要点を書いておくことで、Google等の検索エンジンで上位表示されやすいという仕組みがあります。

特に、見出しは記事の本文に一つ一つついているものであり、まず見出しがあって、次に説明が始まるので、見出しを見て本文の概要がわかるブログが良いブログとされています。

1.〇〇基礎、2.〇〇概要…だけだと良くないという「ブログ論」もありますね。
あまりブログ論に振り回されてもいけませんが、読者としては、時間を有効に使いたいので、目次を見てざっくり内容を知れると良いのではと思います。

ということで、見出しを抽出すれば、その記事の言いたいことがざっくりとわかると言えます

HTMLについてのおさらい

ブログはHTMLという言語で書かれています。このWATLABブログも、ソースコードを表示するとHTMLタグがひしめき合っている様子が確認できます。

HTMLやHTMLタグについては、「Pythonテキスト処理!文章中からHTMLタグを取り除いてみた」に記載しましたので、あやしい方は是非記事を参照してみて下さい。

そして今回はこの記事に書いてある方法と、これまで学んだことを組み合わせて、Webページから見出し情報だけを抽出する方法を紹介します。

Webページから見出しのみを抽出するPythonコード

Webページにリクエストを送信して情報を取得する方法

それでは、Pythonコードの説明に入ります。全コードは記事の後半に載せますが、まずは説明上、部分部分のコードを載せていきます。

最初はリクエストの送信部分です。
PythonでWebスクレイピング!Requestsで情報取得!」で習得した通り、requestsメソッドを使ってURLのWebページにアクセスし、適切なエンコードを実施、.text関数で情報をテキストとして取得することができます。

requestsパッケージをインストールしておけば楽勝ですね!

テキスト全体から<h>タグを抽出する関数

次は、テキスト全体から見出し、つまり<h>タグのみを抽出する関数を説明します。これは少々長いコードですが、詳細はコード内のコメントを細かく書きましたので参照下さい。

<h>タグはh1~h6までの範囲で値を取ります。h1→h2→h3→h3…と単純に数値が増加するわけではありません。そのためwhileループを使って、「<h」で始まるワードを検索している所がキーポイントです。

しかし、「<h」で始まるキーワードはhtmlやheadといったタグにもヒットしてしまうため、hの次の文字が数字の文字列かどうかを判定して、見出しタグである場合のみスライスによる抽出を行っています。

検索やスライスについては、「Pythonでテキスト処理!任意の文字列の場所を検索する方法」に詳しく書いていますので、そちらを参照して下さい。

HTMLからタグ部分を削除する関数

先ほど紹介した関数の中でremove_bracketという関数を呼び出していましたが、その関数も自作していたものです。

この関数は、「Pythonテキスト処理!文章中からHTMLタグを取り除いてみた」の記事で紹介しているものと同一ですので、詳細の説明は記事を参照して下さい。

全コード

コピペして使って頂きやすいように、全コードを載せておきます。

最後に抽出した結果をテキストファイルとして保存していますが、この内容を使って各々のテキスト分析をして頂ければと思います。

実行結果

以下の画像が実行結果です。保存されたテキストファイルの中身を見ています。

保存されたテキストファイルは見事見出しのみになっていることがわかると思います。

実行結果

まとめ

本ページではWebスクレイピングの例として、requestsで取得したHTML情報から、見出しタグの内容のみを抽出する方法を紹介しました。

今回は特に便利なライブラリ(BeautifulSoupやSelenium)を使わないで筆者が学習用に自力で作成したスクレイピングコードになります。

おそらくライブラリを使った方がスマートなコードになると思いますので、今後はそちらの学習を進めて行きたいと思います。

Webスクレイピングもなんとなくやり方がわかってきました!次はもっと高度なことにも挑戦していきたい!

Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*