ユーザ用ツール

サイト用ツール


nodejs:scraping

文書の過去の版を表示しています。


スクレイピング

一つ上へ

必要なパッケージをインストールする

npm install cheerio axios

// index.js
 
const axios = require('axios');
const cheerio = require('cheerio');
 
// スクレイピング対象のURL
const url = 'https://announce.wowma.jp/';
 
// Slack Incoming WebhooksのURLを設定
const slackWebhookUrl = '';
 
// Axiosを使用してHTMLを取得
axios.get(url)
  .then(response => {
    // 取得したHTMLをCheerioでパース
    const $ = cheerio.load(response.data);
 
    // スクレイピング対象の要素を指定してデータを取得
    // .modWhiteBox01
    const targetDiv = $('.modWhiteBox01');
 
    // div要素内の uniMainList セレクタ指定して取得
    const innerTargetDiv = targetDiv.find('.uniMainList');
 
    // その中の li 要素を取得
    const liElements = innerTargetDiv.find('li');
 
    const items = [];
 
    liElements.each((index, element) => {
      // 改行で分割し、空白でない行のみを取り出す
      var lines = $(element).text().replace(/\t/g, '').split('\n').filter(line => line.trim() !== '');
 
      const date = lines[0].trim();
      const tag = lines[1].trim();
      const title = lines[2].trim();
      const today = new Date();
      const yesterday = new Date();
      yesterday.setDate(today.getDate() - 1);
      //console.log(yesterday.toISOString().split('T')[0].replace(/-/g, '/'));
      const formattedToday = today.toISOString().split('T')[0].replace(/-/g, '/');
      if (tag.includes('メンテナンス') || tag.includes('障害')) {
        items.push({
        date: date,
        tag: tag,
        title: title
        });
      }
    });
  console.log(items);
 
 
  })
  .catch(error => {
    console.error('エラー:', error);
  });

以下を実行する

npm run start
// index.js
 
const axios = require('axios');
const cheerio = require('cheerio');
const fs = require('fs');
const csv = require('csv-parser');
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
 
 
// スクレイピング対象のURL
//const url = 'https://www.amazon.co.jp/dp/B0B3LQH6CR'; 
 
const urls = [
'https://www.amazon.co.jp/dp/B0B3LQH6CR',
'https://www.amazon.co.jp/dp/B08BPRKJ6Q?th=1',
'https://www.amazon.co.jp/dp/B003Y8YUVK?th=1',
'https://www.amazon.co.jp/dp/B01N631MK8',
];
 
const data = [];
 
const csvWriter = createCsvWriter({
  path: 'output.csv',
  encoding: 'utf8',
  header: [
      { id: 'url', title: 'URL' },
      { id: 'price', title: 'Price' },
      { id: 'stock', title: 'Stock' }
  ]
});
 
// Axios header
const headers = {
  //'Accept-Language': 'en-US;q=0.9,en;q=0.8'
}
 
// 非同期処理を扱うためにasync functionを使用
async function fetchData() {
  for (const url of urls) {
    try {
      const response = await axios.get(url, { headers });
 
      const $ = cheerio.load(response.data);
 
      const price = $('#centerCol').find('#corePriceDisplay_desktop_feature_div').find('span.a-price-whole').html().trim();
      let stock = '';  // stockの変数を宣言
 
      const stockInputElement = $('div.a-button-stack').find('input');
      if (stockInputElement.length > 0 ) {
        // Value属性の値を取得
        const valueAttribute = stockInputElement.attr('value');
        if (valueAttribute === 'カートに入れる') {
          stock = '1';
        }
      }
      data.push({ url, price, stock });
      console.log(data);
 
    } catch (error) {
      console.error('エラー:', error);
    }
  }
 // 全ての非同期処理が完了した後にCSVに書き込み
  await csvWriter.writeRecords(data);
  console.log('CSVにデータが書き込まれました。');
}
 
// fetchDataを呼び出し
fetchData();
nodejs/scraping.1702340777.txt.gz · 最終更新: 2023/12/12 09:26 by mikoto