NodeJS Cheerio Scraping li tags总是返回NULL

7kqas0il  于 2023-11-17  发布在  Node.js
关注(0)|答案(2)|浏览(107)

我试图在我的URL变量中将URL归零到页面上li标签中包含的URL。它应该很简单,但我无法让它工作。我得到了正确的元素数量,但它们都是空的。text()返回'' & html()返回null。我在这里做错了什么?

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

function getHistory(){
  let url = 'http://coinmarketcap.com/historical/';
  request(url,(error,response,html)=>{
    var $ = cheerio.load(html);
    $('li.text-center').each((i,element)=>{
      var omg = $(this).html();
      console.log(omg);
    });
  });
}

字符串

kmb7vmvb

kmb7vmvb1#

因为这段代码是在一个箭头函数中(它保留了this的词法值,而不是.each()设置它的值),所以this的值没有设置为你想要的值。如果你改变了这个:

var omg = $(this).html();

字符串
对此:

var omg = $(element).html();


你会看到你所期待的HTML。
请注意,您也可以将箭头函数更改为常规函数,然后.each()设置的this的任何值都将生效。
如果你真正想要的是href,那么你应该用你的选择器来定位<a>标签,并从中获取实际的href属性。你可以这样做:

function getHistory(){
  let url = 'http://coinmarketcap.com/historical/';
  request(url,(error,response,html)=>{
    let $ = cheerio.load(html);
    $('li.text-center a').each((i,element)=>{
      let omg = $(element).attr('href');
      console.log(omg);
    });
  });
}

w6mmgewl

w6mmgewl2#

这是因为你在一个 *arrow函数 * 中引用了this,而这个函数并没有自己生成this

相关问题