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

问题描述 投票:0回答:1

我正在尝试从此网页的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;
        });
      }

没有forEach的控制台日志记录job_description会按预期获得每个不同的作业描述,但是当我包含forEach时,它只是为同一可伸缩路径作业列表重复相同的html,请参见此处(job_description的输出被截断为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.."

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

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

javascript jquery node.js cheerio
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.