无法打印我的脚本时出现问题,请耐心等待

时间:2019-04-06 08:19:22

标签: node.js web-scraping request cheerio

我已经在node中创建了一个脚本,使用requestcheerio从网页中获取title的不同帖子及其相关的links。我的脚本可以以正确的方式获取它们。

问题是我的脚本itemitem_link中定义的变量可能并不总是具有所需的结果,在这种情况下,脚本将引发任何错误。

  

如何在脚本中实现try/except子句或类似内容,以便变量itemitem_link将存储None或{{ 1}}(对于某些帖子)是否没有结果显示?

到目前为止,我已经尝试过(由于""titles一直存在,所以工作无误):

links

如果我尝试执行以下操作(在var request = require('request'); var cheerio = require('cheerio'); const url = 'https://stackoverflow.com/questions/tagged/web-scraping'; request(url, function (error, response, html) { if (!error && response.statusCode == 200) { var $ = cheerio.load(html); $('.summary').each(function(){ var item = $(this).find('.question-hyperlink').text(); var item_link = $(this).find('.question-hyperlink').attr("href"); console.log({ item, item_link }); }); } }); 中使用了错误的选择器):

item_link

我期望request(url, function (error, response, html) { if (!error && response.statusCode == 200) { var $ = cheerio.load(html); $('.summary').each(function(){ try{var item = $(this).find('.question-hyperlink').text();}catch(err){item = "";} try{var item_link = $(this).find('.question-hyperlin').attr("href");}catch(err){item_link = "";} console.log({ item, item_link }); }); } }); 的输出,但是我在""中得到了undefined

item_link

2 个答案:

答案 0 :(得分:2)

像这样尝试:

$('.summary').each((i, summary) => {
  let el = $(summary).find('.question-hyperlink')[0]
  console.log({
    item: el ? $(el).text() : 'None',
    item_link: el ? $(el).attr('href') : 'None'
  });
})

您要避免尝试/抓住这种事情。

答案 1 :(得分:0)

尝试一下:

 $('.summary').each(function(){
    var item = ""; var item_link="";
    try{item = $(this).find('.question-hyperlink').text();}catch(err){item = "";}
    try{item_link = $(this).find('.question-hyperlin').attr("href");}catch(err){item_link = "";}
    console.log({
        item : item || "",
        item_link: item_link || ""
    });
});