使用库Cheerio.js I';I’我想用字符串替换内容,而不是留下它

使用库Cheerio.js I';I’我想用字符串替换内容,而不是留下它,cheerio,Cheerio,我已经用library Cheerio.js编写了一个内容刮刀代码,它读取网页内容并获取一些值,如位置名称、街道地址和电话号码 在一些地方,没有提供街道地址,因此它跳过了不酷的地方 下面是我从中获取数据的网页示例 如何检测街道地址是否不在此处&我的代码应该用其他内容替换空内容 完整代码位于此处。 目前,在输出中,它只是跳过空的街道名称 const getStreetAddress = async () => { console.log(' calling getStreetAddr

我已经用library Cheerio.js编写了一个内容刮刀代码,它读取网页内容并获取一些值,如位置名称、街道地址和电话号码

在一些地方,没有提供街道地址,因此它跳过了不酷的地方

下面是我从中获取数据的网页示例

如何检测街道地址是否不在此处&我的代码应该用其他内容替换空内容

完整代码位于此处。

目前,在输出中,它只是跳过空的街道名称

const getStreetAddress = async () => {
  console.log(' calling getStreetAddress'); 
  const html = await rp(baseURL + searchURL);
  const businessMap = cheerio('div.street-address', html).map(async (i, e) => {

    
    const streetAddress = e.children[0].parent.children[0].data;
 console.log('Here it shold detect if the variable "streetAddress"  has some value then leave it or else replace the value with something' );
 
    return {
      streetAddress,
    }

  })
  .get();
  return Promise.all(businessMap);
};
这是输出


如果这是我的,不幸的是,我无法用您的整个代码库来测试这一点,我只需对照默认值检查该值。我在JavaScript中使用的基本范式是

const actualValue = possibleValue || defaultValue;
所以在你的情况下可能是这样

const streetAddress = e.children[0].parent.children[0].data || 'No Street Address Provided';
这是因为null、undefined和空字符串都是假值,这将导致分配默认值

例如,您可以在返回对象后执行相同的操作

const businessMap = ... blah ... .get();
businessMap.streetAddress = businessMap.streetAddress || 'No Street Address Provided';
return Promise.all(businessMap);

我没有加载该页面,但它应该看起来像(假设streetAddress的css是
.foo

还要注意,cheerio不使用承诺,因为没有承诺


还要注意的是,JS中的空字符串“”是错误的,这就是为什么这样做的原因。

我现在可以告诉您,如果您将相关代码放到问题中,而不是链接到GitHub,您会得到更好的结果。@corsiKa在上面添加了代码。不起作用,它保持不变。在完成npm安装后,您可以尝试运行该文件。它不需要太多的设置。完全有可能您提供的HTML没有那个div,所以它永远不会启动。我将添加另一个你可以尝试的东西,但我不能承诺实际安装任何东西。我甚至没有在这台计算机上设置节点环境lol@JP. 添加了一个使用默认值的替代示例,这次是在异步之外。我不认为那些按位的OR(
|
)是您所认为的。@pguardiario Lol我知道出了什么问题-尽管我可以说我放在那里的代码起了作用,因为JS的解释很奇怪。。。。但你是对的,逻辑更好。它不起作用承诺可以工作,因为我的代码可以工作,除了这个小问题。它不能正常工作,你需要调整该元素的css。我无法加载页面,所以除非你发布一些HTML,否则你只能靠自己。也请相信我的话,你不需要承诺。我不能调整其他页面的css,这是我无法控制的。下面是代码&它从yellowpages.com上的页面获取HTML。唉,我正在发布一个示例,说明如果streetAddress元素是
.foo
,它会是什么样子。我看不到html,所以我不能建议它的css可能是什么。
const $ = cheerio.load(html)
const businessMap = $('div.street-address').get().map(div => {
  return {
    streetAddress: $(div).find('.foo').first().text() || "???"
  }
})