NodeJS,Cheerio。如何在不知道选择器的情况下查找文本?

NodeJS, Cheerio. How to find text without knowing selectors?

我正在尝试查找特定文本。就我而言,我不知道目标的 HTML 代码中的选择器、元素、父级或任何其他内容。只是想看看这个页面是否有 robots.txt。通过搜索 'User-agent:'.

来做到这一点

有人知道如何在解析中搜索特定文本,而不知道页面上的任何其他信息吗?

    getApiTest = async () => {
    axios.get('http://webilizerr.com/robots.txt')
        .then(res => {
            const $ = cheerio.load(res.data)
            console.log($(this).text().trim() === 'User-agent:'
            )
        }).catch(err => console.error(err))
};

谢谢你的时间。

您可以简单地使用 regular expression 来检查“User-agent”是否是返回的 HTML 的一部分。

注意:如果抓取的页面没有 robots.txt 文件和 returns 404 状态代码(通常应该是这种情况),axios 会抛出错误。您应该在 catch 声明中考虑这一点。

下面是一个工作示例:

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

const getApiTest = async () => {
  try {
    const res = await axios.get("https://www.finger.digital/robots.txt");
    const $ = cheerio.load(res.data);
    const userAgentRegExp = new RegExp(/User-agent/g);
    const userAgentRegExpResult = userAgentRegExp.exec($.text());
    if (!userAgentRegExpResult) {
      console.log("Doesn't have robots.txt");
      return;
    }
    console.log("Has robots.txt");
  } catch (error) {
    console.error(error);
    console.log("Doesn't have robots.txt");
  }
};

getApiTest();