麻烦我的脚本打印无如果没有结果显示

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

我使用noderequestcheerio创建了一个脚本来从网页上获取不同帖子的title及其关于links的内容。我的脚本可以正确的方式获取它们。

事情是在我的脚本item中定义的变量,item_link可能并不总是具有所需的结果,在这种情况下,脚本将抛出任何错误。

如何在我的脚本中实现try/except子句或类似的东西,以便变量itemitem_link将存储None""(对于某些帖子),以防没有结果显示?

到目前为止我已经尝试过(因为titleslinks总是存在而无法正常工作):

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

{ item: 'Trouble making my script print None in case there is no result to display',
  item_link: undefined }
node.js web-scraping request cheerio
2个回答
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'
  });
})

你想避免尝试/捕获这样的事情。


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 || ""
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.