我使用node
和request
在cheerio
创建了一个脚本来从网页上获取不同帖子的title
及其关于links
的内容。我的脚本可以正确的方式获取它们。
事情是在我的脚本item
中定义的变量,item_link
可能并不总是具有所需的结果,在这种情况下,脚本将抛出任何错误。
如何在我的脚本中实现
try/except
子句或类似的东西,以便变量item
和item_link
将存储None
或""
(对于某些帖子),以防没有结果显示?
到目前为止我已经尝试过(因为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
:
{ item: 'Trouble making my script print None in case there is no result to display',
item_link: undefined }
试试这样:
$('.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'
});
})
你想避免尝试/捕获这样的事情。
试试这个 :
$('.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 || ""
});
});