2016-03-26 18 views
5

Cercando di ottenere i miei ultimi dati visualizzati da Netflix al livello di programmazione, ma avendo alcuni problemi solo con la fase di accesso. Il mio codice attuale fa sì che solo Netflix per sputare indietro di una pagina We were unable to process your request.: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); 
     }); 
    } 
}) 

Tutte le idee?

Sorprendentemente, non c'è quasi nulla su Google per Scraping Netflix.

+0

Usano i cookie di autenticazione? Ci sono librerie migliori per questo in Java e Python. Prova Ui4j o selenio. Per nodejs, prova https://www.npmjs.com/package/selenium-webdriver. Molti dei siti oggi faranno di più che fornire uno stato di visualizzazione di base. Potrebbe essere necessario elaborare javascript. Questo potrebbe essere evidente dal requisito authcode. –

+0

@Jazcash Inoltre, se non si dispone di firebug e firefox, li consiglierei. Quello, o wireshark. Usa firebug per cercare eventuali parametri post rimanenti o altre opzioni. Sto vedendo più parametri di quelli che hai fornito e il sito di cheerio struttura il tuo post in modo diverso. Da parte mia sembra che tu stia inviando parametri di query e non dati di modulo (es. Http://www.netflix.com/q?key=value v. Url: ...., forma: {chiave: valore}) https : //www.webniraj.com/2015/03/16/nodejs-scraping-websites-using-request-and-cheerio/ –

+0

quando ho cercato su Google 'raschiando netflix' ho ottenuto 400K elementi. Non è abbastanza? ;-) Roba buona sopra. In bocca al lupo! – shellter

risposta

9

capito, necessaria per:

  1. Invia qualsiasi tipo di stringa user-agent
  2. Invia i dati del modulo utilizzando form param della richiesta
  3. inviare il cookie manualmente

Ecco il mio codice finale che ottiene l'ultimo elemento guardato:

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()); 
      }); 
     }); 
    } 
})