我希望在给定一个查询的情况下进行Google搜索,但我无法获得css_IDENTIFIERS来处理以下代码:

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

async function scrape (req, res) {
    try {
        const query = req.params.query;
        const encodedQuery = encodeURIComponent(query);
        // Set the number of search results you want (e.g., 10 in this case)
        const numResults = 10;

        const response = await axios.get(`https://www.google.com.mx/search?q=${encodedQuery}&start=${numResults}`);
        const html = response.data;

        console.log(html)

        const css_identifier_result = ".tF2Cxc";
        const css_identifier_title = "h3";
        const css_identifier_link = ".yuRUbf a";
        const css_identifier_text = ".IsZvec";

        const $ = cheerio.load(html);
        const results = $(css_identifier_result);

        const output = [];

        results.each((index, element) => {
            console.log("aaaaaaaaaaaaaaaaa")
            const item = {
            title: $(element).find(css_identifier_title).text(),
            link: $(element).find(css_identifier_link).attr('href'),
            text: $(element).find(css_identifier_text).text(),
            };

            output.push(item);
        });

        res.status(200).json({
            message: "Scraping successful",
            output: html,
        });
      } catch (error) {
        // Handle any errors that occurred during the request
        console.error('Error while scraping website:', error.message);
        res.status(500).json({
            message: "Error while scraping website. Contact support.",
            error: "Internal Server Error",
        });
      }
}

module.exports = {
    scrape,
}

这是我的后端函数,它不打印控制台日志(log).我不知道怎么才能做到这一点,我已经试了好几种方法了.

提供的代码使用了Cheerio库和axios.

推荐答案

这些 Select 器似乎与AXIOS中的HTML不匹配.try :

const axios = require("axios"); // 1.4.0
const cheerio = require("cheerio"); // 1.0.0-rc.12

const url = "<Your URL>";

axios
  .get(url)
  .then(({data: html}) => {
    const $ = cheerio.load(html);
    const data = [...$(".egMi0")]
      .map(e => ({
        title: $(e).find("h3").text().trim(),
        href: $(e).find("a").attr("href"),
      }));
    console.log(data);
  })
  .catch(err => console.error(err));

要查看AXIOS看到的内容,我建议将它返回的html字符串写入文件,然后在浏览器中打开该文件.在浏览器中查看站点来定位元素可能会产生误导,这是因为JS执行以及服务器块和更改后的HTML响应,这些在AXIOS中可能是不同的.

Node.js相关问答推荐

如何使用多个OR参数从多个集合聚合

findoneandupdate()方法更新数据库,但其响应在请求中返回为null

我的Node.js应用程序没有将Mongoose方法findByIdAndDelete作为函数进行检测

如何在Mongoose for MongoDB中编写此查询

Socket.io 未将用户加入给定房间

DynamoDB 分页数据检索

如何使用mongoose引用不在项目中的模型

Cypress.io - 如何等待返回调用属性的方法的结果?

eSignature API 的 NodeJS SDK 是否支持数据流?

错误:无法为 /blog 收集页面数据并且在 object.fetch 处获取失败

如何防止 Chrome 通过 Selenium 崩溃?

mongoose.model() 方法返回未定义

MERN 堆栈项目中的 React [create-react-app] 正在提供依赖项

Mongoose,如何一次更新多个?

aws cdk 2.0 init 应用程序无法构建更漂亮的问题,这来自 jest-snapshot

如何运行用 TypeScript 编写的 Mocha 测试?

使用 node 的内置调试器判断变量?

续集findbyid不是一个函数,但显然findAll是

Firestore:多个条件 where 子句

避免在弹性 beantalk 中重建 node_modules