Задать вопрос
@jesuswhyy
Мимо проходил

Как спарсить котировки в Google Sheets?

Всем привет!

Есть китайский сайт с котировками фьючерсов на разные коммодитис. Например, вот фьючерс на рапсовое масло.

Мне нужно как-то спарсить эту большую цифру со стрелочкой справа от нее в гугл таблицу. Упражнялся с IMPORTXML/IMPORHTML, ни в какую не выходит.
  • Вопрос задан
  • 96 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
@rPman
Потому что эта цифра формируется на javascript, там с помощью ajax делается что то типа (не факт что я верно угадал, тупо поиском в инспекторе браузера нашел)
https://futsseapi.eastmoney.com/static/115_OI409_mx/11?callbackName=jQuery35104319374984631833_1697039773745&token=1101ffec61617c99be287c1bec3085ff&_=1697039773761

так что реверсить тебе логику этого кода либо использовать безголовый браузер который будет искать нужный элемент на страничке аналитически (стилями там просто не получится)

Если отреверсишь логику, теоретически сможешь ее повторить на javascrpt в google docs
Ответ написан
Комментировать
@DKSoft
Если готовы использовать node.js то приблизительно так
const { chromium } = require('playwright');
const { google } = require('googleapis');

async function run {
try{
//Парсим данные
 const browser = await chromium.launch({
    headless: true
  });
  const context = await browser.newContext();
  const page    = await context.newPage();
  const sURL="https://quote.eastmoney.com/qihuo/OI409.html"
  await page.goto(sURL);
  await page.waitForTimeout(3000); //почему то на стандартном waitForLoad после 2-х раз не дало загрузить 
  var data=await page.locator("div.zxj").innerText(); // наша цифра тут
console.log(data); //контрольный вывод                 
  await context.close();
  await browser.close();
//Записываем в таблицу
const auth = new google.auth.GoogleAuth({
  keyFile: 'token.json',
  scopes: ['https://www.googleapis.com/auth/spreadsheets']
});
//-----------------------------------------------------------------
const sheets = google.sheets({ version: 'v4', auth });
var spreadsheetId="spreadsheetId"; //id табицы
var range="Sheet1!A1:A1" //лист и диапазон
var values = [];
values[0]=data;
sheets.spreadsheets.values.update({
  spreadsheetId,
  range,
  valueInputOption: 'RAW',
  resource: {
    values
  }
}, (err, res) => {
  if (err) return console.log(`The API returned an error: ${err}`);
  console.log(res.data);
});
  
} catch (error) {
  console.log(error);
  }                   
                   }
run();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы