Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Node.js、request和cheerio从网站上抓取链接?_Javascript_Html_Node.js_Web Scraping_Cheerio - Fatal编程技术网

Javascript 使用Node.js、request和cheerio从网站上抓取链接?

Javascript 使用Node.js、request和cheerio从网站上抓取链接?,javascript,html,node.js,web-scraping,cheerio,Javascript,Html,Node.js,Web Scraping,Cheerio,我正在尝试使用Node.js、request和cheerio在学校的课程安排网站上获取链接。然而,我的代码并没有到达所有的主题链接 链接到课程表网站 下面是我的代码: var express = require('express'); var request = require('request'); var cheerio = require('cheerio'); var app = express(); app.get('/subjects', function(req, res) {

我正在尝试使用Node.js、request和cheerio在学校的课程安排网站上获取链接。然而,我的代码并没有到达所有的主题链接

链接到课程表网站

下面是我的代码:

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!');
可以找到我的输出

正如您可以从我的输出中看到的,缺少一些链接。更具体地说,来自“A”、“I(续)”和“R”(续)部分的链接。这些也是每列的第一部分

每个部分都包含在自己的div中,类名为“courseList_section”,所以我不明白为什么。courseList_section a“不会在所有链接中循环。我错过了什么明显的东西吗?非常感谢您的任何见解


提前谢谢你

问题不在于你的代码,而在于你试图解析的站点,这才是问题所在。HTML标记无效。您正试图解析
.courseList\u部分中的所有内容,但标记如下所示

<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 -->

下一次,试着直接查看HTML,看看它看起来是否正常。如果看起来像****,将其通过一个槽并再次检查。即使是美化者也无法处理此标记,这表明标记有问题。

我看不到任何缺失links@Oleander我的输出从BIO开始,我的代码不会循环通过“A”部分中的任何链接:ACC、ACCT、AD、ARCH和AS。与“I(续)”和“R(续)”节相同。
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);
    };
  });
});