※この記事にはプロモーションが含まれています。

01. 超簡単スクレイピング

Pythonで初心者でも超簡単にWebスクレイピング(newspaper3kでHTMLからテキスト抽出)

更新日:

WEBスクレイピングとは、WEBサイトから情報を自動的に取得し、必要に応じて、情報の加工などを行うことです。取得したデータは、ファイルやデータベースに保存します。
 
Pythonでは、newspaper3kというライブラリを利用して、非常に簡単にテキストデータをWEBサイトから自動的に取得することができます。
 
 
ニュースサイトやブログから、

  • 自動的にデータを取得し保存したい。
  • キーワードを取得して、トレンドを把握したい。
  • 自然言語処理を用いてサマリーだけを取得したい。

という場合に利用すると便利です。
 
 
これを応用して、次のようなこともできます。

  • ニュースサイトのトップページに表示されている複数の記事を順に巡回し、ニュース記事やサマリー、キーワードをダウンロードし、後からまとめて読む。
  • ブログ村やはてなブログなどのブログサイトや、個人ブログのトップページに表示されている複数の記事を順に巡回し、ブログ記事やサマリー、キーワードをダウンロードし、後からまとめて読む。
  • また、これら取得したキーワードを分析し、トレンドとなっているキーワードを把握する。

 
ここではまず、newspaper3kというライブラリの基本となる使い方を確認していきましょう。
 
newspaper3kの基礎は既にご存じで、先にニュースサイトのトップページに表示されている多くの記事を一度に取得する方法や保存方法を確認されたい方は、以下のリンクをご利用ください。

 
 

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が発売中!
発売数10,000万本突破を記念して、今だけ期間限定で87%オフの大セール中!

初心者がWebスクレイピングする為のPython環境準備

ここでは、Jupyter Notebookで実行した場合の結果を表示していますが、他のPython3の環境でも同様です。もしまだPython3の環境設定がお済でないなら、以下の記事を参考に環境構築してみてください。

 
Python3の実行環境の準備が整いましたら、次はnewspaper3kをインストールする必要があります。Python3の環境では、newspaper3kは標準ではインストールされていませんので、pipやcondaを利用して別途インストールする必要があります。
 
pipを利用してインストールする場合は、以下のコマンドを入力してください。

pip install newspaper3k

pipの詳しい説明は「Pythonでの外部ライブラリの追加インストール方法」を参照ください。

 
またcondaを利用してインストールする場合は、次のコマンドを入力してください。

conda install -c conda-forge newspaper3k

condaの詳しい説明は「Anacondaでの外部ライブラリの追加インストール方法」を参照ください。

 
 

初心者がPythonで英語のニュースサイトをWebスクレイピングする方法

これからnewspaper3kというライブラリの基本となる使い方を紹介していきますが、日本語の処理には別途追加の手順が必要となりますので、まずは英語のサイトから始めます。
 
ここはでは、英語の学習者にも有名なサイト the japan times から記事を取得してみます。
 
その中から今回は、次の記事をスクレイピングしていきましょう。

 The Japan Times
Top Japanese comedian to retire in wake of 'underground business' s...
https://www.japantimes.co.jp/news/2019/07/19/national/top-japanese-comedian-retire-wake-underground-business-scandal/#.XTO0IXduKP9
Thanks to his purported gig entertaining elements of Japan’s underworld in 2014, Hiroyuki Miyasako no longer has a contract with influential Yoshimoto Kogyo.
 
 
まずはnewspaperからArticleをインポートします。

In [1]: from newspaper import Article

 
次にArticleに対して、確認したいWEBサイトのアドレスを渡します。ここでは、変数urlを定義して、urlにWEBサイトのアドレスを格納し、Article()に渡しています。

In [2]: url = "https://www.japantimes.co.jp/news/2019/07/19/national/top-japanese-comedian-retire-wake-underground-business-scandal/#.XTKwtnduKP8"
...: article = Article(url)

またArticleからの結果を変数articleに格納しています。
 
 
そして、download()で記事を取得し、parse()で解析します。

In [3]: article.download()
...: article.parse()

 
 
ここまでが記事情報を単純に取得する一連の処理になります。これらの取得した情報を表示してみましょう。publish_dateで記事の発行された日が表示されます。

In [4]: article.publish_date
Out[4]: datetime.datetime(2019, 7, 19, 0, 0)

 
 
authorsで記事の作成者を確認できます。しかし、ここでは作者が記載されていなかったのか、['No Author']となっています。

In [5]: article.authors
Out[5]: ['No Author']

 
 
textを用いて記事の全文を表示することもできます。

In [6]: article.text
Out[6]:

 
 
以上の処理が、ライブラリnewspaper3kを用いて記事を取得する方法になりますが、newspaper3kでは、さらに自然言語処理を利用して、記事のキーワードだけを抽出したり、サマリーを取得することができます。
 
自然言語処理を利用するには、まずはPythonの自然言語処理ライブラリであるntlkをダウンロードする必要があります。次の処理を実行してntlkをダウンロードしてください。

In [7]: import nltk
...: nltk.download('punkt')
Out[7]: [nltk_data] Downloading package punkt to
            [nltk_data] C:\Users\UserName\AppData\Roaming\nltk_data...
            [nltk_data] Package punkt is already up-to-date!
            True

 
 
上記のように最後にTrueと表示されれば、準備完了です。
 
nlp()で自然言語処理を実行します。

In [8]: article.nlp()

 
nlp()を実行するとキーワードとサマリーが取得できるようになります。キーワードを確認してみましょう。

In [8]: article.keywords
Out[8]:

 
 
summaryによって、取得した記事のサマリーを表示することができます。

In [9]: article.summary
Out[9]:

 
 
このようにして、newspaper3kにより、英語のニュースサイトから記事の全文やサマリー、キーワードを取得することが簡単にできました。

 
 

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が発売中!
発売数10,000万本突破を記念して、今だけ期間限定で87%オフの大セール中!

初心者がPythonで日本語のニュースサイトをWebスクレイピングする方法

次の日本語のニュースサイトから記事の情報を取得してみましょう。自然言語処理を日本語で行う場合、分かち書きという英語のように、言葉のくぎりに空白を入れる処理が必要になります。
 
自然言語処理では、単語に区切りを入れることで、頻出の単語を割り出したり、それらの情報を元にサマリーを取得したりすることができます。
 
英語の場合、「This is a pen.」という文では「This / is / a / pen.」のように、自然に単語が分かれています。一方で日本語の場合、「これはペンです。」というように単語の間に区切りがありません。
 
分かち書きでは、これを「これ / は / ペン / です / 。」というように単語を区切っていきます。
 
ということで、最初にPythonの分かち書き用のライブラリtinysegmenterをpipでインストールします。

pip install tinysegmenter

 
tinysegmenterのインストールが終われば、後続の処理は英語のサイトと同様に行うことができます。
 
今回はYahooのニュースサイトから、次の記事のサマリーを取得してみましょう。元の記事は非常に長いので、ここでは全文の掲載は省略させていただきます。

 
英語のニュースサイトの時と同様、urlをArticle()に渡し、download()で記事を取得し、parse()で解析し、nlpで自然言語処理を実施した後に、summaryで記事のサマリーを表示します。

In [10]: from newspaper import Article
...: url = "https://headlines.yahoo.co.jp/article?a=20190718-00209038-diamond-bus_all"
...: article = Article(url)
...: article.download()
...: article.parse()
...: article.nlp()
...: article.summary
Out[10]:

 
 
ここではニュースサイトからテキスト情報のスクレイピング方法の基礎として、次のようなトピックについて触れていきました。

  • newspaper3kを利用してニュースサイトから記事の全文取得
  • 自然言語処理を用いたサマリー、キーワードの取得方法

 
次は、さらに応用として、次のようなトピックを確認していきましょう。

  • ブログやニュースサイトのトップページに表示されている複数の記事を順に巡回し、記事を取得する。
  • 取得した記事やサマリーを後から確認できるようファイルに保存する。
 
 

 
 
 
最後に...


Pythonの学習においては、実際に様々なプログラムを書いて試していくことが非常に重要です。Pythonについて、さらに詳しく学ばれたい方は、以下の私のUdemy講座をご検討いただければ幸いです。


Pythonを用いて世界中のWebサイトから自動的にデータ収集する方法を、基礎からていねいに学ぶことができます。Pythonを初めて学ばれた方も、最初に取り組みやすい内容になっています。


>> Pythonによるビジネスに役立つWebスクレイピング
発売数9,000本突破を記念して大セール中!期間限定になりますのでお早めに。
Pythonによるビジネスに役立つWebスクレイピング(BeautifulSoup、Selenium、Requests)講座の画面

既に9,000名以上の方に受講頂き、大変好評です。またコースに満足いただけない場合でも、30日返金保証があるので安心です。

期間限定の割引クーポンは、こちらから!
>> Pythonによるビジネスに役立つWebスクレイピング
   
   





-01. 超簡単スクレイピング

Copyright© ビジPy , 2024 All Rights Reserved.