Cheerio attributeStartsWith选择器

问题描述 投票:0回答:4

我正在使用cheerioscrapewebsite。我想选择id以某个值开头的所有元素。但是当我在attributeStartsWith中使用jQuery时,我得到了malformed attribute selector语法错误。

你可以在jQuery中选择以'question-summary-'开头的所有div元素

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

我的node代码看起来像这样

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

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

我怎样才能在cheerio中实现这一目标?还有另一种方法吗?

javascript node.js jquery-selectors selector cheerio
4个回答
2
投票

你有语法错误:)

更改

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
投票

你试过用吗?

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

相反?

as | =正在查看''后跟连字符的内容。


0
投票

我现在看到我有一个拼写错误,奇怪的是它完全被jQuery排除。修正了拼写错误,现在可行了。 Cheerio是对的,jQuery应该更加不可原谅。

老选择器

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

新的选择器

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

注意最后的括号。

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


0
投票

我一直对你的问题感到好奇......

将这个简单的代码放在一起,解析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);

}
© www.soinside.com 2019 - 2024. All rights reserved.