使用 Node.js、request 和 cheerio 从网站抓取链接?
Scraping links from website using Node.js, request, and cheerio?
我正在尝试使用 Node.js、request 和 cheerio 在我学校的课程表网站上抓取链接。但是,我的代码没有到达所有主题链接。
Link 到课程表网站 here。
下面是我的代码:
var express = require('express');
var request = require('request');
var cheerio = require('cheerio');
var app = express();
app.get('/subjects', function(req, res) {
var URL = 'http://courseschedules.njit.edu/index.aspx?semester=2016s';
request(URL, function(error, response, body) {
if(!error) {
var $ = cheerio.load(body);
$('.courseList_section a').each(function() {
var text = $(this).text();
var link = $(this).attr('href');
console.log(text + ' --> ' + link);
});
}
else {
console.log('There was an error!');
}
});
});
app.listen('8080');
console.log('Magic happens on port 8080!');
我的输出可以找到here。
正如您从我的输出中看到的那样,一些链接丢失了。更具体地说,来自 'A'、'I (Continued)' 和 R“(续)”部分的链接。这些也是每列的第一部分。
每个部分都包含在自己的 div 中,名称 class 'courseList_section' 所以我不明白为什么 '.courseList_section a' 不循环所有链接。我错过了一些明显的东西吗?非常感谢任何和所有见解。
提前致谢!
问题不在于您的代码,而在于您尝试解析的网站。 HTML 标签无效。您正在尝试解析 .courseList_section
中的所有内容,但标签看起来像这样。
<span> <!-- Opening tag -->
<div class='courseList_section'>
<a href='index.aspx?semester=2016s&ƒ=ACC '>ACC - Accounting/Essex CC</a>
</span> <!-- Invalid closing tag for the first span, menaing that .courseList_section will be closed instead
<!-- Suddenly this link is outside the .courseList_section tag, meaning that it will be ignored by cheerio -->
<a href='index.aspx?semester=2016s&subjectID=ACCT'>ACCT - Accounting</a>
<!-- and so on -->
解决办法。获取所有链接并忽略与任何课程无关的链接。
var request = require('request');
var cheerio = require('cheerio');
var URL = 'http://courseschedules.njit.edu/index.aspx?semester=2016s';
request(URL, function(error, response, body) {
if(error) { return console.error('There was an error!'); }
var $ = cheerio.load(body);
$('a').each(function() {
var text = $(this).text();
var link = $(this).attr('href');
if(link && link.match(/subjectID/)){
console.log(text + ' --> ' + link);
};
});
});
下次,请尝试直视 HTML,看看它看起来是否正常。如果它看起来像 ****,请将其传递给 HTML beautifier 并再次检查。甚至美化器都无法处理此标记,这表明标签有问题。
我正在尝试使用 Node.js、request 和 cheerio 在我学校的课程表网站上抓取链接。但是,我的代码没有到达所有主题链接。
Link 到课程表网站 here。
下面是我的代码:
var express = require('express');
var request = require('request');
var cheerio = require('cheerio');
var app = express();
app.get('/subjects', function(req, res) {
var URL = 'http://courseschedules.njit.edu/index.aspx?semester=2016s';
request(URL, function(error, response, body) {
if(!error) {
var $ = cheerio.load(body);
$('.courseList_section a').each(function() {
var text = $(this).text();
var link = $(this).attr('href');
console.log(text + ' --> ' + link);
});
}
else {
console.log('There was an error!');
}
});
});
app.listen('8080');
console.log('Magic happens on port 8080!');
我的输出可以找到here。
正如您从我的输出中看到的那样,一些链接丢失了。更具体地说,来自 'A'、'I (Continued)' 和 R“(续)”部分的链接。这些也是每列的第一部分。
每个部分都包含在自己的 div 中,名称 class 'courseList_section' 所以我不明白为什么 '.courseList_section a' 不循环所有链接。我错过了一些明显的东西吗?非常感谢任何和所有见解。
提前致谢!
问题不在于您的代码,而在于您尝试解析的网站。 HTML 标签无效。您正在尝试解析 .courseList_section
中的所有内容,但标签看起来像这样。
<span> <!-- Opening tag -->
<div class='courseList_section'>
<a href='index.aspx?semester=2016s&ƒ=ACC '>ACC - Accounting/Essex CC</a>
</span> <!-- Invalid closing tag for the first span, menaing that .courseList_section will be closed instead
<!-- Suddenly this link is outside the .courseList_section tag, meaning that it will be ignored by cheerio -->
<a href='index.aspx?semester=2016s&subjectID=ACCT'>ACCT - Accounting</a>
<!-- and so on -->
解决办法。获取所有链接并忽略与任何课程无关的链接。
var request = require('request');
var cheerio = require('cheerio');
var URL = 'http://courseschedules.njit.edu/index.aspx?semester=2016s';
request(URL, function(error, response, body) {
if(error) { return console.error('There was an error!'); }
var $ = cheerio.load(body);
$('a').each(function() {
var text = $(this).text();
var link = $(this).attr('href');
if(link && link.match(/subjectID/)){
console.log(text + ' --> ' + link);
};
});
});
下次,请尝试直视 HTML,看看它看起来是否正常。如果它看起来像 ****,请将其传递给 HTML beautifier 并再次检查。甚至美化器都无法处理此标记,这表明标签有问题。