استخراج قیمت سهام تسلا با استفاده از Node.js و Puppeteer

image

استخراج قیمت سهام تسلا با استفاده از Node.js و Puppeteer

Code_Jedi Hacker Noon profile picture

در این آموزش، قصد دارم به شما نشان دهم که چگونه می‌توانید آخرین قیمت سهام تسلا (Tesla) را با استفاده از Node.js و Puppeteer استخراج (Scrape) کنید.

پس بیایید شروع کنیم!

اول از همه، باید Puppeteer را نصب کنید. برای این کار از دستور زیر استفاده کنید:

npm i puppeteer

اگر هنوز

npm

،

package.json

، و

node_modules

را تنظیم نکرده‌اید، می‌توانید از این آموزش استفاده کنید.

بعد از نصب Puppeteer، یک فایل JavaScript جدید ایجاد کنید و در خط اول، Puppeteer را فراخوانی کنید:

const puppeteer = require('puppeteer');

سپس یک تابع async ایجاد کنید که در آن کد اصلی ما نوشته خواهد شد:

const puppeteer = require('puppeteer');
async function start() {
}
start();

حالا آماده‌ایم تا استخراج داده‌ها را شروع کنیم.

ابتدا باید یک نمونه جدید از مرورگر (Browser) ایجاد کنید و URLای که قرار است اسکراپر به آن مراجعه کند را تعریف کنید:

const puppeteer = require('puppeteer');
async function start() {
  const url = 'https://finance.yahoo.com/quote/TSLA?p=TSLA&.tsrc=fin-srch';
  const browser = await puppeteer.launch({
    headless: false
  });
}

در این مرحله، باید یک صفحه جدید در مرورگر باز کنید و به URL تعریف شده بروید:

const puppeteer = require('puppeteer');
async function start() {
  const url = 'https://finance.yahoo.com/quote/TSLA?p=TSLA&.tsrc=fin-srch';
  const browser = await puppeteer.launch({
    headless: false
  });
  const page = await browser.newPage();
  await page.goto(url);
}

برای این مرحله، باید به این لینک بروید، روی قیمت فعلی سهام راست‌کلیک کنید و گزینه Inspect را انتخاب کنید:

image

یک پنجره در سمت راست صفحه شما ظاهر می‌شود. باید عنصر مربوط به قیمت سهام را پیدا کنید:

image

بعد از پیدا کردن عنصر، روی آن راست‌کلیک کرده و گزینه “Copy full Xpath” را انتخاب کنید. این کار به ما کمک می‌کند تا به عنصر قیمت سهام دسترسی پیدا کنیم.

image

بعد از کپی کردن Xpath، این سه خط کد را به تابع خود اضافه کنید:

var element = await page.waitForXPath("Xpath عنصر قیمت سهام را اینجا قرار دهید")
  var price = await page.evaluate(element => element.textContent, element);
  console.log(price);

تابع

Advertisement Banner
Advertisement Banner

page.waitForXPath()

عنصر قیمت سهام را پیدا می‌کند. سپس، تابع

page.evaluate

محتوای متنی عنصر را استخراج کرده و با استفاده از

console.log()

آن را چاپ می‌کند.

در این مرحله، کد شما باید چیزی شبیه به این باشد:

const puppeteer = require('puppeteer');
async function start() {
  const url = 'https://finance.yahoo.com/quote/TSLA?p=TSLA&.tsrc=fin-srch';
  const browser = await puppeteer.launch({
    headless: false
  });
  const page = await browser.newPage();
  await page.goto(url);
  var element = await page.waitForXPath("/html/body/div[1]/div/div/div[1]/div/div[2]/div/div/div[5]/div/div/div/div[3]/div[1]/div[1]/span[1]")
  var price = await page.evaluate(element => element.textContent, element);
  console.log(price);
}
start()

اگر کد فعلی را اجرا کنید، متوجه خواهید شد که هنگام مراجعه به URL، یک پاپ‌آپ ظاهر می‌شود:

image

برای حل این مشکل، این دو خط کد را قبل از تعریف متغیر `element` اضافه کنید:

var accept = ("#consent-page > div > div > div > form > div.wizard-body > div.actions.couple > button");
await page.click(accept)

این کد دکمه “Accept All” را پیدا کرده و روی آن کلیک می‌کند تا پاپ‌آپ بسته شود.

 

حالا شما یک تابع کاربردی دارید که به URL تعریف شده مراجعه می‌کند، آخرین قیمت سهام تسلا را استخراج می‌کند و آن را در ترمینال چاپ می‌کند.

برای پیشرفت بیشتر، می‌توانید این کدها را در یک حلقه `for` قرار دهید:

for(var k = 1; k < 2000; k++){
      var element = await page.waitForXPath("/html/body/div[1]/div/div/div[1]/div/div[2]/div/div/div[5]/div/div/div/div[3]/div[1]/div[1]/span[1]")
      var price = await page.evaluate(element => element.textContent, element);
      console.log(price);
      await page.waitForTimeout(1000);
    }

تابع

page.waitForTimeout(1000)

باعث می‌شود که برنامه قبل از تکرار حلقه، 1000 میلی‌ثانیه (1 ثانیه) صبر کند.

و در نهایت،

add a browser.close()

را بعد از حلقه `for` اضافه کنید تا مرورگر بسته شود و اجرای کد به پایان برسد:

const puppeteer = require('puppeteer');
async function start() {
    const url = 'https://finance.yahoo.com/quote/TSLA?p=TSLA&.tsrc=fin-srch';
    const browser = await puppeteer.launch({
      headless: false
    });  
    const page = await browser.newPage();
    await page.goto(url);
    var accept = ("#consent-page > div > div > div > form > div.wizard-body > div.actions.couple > button");
    await page.click(accept);
    for(var k = 1; k < 2000; k++){
      var element = await page.waitForXPath("/html/body/div[1]/div/div/div[1]/div/div[2]/div/div/div[5]/div/div/div/div[3]/div[1]/div[1]/span[1]");
      var price = await page.evaluate(element => element.textContent, element);
      console.log(price);
      await page.waitForTimeout(1000);
    }
    browser.close();
}
start();

این مقاله همچنین اینجا منتشر شده است.

دیدگاهتان را بنویسید