JavaScript基于cheerio爬取职位信息时如何仅提取薪资字段
问题根源
你当前的选择器ul.job-metadata > li会匹配职位信息栏下的所有列表项,而这个列表本身同时包含工作地点、薪资、雇佣类型等多类职位元数据,直接提取所有匹配项的文本自然会把非薪资的内容一起抓下来。
另外原代码里的链接提取逻辑本身无效:薪资项是纯文本节点,不存在href属性,原逻辑只会拿到列表第一个li(通常是工作地点项)的属性值,和薪资无关。
修正方法
reed的职位列表中,薪资对应的<li>节点带有专属的.salary类名,你只需要把选择器限定到这个类的节点,就能过滤掉地点等其他无关内容。
修正后的可运行代码如下:
var request = require('request'); var cheerio = require('cheerio'); var fs = require('fs'); request("https://www.reed.co.uk/jobs/manager-jobs", function(error, response, body) { if(error) { console.log("Error: " + error); return; } console.log("Status code: " + response.statusCode); var $ = cheerio.load(body); // 先清空历史写入的文件,避免多次运行内容重复 fs.writeFileSync('salaries.txt', ''); $('div.row:has(ul.job-metadata)').each(function() { // 仅匹配薪资类的列表项,过滤其他无关信息 const salaryContent = $(this).find('ul.job-metadata > li.salary').text().trim(); // 跳过未标注薪资的职位,避免写入空行 if (salaryContent) { fs.appendFileSync('salaries.txt', salaryContent + '\n'); } }); });
额外说明
你提到的「提取薪资计算后直接修改网页展示、模拟检查元素改页面」的需求,不需要用Node.js爬取写文件的方案:直接在浏览器控制台写DOM操作脚本,或者用油猴脚本注入页面,直接选中对应薪资节点修改文本内容即可,和手动在DevTools里改元素的效果完全一致。
内容的提问来源于stack exchange,提问作者Wozz
相关产品推荐
相关产品推荐

