Google Colabを使ったPythonスクレイピング:ヤフーニュースのタイトル抽出

はじめに

現在、データ収集は多くのプロジェクトで重要な役割を果たしています。特に、ニュースサイトから情報を抽出することは、データ分析や機械学習モデルのトレーニングに役立ちます。ここでは、Google Colabを使ってPythonでスクレイピングを行い、ヤフーニュースのタイトルを抽出する方法を紹介します。

1. Google Colabの準備

Google Colabは、無料で使用できるクラウドベースのJupyterノートブック環境です。以下の手順でGoogle Colabを開きます。

  1. Google Colabにアクセスします。
  2. 「新しいノートブック」を選択して新しいプロジェクトを作成します。

2. 必要なライブラリのインストール

スクレイピングには、BeautifulSoupとrequestsというライブラリを使用します。これらのライブラリをインストールするには、以下のコードをノートブックに貼り付けて実行します。

python

!pip install beautifulsoup4
!pip install requests

3. スクリプトの記述

以下のコードをノートブックに貼り付け、ヤフーニュースのタイトルを抽出するスクレイピングスクリプトを作成します。

python

import requests
from bs4 import BeautifulSoup

# ヤフーニュースのURL
url = 'https://news.yahoo.co.jp/'

# ページを取得
response = requests.get(url)
response.raise_for_status()  # 要求が成功したか確認

# BeautifulSoupを使ってHTMLをパース
soup = BeautifulSoup(response.content, 'html.parser')

# タイトルを抽出
titles = soup.find_all('h3', class_='sc-1m2tg68-0 cMZsPf')

# タイトルを表示
for title in titles:
    print(title.get_text())

4. スクリプトの実行

上記のコードをノートブックセルに貼り付け、Shift + Enterを押して実行します。実行結果として、ヤフーニュースのタイトルが表示されます。

5. 結果の保存

抽出されたタイトルをCSVファイルに保存するには、以下のコードを追加します。

python

import pandas as pd

# タイトルをリストに格納
title_list = [title.get_text() for title in titles]

# DataFrameに変換
df = pd.DataFrame(title_list, columns=['Title'])

# CSVファイルに保存
df.to_csv('yahoo_news_titles.csv', index=False)

このコードを実行すると、抽出されたタイトルがyahoo_news_titles.csvという名前のCSVファイルに保存されます。

6. Google Driveに保存

Google Colabでは、Google Driveに直接ファイルを保存することも可能です。以下のコードを追加して、CSVファイルをGoogle Driveに保存します。

python

from google.colab import drive
drive.mount('/content/drive')

# Google Driveに保存
df.to_csv('/content/drive/My Drive/yahoo_news_titles.csv', index=False)

7. 簡単な裏技2つ

  1. 定期的なスクレイピング: Google Colabのスケジューラ機能を使って、定期的にスクレイピングを実行することができます。例えば、毎日午前9時にスクレイピングを実行するように設定すると、毎日最新のニュースが自動的に取得されます。
  2. 複数のニュースサイトからのスクレイピング: 1つのスクリプトで複数のニュースサイトから情報を取得することも可能です。スクリプトを修正して、複数のURLからデータを抽出し、CSVファイルにまとめるようにします。例えば、ヤフーニュースとGoogleニュースからタイトルを取得するように修正します。pythonurls = [ 'https://news.yahoo.co.jp/', 'https://news.google.com/' ] all_titles = [] for url in urls: response = requests.get(url) response.raise_for_status() soup = BeautifulSoup(response.content, 'html.parser') titles = soup.find_all('h3', class_='sc-1m2tg68-0 cMZsPf') all_titles.extend([title.get_text() for title in titles]) df = pd.DataFrame(all_titles, columns=['Title']) df.to_csv('multiple_news_titles.csv', index=False)

以上が、Google Colabを使ったPythonスクレイピングでヤフーニュースのタイトルを抽出する方法と、簡単な裏技2つです。これで、最新のニュースを簡単に取得して分析することができます。

スプレッドシートでスクレイピングを使ったニュース記事の自動化

はじめに

現在、情報の流れは非常に速く、最新のニュースを取得し記事にするのは大変な作業です。しかし、Googleスプレッドシートとスクレイピング技術を組み合わせることで、これらの作業を自動化することができます。ここでは、ヤフーニュースのタイトルをスクレイピングしてスプレッドシートに取得し、それを基にワードプレスの記事を作成する方法を紹介します。

1. スプレッドシートの準備

まず、Googleスプレッドシートを開き、新しいシートを作成します。このシートには、スクレイピング結果を格納するための列を用意します。例えば、以下のような列を作成します。

  • A列: タイトル
  • B列: URL

2. スクリプトの作成

スプレッドシート内でスクリプトを作成するために、メニューから「拡張機能」>「Apps Script」を選択します。新しいプロジェクトが開きます。

3. スクリプトの記述

以下のスクリプトをコピーして、Apps Scriptエディタに貼り付けます。このスクリプトは、ヤフーニュースのページからタイトルとURLを抽出します。

function scrapeYahooNews() {
  var url = 'https://news.yahoo.co.jp/';
  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText();

  // ページ内のニュースタイトルとURLを抽出
  var titles = html.match(/<h3 class="sc-1m2tg68-0 cMZsPf"><a href="([^"]+)">([^<]+)<\/a>/g);
  if (titles) {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.clear(); // シートをクリア

    // タイトルとURLをスプレッドシートに書き込む
    for (var i = 0; i < titles.length; i++) {
      var match = titles[i].match(/<h3 class="sc-1m2tg68-0 cMZsPf"><a href="([^"]+)">([^<]+)<\/a>/);
      if (match) {
        var url = match[1];
        var title = match[2];
        sheet.appendRow([title, url]);
      }
    }
  }
}

4. スクリプトの実行

スクリプトを保存した後、メニューから「実行」>「scrapeYahooNews」を選択してスクリプトを実行します。最初に実行する際は、Googleアカウントの認証が求められますので、必要な権限を許可してください。

5. 結果の確認

スクリプトが正常に実行されると、スプレッドシートのA列とB列にヤフーニュースのタイトルとURLが表示されます。

6. ワードプレスへの転載

スプレッドシートから抽出した情報をワードプレスの記事に転載するには、以下の手順を踏みます。

  1. スプレッドシートからデータをコピーします。
  2. ワードプレスの管理画面にログインし、新しい記事を作成します。
  3. コピーしたデータを記事本文に貼り付けます。
  4. 記事を公開します。

簡単な裏技2つ

  1. スケジュール設定: スプレッドシートのスクレイピングを定期的に実行するには、Google Apps Scriptのトリガー機能を使用します。メニューから「編集」>「現在のプロジェクトのトリガー」を選択し、新しいトリガーを作成します。ここでは、特定の時間にスクリプトを実行するように設定できます。例えば、毎日午前9時に実行するように設定すると、毎日最新のニュースが自動的に取得されます。
  2. 複数のニュースサイトからのスクレイピング: 1つのスクリプトで複数のニュースサイトから情報を取得することも可能です。スクリプトを修正して、複数のURLからデータを抽出し、スプレッドシートにまとめるようにします。例えば、ヤフーニュースとGoogleニュースからタイトルとURLを取得するように修正します。javascriptfunction scrapeMultipleNewsSites() { var urls = [ 'https://news.yahoo.co.jp/', 'https://news.google.com/' ]; var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.clear(); // シートをクリア for (var i = 0; i < urls.length; i++) { var url = urls[i]; var response = UrlFetchApp.fetch(url); var html = response.getContentText(); // ページ内のニュースタイトルとURLを抽出 var titles = html.match(/<h3 class="sc-1m2tg68-0 cMZsPf"><a href="([^"]+)">([^<]+)<\/a>/g); if (titles) { for (var j = 0; j < titles.length; j++) { var match = titles[j].match(/<h3 class="sc-1m2tg68-0 cMZsPf"><a href="([^"]+)">([^<]+)<\/a>/); if (match) { var url = match[1]; var title = match[2]; sheet.appendRow([title, url]); } } } } }

以上が、スプレッドシートでスクレイピングを行い、ヤフーのニュースのタイトルを抽出してワードプレスの記事に転載する方法と、簡単な裏技2つです。これで、最新のニュースを簡単に取得して記事にすることができます。