2016-03-26 11 views
5

Der Versuch, meine zuletzt angezeigten Daten programmgesteuert aus Netflix zu bekommen, aber einige Probleme nur mit der Login-Phase. Meine aktuellen Code führt nur zu Netflix eine We were unable to process your request. Seite spucken zurück:Scraping Netflix

var request = require('request').defaults({jar: true}); 
var cheerio = require('cheerio'); 

var url = "https://www.netflix.com/Login?locale=en-GB&nextpage=https%3A%2F%2Fwww.netflix.com%2FWiViewingActivity"; 

request(url, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     var $ = cheerio.load(body); 
     var authCode = $("#login-form > input").attr("value"); 
     request.post(url+"?email=myemail%40gmail.com&password=mypassword&RememberMe=on&authURL="+authCode, { 
     }, function(err, response, body){ 
      console.log(body); 
     }); 
    } 
}) 

Irgendwelche Ideen?

Überraschenderweise gibt es bei Google so gut wie nichts für Scraping Netflix.

+0

Verwenden sie Authentifizierungscookies? Dafür gibt es bessere Bibliotheken in Java und Python. Probieren Sie Ui4j oder Selen. Für Nodejs, versuchen Sie https://www.npmjs.com/package/selenium-webdriver. Viele Websites werden heute mehr tun, als nur einen grundlegenden Ansichtszustand bereitzustellen. Möglicherweise müssen Sie Javascript verarbeiten. Dies könnte aus der Authcode-Anforderung ersichtlich sein. –

+0

@Jazcash Auch, wenn Sie nicht firebug und firefox haben, würde ich ihnen empfehlen. Das oder Drahtseil. Verwenden Sie den Firebug, um nach verbleibenden Post-Parametern oder anderen Optionen zu suchen. Ich sehe mehr Parameter als Sie bereitgestellt haben und die Cheerio-Site strukturiert Ihren Beitrag anders. Von meinem Ende aus sieht es so aus, als würden Sie Abfrageparameter und keine Formulardaten übermitteln (zB http://www.netflix.com/q?key=value v. Url: ...., form: {key: value}) https : //www.webniraj.com/2015/03/16/nodejs-scraping-websites-using-request-and-cheerio/ –

+0

als ich 'scraping Netflix' googelte habe ich 400K Artikel. Ist das nicht genug? ;-) Gute Sachen oben. Viel Glück! – shellter

Antwort

9

es herausgefunden, musste:

  1. senden jede Art von User-Agent-String
  2. die Formulardaten senden form param Wunsch
  3. die Cookies manuell

hier senden mit Mein endgültiger Code, der den zuletzt beobachteten Artikel enthält:

var request = require('request').defaults({jar: true}); 
var cheerio = require('cheerio'); 

var url = "https://www.netflix.com/Login"; 

request(url, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     var $ = cheerio.load(body); 
     var authCode = $("#login-form > input").attr("value"); 
     request.post({url: url, 
      form: { 
       "email": "[email protected]", 
       "password": "password", 
       "authURL": authCode, 
       "RememberMe": "on" 
      }, 
      headers:{ 
       'User-Agent': "NodeScrape" 
      } 
     }, function(err, response, body){ 
      var cookies = response.headers['set-cookie']; 
      request({url: "https://www.netflix.com/WiViewingActivity", headers: {'Cookie': cookies, 'User-Agent': "NodeScrape"}}, function(error, response, body){ 
       var $ = cheerio.load(body); 
       console.log($(".seriestitle").eq(0).text()); 
      }); 
     }); 
    } 
})