Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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动态路由从IMDB中抓取电影内容。但是在我的output.json文件中没有定义吗?_Javascript_Json_Node.js_Cheerio_Node.js Connect - Fatal编程技术网

Javascript 尝试使用Node.js动态路由从IMDB中抓取电影内容。但是在我的output.json文件中没有定义吗?

Javascript 尝试使用Node.js动态路由从IMDB中抓取电影内容。但是在我的output.json文件中没有定义吗?,javascript,json,node.js,cheerio,node.js-connect,Javascript,Json,Node.js,Cheerio,Node.js Connect,实际上,我正试图使用node从ImDb中抓取任何电影,但是在我发出请求但在output.JSON文件中得到未定义的内容(电影评级和评论应该在这里出现)之后 首先,我请求“电影” 这部电影应该是动态的,这样我自己就可以质疑了。 然后拿着电影的序列号,我向它的URL发出请求,以获得评级和评论 但是没有定义…请检查代码并更正它 var express=需要(“express”) var cheerio=要求(“cheerio”) var请求=要求(“请求”) var fs=需要('fs') var-a

实际上,我正试图使用node从ImDb中抓取任何电影,但是在我发出请求但在output.JSON文件中得到未定义的内容(电影评级和评论应该在这里出现)之后

首先,我请求“电影” 这部电影应该是动态的,这样我自己就可以质疑了。 然后拿着电影的序列号,我向它的URL发出请求,以获得评级和评论

但是没有定义…请检查代码并更正它

var express=需要(“express”)

var cheerio=要求(“cheerio”)

var请求=要求(“请求”)

var fs=需要('fs')

var-app=express()

app.get('/scrap/:movie',函数(req,res){

//在这里,我请求“电影”

//这里我从imdb搜索中提取第一个找到的电影的序列号

urls = "http://www.imdb.com/ + 'select' ";

request(urls, function(error,response,body) {
    
    if(!error && response.statusCode == 200) {
        var $ =cheerio.load(body);
        var title, release, rating, review;
        var json = { title : "",review : ""};

        json.title =$(".title").text(); 
        json.review= $(".reviewSection").text();
    }

    fs.writeFile('output.json', JSON.stringify(json, null, 7), function(error) {
        if(!error)
            console.log('File successfully written! - Check your project directory for the output.json file');

    });
    
    res.send('Check your console!');
});
}));
app.listen(3000)

我对代码进行了如下编辑。有几个问题妨碍了你。如果您不知道它们是什么,请务必记录控制台日志

var express = require('express');
var cheerio = require("cheerio");
var request = require("request");
var fs = require('fs');
var app = express();

app.get('/scrape/:movie' , function(req, res) {

var movie = req.params.movie;
var url = "http://www.imdb.com/find?q=" + movie;
这里只需将url设置为您想要的url,并在请求函数中调用它

 request(url, function(error, response, body) {
确保考虑每个变量的名称。如果上面的设置为“请求”,您将无法进行下面的请求调用,因为它已重置为响应

if(!error && response.statusCode == 200) {
     var $ = cheerio.load(body);
     var select = $('.result_text').first().children()[0].attribs['href']
 }
 var url = 'http://www.imdb.com' + select;
在这里,您需要转到实际的网站,打开开发人员控制台,找出您想要使用的确切查询选择器

    fs.writeFile('output.json', JSON.stringify(json, null, 7), function(error) {
         if(!error)
         console.log('File successfully written! - Check your project directory for the output.json file');
       });

       res.send('Check your console!');
    });
  });
}); app.listen(3000);
同样,只需将url设置为您想要的内容。在本例中,select显示为“/title/tt0357413”(对于主持人),因此相应地调整您的url


您需要将下一个请求放在上面的请求函数的内部,因为当在其外部调用此函数时,上面的函数仍在工作。在进行第二次请求调用之前,需要确保设置了新的url变量

request(url, function(error, response, body) {
   if(!error && response.statusCode == 200) {
     var $ =cheerio.load(body);
     var title, review;
     var json = { title : "",review : ""};

     json.title = $("h1").text();
     json.review = $('.imdbRating').text()
   }
同样,对于这两个变量,请确保打开开发人员控制台并确定要使用的确切选择器

    fs.writeFile('output.json', JSON.stringify(json, null, 7), function(error) {
         if(!error)
         console.log('File successfully written! - Check your project directory for the output.json file');
       });

       res.send('Check your console!');
    });
  });
}); app.listen(3000);
我写这个剧本用的是,它取了电影《巴西》的标题和元批评分数:

const cleaver=require('cleaver');
常量baseUrl=”http://www.imdb.com";
const searchMovieUrl=`${baseUrl}/find?q=cell`;
const extractMovieUrl=清道夫.createExtractor({
范围:“tr.findResult”,
字段:{
网址:{
选择器:“td.result_text a”,
属性:“href”
}
}
});
const extractInfo=清道夫.createExtractor({
字段:{
标题:“div.title_包装h1”,
分数:“div.metacriticScore”
}
});
清道夫.刮(searchMovieUrl,extractMovieUrl)
.然后((电影)=>{
返回清道夫.scrape(`${baseUrl}/${movies[0].url}`,extractInfo);
})
。然后((电影信息)=>{
控制台日志(movieInfo);
//[{标题:“巴西(1985)”,分数:“88”}]

});第一件跳入眼帘的事情:应该是
“q=“+movie
,而不是
“q=movie”
^^^请让它工作:)
    fs.writeFile('output.json', JSON.stringify(json, null, 7), function(error) {
         if(!error)
         console.log('File successfully written! - Check your project directory for the output.json file');
       });

       res.send('Check your console!');
    });
  });
}); app.listen(3000);