Cheerio attributeStarts с селектором - PullRequest
0 голосов
/ 09 апреля 2019

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

Это можно сделать в jQuery, чтобы выбрать все div элементы, начинающиеся с 'question-summary -'

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

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 09 апреля 2019

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

Изменение

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

до

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

Полный код

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

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

Приветствия

1 голос
/ 09 апреля 2019

Вы пытались использовать

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

вместо этого?

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

0 голосов
/ 09 апреля 2019

Мне было любопытно узнать о вашей проблеме ...

, сложив этот простой код, без проблем проанализировал первую страницу 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.log(element.text());
      });
    }
  });

}
catch (e) {


  console.log(e);

}
0 голосов
/ 09 апреля 2019

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

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

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

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

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

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

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

...