@pfemidi
Тут могло бы быть краткое описание меня

Можно ли получить список всех возможных тегов toster.ru?

Можно ли получить список всех возможных тегов toster.ru и если можно, то как? Чтобы подписаться на все интересующие. Просматривать все 62 (в настоящее время) страницы с тегами "По вопросам" через браузер в поисках интересных по теме конечно можно, но это та-а-а-ак долго и муторно, в виде какого-нибудь простого файла .txt содержащего все возможные теги скопом было бы гораздо лучше.
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Nomad_77
@Nomad_77 Куратор тега Тостер
Product manager at habr.com
Такой возможности не предусмотрено. Если круг ваших интересов ограничен определёнными темами - вы можете воспользоваться поиском, если же нет - на странице каждого тега, в правой колонке, находятся теги близкие ему. Там вы можете найти теги по смежным с вашими интересами тематикам.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
kn1ght_t
@kn1ght_t
const puppeteer = require('puppeteer');
const fs = require('fs');
const endOfLine = require('os').EOL;

const pageStart = "https://toster.ru/tags/?page=";
const selector = ".card__head-title a";
const fileName = "tags.txt";
const pages = 62;

(async () => {
  const browser = await puppeteer.launch();

  const promises = [];
  for (let i = 1; i <= pages; i++) {
    promises.push(browser.newPage().then(async page => {
      const url = pageStart + i;
      console.log(url);
      await page.goto(url, {timeout: 100000});
      return await page.$$eval(selector, elements => {
        return Array.from(elements).map(element => element.innerText);
      });
    }));
  }

  const pagesData = await Promise.all(promises);

  const logger = fs.createWriteStream(fileName, {
    flags: 'a'
  });

  pagesDataByLines = pagesData.reduce((acc, el) => ([...acc, ...el]));

  pagesDataByLines.forEach((line, index) => {
    logger.write(`${index}. ${line} ${endOfLine}`);
  });

  await browser.close();
})();


первый раз писал scraper, так что 99.99%, что здесь что-то костыльно, но работает =)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы