LoginSignup
0
0

More than 1 year has passed since last update.

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

Posted at

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

また事前に、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();

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0