我已经在node
中创建了一个脚本,使用request
和cheerio
从网页中获取title
的不同帖子及其相关的links
。我的脚本可以以正确的方式获取它们。
问题是我的脚本item
和item_link
中定义的变量可能并不总是具有所需的结果,在这种情况下,脚本将引发任何错误。
如何在脚本中实现
try/except
子句或类似内容,以便变量item
和item_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
答案 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 || ""
});
});