WEBスクレイピングとは、WEBサイトから情報を自動的に取得し、必要に応じて、情報の加工などを行うことです。取得したデータは、ファイルやデータベースに保存します。
Pythonでは、newspaper3kというライブラリを利用して、非常に簡単にテキストデータをWEBサイトから自動的に取得することができます。
ニュースサイトやブログから、
- 自動的にデータを取得し保存したい。
- キーワードを取得して、トレンドを把握したい。
- 自然言語処理を用いてサマリーだけを取得したい。
という場合に利用すると便利です。
これを応用して、次のようなこともできます。
- ニュースサイトのトップページに表示されている複数の記事を順に巡回し、ニュース記事やサマリー、キーワードをダウンロードし、後からまとめて読む。
- ブログ村やはてなブログなどのブログサイトや、個人ブログのトップページに表示されている複数の記事を順に巡回し、ブログ記事やサマリー、キーワードをダウンロードし、後からまとめて読む。
- また、これら取得したキーワードを分析し、トレンドとなっているキーワードを把握する。
ここではまず、newspaper3kというライブラリの基本となる使い方を確認していきましょう。
newspaper3kの基礎は既にご存じで、先にニュースサイトのトップページに表示されている多くの記事を一度に取得する方法や保存方法を確認されたい方は、以下のリンクをご利用ください。
発売数10,000万本突破を記念して、今だけ期間限定で87%オフの大セール中!
初心者がWebスクレイピングする為のPython環境準備
ここでは、Jupyter Notebookで実行した場合の結果を表示していますが、他のPython3の環境でも同様です。もしまだPython3の環境設定がお済でないなら、以下の記事を参考に環境構築してみてください。
Python3の実行環境の準備が整いましたら、次はnewspaper3kをインストールする必要があります。Python3の環境では、newspaper3kは標準ではインストールされていませんので、pipやcondaを利用して別途インストールする必要があります。
pipを利用してインストールする場合は、以下のコマンドを入力してください。
pipの詳しい説明は「Pythonでの外部ライブラリの追加インストール方法」を参照ください。
またcondaを利用してインストールする場合は、次のコマンドを入力してください。
condaの詳しい説明は「Anacondaでの外部ライブラリの追加インストール方法」を参照ください。
初心者がPythonで英語のニュースサイトをWebスクレイピングする方法
これからnewspaper3kというライブラリの基本となる使い方を紹介していきますが、日本語の処理には別途追加の手順が必要となりますので、まずは英語のサイトから始めます。
ここはでは、英語の学習者にも有名なサイト the japan times から記事を取得してみます。
その中から今回は、次の記事をスクレイピングしていきましょう。
まずはnewspaperからArticleをインポートします。
次にArticleに対して、確認したいWEBサイトのアドレスを渡します。ここでは、変数urlを定義して、urlにWEBサイトのアドレスを格納し、Article()に渡しています。
...:
article = Article(url)またArticleからの結果を変数articleに格納しています。
そして、download()で記事を取得し、parse()で解析します。
...:
article.parse()
ここまでが記事情報を単純に取得する一連の処理になります。これらの取得した情報を表示してみましょう。publish_dateで記事の発行された日が表示されます。
authorsで記事の作成者を確認できます。しかし、ここでは作者が記載されていなかったのか、['No Author']となっています。
textを用いて記事の全文を表示することもできます。
以上の処理が、ライブラリnewspaper3kを用いて記事を取得する方法になりますが、newspaper3kでは、さらに自然言語処理を利用して、記事のキーワードだけを抽出したり、サマリーを取得することができます。
自然言語処理を利用するには、まずはPythonの自然言語処理ライブラリであるntlkをダウンロードする必要があります。次の処理を実行してntlkをダウンロードしてください。
...:
nltk.download('punkt')[nltk_data] C:\Users\UserName\AppData\Roaming\nltk_data...
[nltk_data] Package punkt is already up-to-date!
True
上記のように最後にTrueと表示されれば、準備完了です。
nlp()で自然言語処理を実行します。
nlp()を実行するとキーワードとサマリーが取得できるようになります。キーワードを確認してみましょう。
summaryによって、取得した記事のサマリーを表示することができます。
このようにして、newspaper3kにより、英語のニュースサイトから記事の全文やサマリー、キーワードを取得することが簡単にできました。
発売数10,000万本突破を記念して、今だけ期間限定で87%オフの大セール中!
初心者がPythonで日本語のニュースサイトをWebスクレイピングする方法
次の日本語のニュースサイトから記事の情報を取得してみましょう。自然言語処理を日本語で行う場合、分かち書きという英語のように、言葉のくぎりに空白を入れる処理が必要になります。
自然言語処理では、単語に区切りを入れることで、頻出の単語を割り出したり、それらの情報を元にサマリーを取得したりすることができます。
英語の場合、「This is a pen.」という文では「This / is / a / pen.」のように、自然に単語が分かれています。一方で日本語の場合、「これはペンです。」というように単語の間に区切りがありません。
分かち書きでは、これを「これ / は / ペン / です / 。」というように単語を区切っていきます。
ということで、最初にPythonの分かち書き用のライブラリtinysegmenterをpipでインストールします。
tinysegmenterのインストールが終われば、後続の処理は英語のサイトと同様に行うことができます。
今回はYahooのニュースサイトから、次の記事のサマリーを取得してみましょう。元の記事は非常に長いので、ここでは全文の掲載は省略させていただきます。
英語のニュースサイトの時と同様、urlをArticle()に渡し、download()で記事を取得し、parse()で解析し、nlpで自然言語処理を実施した後に、summaryで記事のサマリーを表示します。
...:
url = "https://headlines.yahoo.co.jp/article?a=20190718-00209038-diamond-bus_all"...:
article = Article(url)...:
article.download()...:
article.parse()...:
article.nlp()...:
article.summary
ここではニュースサイトからテキスト情報のスクレイピング方法の基礎として、次のようなトピックについて触れていきました。
- newspaper3kを利用してニュースサイトから記事の全文取得
- 自然言語処理を用いたサマリー、キーワードの取得方法
次は、さらに応用として、次のようなトピックを確認していきましょう。
- ブログやニュースサイトのトップページに表示されている複数の記事を順に巡回し、記事を取得する。
- 取得した記事やサマリーを後から確認できるようファイルに保存する。