javascript - 使用 for 循环和 forEach 从网站中提取 html 以获取 JSON 对象数组

标签 javascript jquery node.js cheerio

我正在尝试从此网页的 html 生成一个 Javascript 对象数组(稍后保存为 JSON 文件):https://remoteok.io/remote-dev+javascript-jobs

我想提取第一部分的职位描述(在“今天”下列出) - 隐藏在下拉列表下方,直到您单击每个职位列表为止。看截图:

Job description / job listing explainer

布局是用表格构建的:职位列表和职位描述 html 容器都是同级表格行 <tr> .

在该网站上,第一个带有“远程初创公司的第一份健康保险”文字的“列表”是促销内容,因此当您点击下面的文字时,不会有隐藏的职位描述文字。

因此,在我的代码中,我从索引位置 2 开始,然后在 for 循环中按 2 的倍数进行迭代。这部分有效。但随后我需要将此职位描述添加到已从其他数据创建的数组(称为 scrapedArray )中的每个对象中:

const first_table_row = $(first_section).find('tr');
      for(var i = 2; i < first_table_row.length; i+= 2) {
        let job_description = $(first_table_row[i]).find('.markdown').html().trim();
        // console.log(job_description);

        scrapedArray.forEach((obj) => {
          obj["job_description"] = job_description;
        });
      }

控制台日志记录 job_description没有 forEach 会按预期获取每个不同的职位描述,但是当我包含 forEach 时,它只是为相同的可扩展路径职位列表重复相同的 html,请参见此处( job_description 的输出被 chop ,因为 html 很长):

(2) [{…}, {…}]
0:
company_logo: "https://remoteok.io/assets/jobs/07a835281c655f47e04cd5799f27d219.png?1584688805"
job_description: "\nScalable Path is looking for a Senior Full Stack.."
__proto__: Object
1:
company_logo: "https://remoteok.io/assets/jobs/9e96332ed226d8ffd20da84b6951b66e.png?1584649206"
job_description: "\nScalable Path is looking for a Senior Full Stack.."

我做错了什么?有更好的方法吗?

最佳答案

当您在 for 循环中循环 forEach 时,数组中的所有 job_description 将被分配给一个变量,因此它将具有相同的值(最后一个 for 循环)。我已经将 for 循环从 1 改为 2,因为您需要 company_logo,对吧? 检查下面的代码,我已经检查过并且它有效!

let scrapedArray = [];
// Get the first tbody
let first_section = $('#jobsboard tbody')[0];

const first_table_row = $(first_section).find('tr');
for (var i = 1; i < first_table_row.length; i += 2) {
  let company_logo = $(first_table_row[i]).find('.logo').attr('src');
  let job_description = $(first_table_row[i + 1]).find('.markdown').html().trim();
  scrapedArray.push({
    company_logo, job_description
  });
}
console.log(scrapedArray);

希望这有帮助!

关于javascript - 使用 for 循环和 forEach 从网站中提取 html 以获取 JSON 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60787985/

相关文章:

javascript - 仅 CSS 将鼠标悬停在缩略图上以显示 div

javascript - 通过vba点击Href链接

javascript - 事件处理程序在 jsfiddle 中无法正常工作

android - 如何动态更改jquery mobile中的固定 header

javascript - "This"正在返回 [object Window],而不是元素

javascript - React + Express + Nodemailer : Can't render components and Nodemailer together

javascript - 错误 : Connect ENETUNREACH

javascript - 如何使搜索结果根据搜索条件打开特定页面

javascript - 限制 <ol> 和 <ul> 中 <li> 元素的数量

node.js - Heroku登录系统找不到指定路径