今回は、特定のWebページから記事内テキストの抽出をWebスクレイピングを用いて行う記事となっています。一度、特定のページ内のHTML情報を抽出する記事を投稿しているので、もしよければそちらも一読していただければと思います。
プログラム概要
今回の本プログラムは、特定のURLを指定してそのWebページから情報を抽出します。実際にWeb情報を取得すると、HTMLタグ付きの状態で情報を抜き取るわけですが、無駄な部分を省くことを考慮して、記事内テキストを抽出していきます。
・モジュールのインポート
・特定URLからデータ取得
・取得データの解析
・解析データから記事内テキスト抽出
本プログラムは上記の流れで説明していきます。
必要なモジュールのインストール
今回の本プログラムで利用するモジュールは、BeautifulSoupとrequestです。
BeautifulSoupモジュールは、pythonのライブラリの一つでスクレイピングに特化した機能を備えています。
スクレイピングは、端的に言うと取得したHTMLから任意の情報を抽出する技術を指します。
requestモジュールは、HTTP通信を行うためのライブラリに特化した機能を備えています。
WebサーとのダウンロードやRESTAPI等の利用が比較的簡単に行うことができます。
このモジュールを利用して特定URLに対してリクエストを行い、結果を取得します。
from bs4 import BeautifulSoup import urllib.request as req
urlopen()でデータを取得する
url = "https://su-gi-rx.com/2018/03/28/text-mining-2/" # urlopen()でデータを取得 res = req.urlopen(url)
ここでは、まず任意の特定URLを変数urlに代入して利用します。
req.urlopen()を利用して、特定URLから結果を取得し、変数resに格納しています。
BeautifulSoup()で取得データを解析
# BeautifulSoup()で解析 soup = BeautifulSoup(res, 'html.parser')
ここでは、先ほど取得したデータを格納した変数resを利用します。
BeautifulSoupモジュールを利用して、取得データをHTML情報を解析し、そのデータを変数soupに格納しています。
任意のデータを抽出する
# 任意のデータを抽出 title1 = soup.find("h1").string print("title = ", title1) p_list = soup.find_all("p") for p in p_list: print(p.get_text())
ここでは、変数soupの解析後データを利用して任意のデータを抽出します。
タイトルと記事内テキストを囲っているHTMLタグのみのデータを取り出していきます。
この時、解析で利用したBeautifulsoupのメソッドとして、find()メソッドとfind_all()メソッドを利用していきます。
BeautifulSoupモジュールのfind()とfind_all()は、このモジュールの中でも最も利用するメソッドでしょう。
これらを利用することで、HTML情報から様々な属性に基づいて、目的のタグやタグのリストを見つけ出すことができます。
メソッドを利用して抽出したデータをfor文にて、ターミナル上で出力するコードを追加しています。
# python3 # bs-select-2.py from bs4 import BeautifulSoup import urllib.request as req url = "https://su-gi-rx.com/2018/03/28/text-mining-2/" # urlopen()でデータを取得 res = req.urlopen(url) # BeautifulSoup()で解析 soup = BeautifulSoup(res, 'html.parser') # 任意のデータを抽出 title1 = soup.find("h1").string print("title = ", title1) p_list = soup.find_all("p") for p in p_list: print(p.get_text())
出力結果
特定URLをうまく利用することで、サイト内のリンクの記事などを巡回してデータ取得するクローリングにも活用できるかと思います。
実務に活かす際に学習として利用していたPython本が以下のものになります。
・PythonによるWebスクレイピング(オライリー出版)
・増補改訂Pythonによるスクレイピング&機械学習 開発テクニック(クジラ飛行机)
・Pythonクローリング&スクレイピング – データ収集・解析のための実践開発ガイド
リンク
リンク
リンク