Соскоб в Интернете, я не могу выбрать нужные теги - PullRequest
1 голос
/ 29 января 2020

Я пытался выполнить некоторые операции по просмотру веб-страниц и обнаружил проблему. У меня есть сценарий JS:

const request = require('request');
const cheerio = require('cheerio');
const url = 'https://www.sisal.it/scommesse-matchpoint?filtro=0&schede=man:1:21' // this is an 
italian betting site

request( url, (error, response, html) => {
   if (!error && response.statusCode == 200) {
      const $ = cheerio.load(html);

      let squadre = $("div"); 
      console.log(squadre.text())
   }
})

Это возвращает мне очень длинную строку со всем текстом div сайта, но в в этой строке нет текста, который я хочу. Я сделал этот скрипт, потому что после выполнения:

const $("div.*class*")

Он мне ничего не дал, даже если селекторы были верны, у вас есть какие-либо идеи о том, почему я не могу выбрать нужные дивы?

1 Ответ

1 голос
/ 29 января 2020

Эта страница создается динамически, то есть, если вы делаете запрос с помощью cheerio, вы получаете стандартный код для SPA и данные, которые вам необходимо загрузить позже.
Чтобы очистить сайты такого типа, вам нужно нечто более продвинутое, чем cheerio.
Простая в использовании опция - puppeteer
И код будет выглядеть примерно так:

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

  // Use here waitUntil to wait until additional requests would be made and the page would be fully loaded.
  await page.goto('https://www.sisal.it/scommesse-matchpoint?filtro=0&schede=man:1:21', {waitUntil: 'networkidle2'});

  const data = await page.evaluate(() => {
     // Make here all your JS actions and return JSON.stringify data.
     // You can access DOM with document.querySelector
     // and other JS methods for DOM manipulation
     return JSON.stringify({})
  });

  await browser.close()
})()

Просто поиграйте с API кукольника и найдите способ справиться с этой задачей. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...