【问题标题】:Can't fix an error caused by cheerio while using axios使用axios时无法修复cheerio导致的错误
【发布时间】:2021-11-10 06:47:19
【问题描述】:

我正在尝试使用axioscheeriowebpage 获取不同帖子的标题,但脚本总是抛出此错误Error: cheerio.load() expects a string。我该如何解决?

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

const startLink = 'https://old.reddit.com/r/programming/';

const getPostTitles = (link) =>{
        const resp = axios.get(link);
        const $ = cheerio.load(resp.data);
        const postTitles = [];

        $('div > p.title > a').each((_idx, el) => {
            const postTitle = $(el).text()
            postTitles.push(postTitle)
        });

        return postTitles;
};

const results = getPostTitles(startLink);
console.log(results);

【问题讨论】:

    标签: javascript node.js web-scraping axios cheerio


    【解决方案1】:

    Axios.get() 返回一个承诺,因此您需要 await it 或使用 .then() 来获取结果。我使用了下面的async/await 语法,这将显示帖子标题:

    const axios = require('axios');
    const cheerio = require('cheerio');
    
    const startLink = 'https://old.reddit.com/r/programming/';
    
    const getPostTitles = async (link) => {
        const resp = await axios.get(link);
        const $ = cheerio.load(resp.data);
        const postTitles = [];
    
        $('div > p.title > a').each((_idx, el) => {
            const postTitle = $(el).text()
            postTitles.push(postTitle)
        });
    
        return postTitles;
    };
    
    async function testGetPostTitles() {
        const results = await getPostTitles(startLink);
        console.log(results);
    }
    
    testGetPostTitles();
    

    【讨论】:

    • Ta.. 该线程中有一些有趣的东西!
    猜你喜欢
    • 2020-03-08
    • 2021-10-24
    • 1970-01-01
    • 2023-04-08
    • 2019-10-24
    • 2013-10-30
    • 2018-05-06
    • 2019-11-10
    • 2017-06-10
    相关资源
    最近更新 更多