nodejs:scraping
文書の過去の版を表示しています。
スクレイピング
例
// 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