search
LoginSignup
0

posted at

国際信州学院大学をSeleniumで、スクレイピングする【TypeScript】

国際信州大学のページタイトルとニュース一覧をスクレイピングを行います。
国際信州大学のホームページ

また事前に、ChromeDriverとGoogle Chromeのインストールが完了していることを前提に行います。

使用技術

  • TypeScript
  • Node.js
  • Selenium
  • WSL2(Ubuntu)

初期化処理

  • Google Chromeの設定:init
  • スクレイピング先のURLの設定:setUrl
import { Builder, By, Capabilities, WebDriver } from 'selenium-webdriver';

let webDriver: WebDriver | null = null;

/**
 * 初期化処理
 */
const init = async () => {
  webDriver = await new Builder()
    // Chrome起動時のオプションの設定
    .withCapabilities(Capabilities.chrome().set('chromeOptions', {
      args: [
        '--headless',
        '--no-sandbox'
      ],
      w3c: false
    }
    ))
    .build();
};

/**
 * スクレイピング先のURLの設定
 */
const setUrl = async (url: string) => {
  if (webDriver) {
    await webDriver.get(url);
  }
}

/**
 * メイン関数
 * 
 */
const main = async () => {
  await init();
  await setUrl('https://kokushin-u.jp/');
};

main();

タイトルの取得

// タイトル取得
console.log(await webDriver.getTitle());

ニュース一覧の取得

forEachで、一覧化されたニュースを、一つずつ内容を表示します。

const news = await webDriver.findElements(By.className('post'));

news.forEach(async (element) => {
  console.log(await element.getText());
});

最終的なコード

import { Builder, By, Capabilities, WebDriver } from 'selenium-webdriver';

let webDriver: WebDriver | null = null;

/**
 * 初期化処理
 */
const init = async () => {
  webDriver = await new Builder()
    // Chrome起動時のオプションの設定
    .withCapabilities(Capabilities.chrome().set('chromeOptions', {
      args: [
        '--headless',
        '--no-sandbox'
      ],
      w3c: false
    }
    ))
    .build();
};

/**
 * スクレイピング先のURLの設定
 */
const setUrl = async (url: string) => {
  if (webDriver) {
    await webDriver.get(url);
  }
}

/**
 * メイン関数
 * 
 * @returns 
 */
const main = async () => {
  await init();
  await setUrl('https://kokushin-u.jp/');

  if (!webDriver) return;

  // タイトル取得
  console.log(await webDriver.getTitle());

  // ニュース一覧取得
  const news = await webDriver.findElements(By.className('post'));

  // ニュース内容の表示
  news.forEach(async (element) => {
    console.log(await element.getText());
  });
};

main();

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0