Атрибут Cheerio начинается с селектора

Я использую cheerio для scrapewebsite. Я хочу выбрать все элементы, где идентификатор начинается с определенного значения. Но когда я использую attributeStartsWith, как в jQuery, я получаю синтаксическую ошибку malformed attribute selector.

Это вы можете сделать в jQuery, чтобы выбрать все div элементы, начинающиеся с «вопрос-резюме-».

$('div[id^ = "question-summary-"')

Мой код node выглядит так

const cheerio = require('cheerio')
const $ = cheerio.load('https://stackoverflow.com/')

console.info('text', $('div[id^ = "question-summary-"').text())

Как я могу сделать это в cheerio? Есть ли другой способ сделать это?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 198
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

У тебя синтаксическая ошибка :)

Изменять

console.info('text', $("div[id^='question-summary-'").text())

к

console.info('text', $("div[id^='question-summary-']").text())

Полный код

const $ = cheerio.load('https://stackoverflow.com/')

console.info('text', $("div[id^='question-summary-']").text());

Ваше здоровье

ты пробовал использовать

$("[id|='question-summary']")

вместо ?

поскольку |= ищет то, что находится внутри '', за которым следует дефис.

может быть, ваша проблема в конечном дефисе в вашем селекторе?

Carl Verret 09.04.2019 22:20

К сожалению, селектор contains prefix тоже не работает :(

Tarabass 09.04.2019 22:26

Теперь я вижу, что у меня опечатка, и, как ни странно, она полностью исключена jQuery. Исправил опечатку и теперь работает. Чирио был прав, и jQuery должен быть более непростительным.

Старый селектор

$('div[id^ = "question-summary-"')

Новый селектор

$('div[id^ = "question-summary-"]')

Обратите внимание на скобку в конце.

Как ни странно, первый селектор полностью исключается jQuery. Чтобы протестировать старый селектор, перейдите в stackoverflow.com, введите F12 и вставьте его в консоль. Вы увидите, что оба селектора работают.

Меня интересовала твоя проблема...

Собрав этот простой код, не было проблем с разбором главной страницы stackoverflow...

const cheerio = require('cheerio')
const request = require('request')

try {


  request('https://stackoverflow.com/', function (error, response, html) {
    if (!error && response.statusCode == 200) {
      var $ = cheerio.load(html);

      $('[id|=question-summary]').each(function (i, element) {
        console.info(element.text());
      });
    }
  });

}
catch (e) {


  console.info(e);

}

Другие вопросы по теме