Cheerio 属性 StartsWith 选择器

Cheerio attributeStartsWith selector

我正在使用 cheerioscrape 一个 website。我想 select id 以特定值开头的所有元素。但是当我像 jQuery 那样使用 attributeStartsWith 时,我得到了 malformed attribute selector 语法错误。

您可以在 jQuery 到 select 所有 div 以 'question-summary-'

开头的元素中执行此操作
$('div[id^="question-summary-"')

我的 node 代码如下所示

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

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

如何在 cheerio 中完成此操作?还有其他方法吗?

你有一个语法错误:)

改变

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

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

完整代码

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

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

干杯

您尝试过使用

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

改为 ?

因为 |= 正在查找 '' 后跟连字符的内容。

我现在发现我有一个错字,奇怪的是 jQuery 完全排除了它。修正了拼写错误,现在它可以工作了。 Cheerio说的对,jQuery应该更不可原谅

旧选择器

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

新选择器

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

注意末尾的括号。

奇怪的是,jQuery 完全排除了第一个选择器。要测试旧的选择器,请转到 whosebug.com,输入 F12 并将其粘贴到控制台中。您会看到两个选择器都在工作。

我一直很好奇你的问题...

把这段简单的代码放在一起,解析Whosebug的首页没有问题...

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

try {


  request('https://whosebug.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);

}