Я использую cheerio
для scrape
website
. Я хочу выбрать все элементы, где идентификатор начинается с определенного значения. Но когда я использую 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
? Есть ли другой способ сделать это?
У тебя синтаксическая ошибка :)
Изменять
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']")
вместо ?
поскольку |= ищет то, что находится внутри '', за которым следует дефис.
К сожалению, селектор contains prefix
тоже не работает :(
Теперь я вижу, что у меня опечатка, и, как ни странно, она полностью исключена 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);
}
может быть, ваша проблема в конечном дефисе в вашем селекторе?