2

実際、ノードを使用して ImDb から映画をスクレイピングしようとしていますが、リクエストを行った後、output.JSON ファイル (映画の評価とレビューが来る場所) で undefined を取得しています。

まず、http://www.imdb.com/find?q= 'movie' にリクエストを送信します。ここで、自分でクエリを実行できるように、映画を動的にする必要があります。そしてシリアルNo. 映画の URL にリクエストを送信して、評価とレビューをスクレイピングします

しかし、未定義になっています...コードを確認して修正してください

var express = require('express');

var Cheerio = require("cheerio");

var request = require("リクエスト");

var fs = require('fs');

var app = Express();

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

var movie = req.params.movie;  
option = {
    protocol : "http:",
    host: "www.imdb.com",
    pathname : "/find " ,
    query: "q=movie"
}

// ここでhttp://www.imdb.com/find?q= 'movie'をリクエストしています

 request(option,function(error,request,body) {
     if(!error && response.statusCode == 200) {
         var $ =cheerio.load(body);
         var select=$(".result_text").attr("href");
     }
 });

// ここでは、最初に見つかった映画のシリアル番号を 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);

4

2 に答える 2

0

scavengerを使用してこのスクリプトを作成しました。映画brazilのタイトルとメタクリティック スコアが必要です。

const scavenger = require('scavenger');

const baseUrl = "http://www.imdb.com";
const searchMovieUrl = `${baseUrl}/find?q=cell`;

const extractMovieUrl = scavenger.createExtractor({
    scope: 'tr.findResult',
    fields: {
        url: {
            selector: 'td.result_text a',
            attribute: 'href'
        }
    }
});

const extractInfo = scavenger.createExtractor({
    fields: {
        title: 'div.title_wrapper h1',
        score: 'div.metacriticScore'
    }
});

scavenger.scrape(searchMovieUrl, extractMovieUrl)
.then((movies) => {
    return scavenger.scrape(`${baseUrl}/${movies[0].url}`, extractInfo);
})
.then((movieInfo) => {
    console.log(movieInfo);
    // [ { title: 'Brazil (1985)', score: '88' } ]
});

サーバーコードに簡単に適応させることができます。

于 2017-01-19T21:47:33.737 に答える