2014-12-23 3 views
3

Я пытаюсь очистить сайт с помощью nodejs, и он отлично работает на сайтах, которые не требуют никакой аутентификации. Но всякий раз, когда я пытаюсь очистить сайт с формой, требующей имени пользователя и пароля, я получаю только HTML с страницы аутентификации (то есть, если вы нажмете «просмотреть источник страницы» на странице аутентификации, это сам, то есть HTML I получить). Я могу получить желаемый HTML с помощью завивкиnodejs web scraper для защищенного паролем сайта

curl -d "username=myuser&password=mypw&submit=Login" URL 

Вот мой код ...

var express = require('express'); 
var fs = require('fs'); //access to file system 
var request = require('request'); 
var cheerio = require('cheerio'); 
var app  = express(); 

app.get('/scrape', function(req, res){ 
url = 'myURL' 

request(url, function(error, response, html){ 

    // check errors 
    if(!error){ 
     // Next, we'll utilize the cheerio library on the returned html which will essentially give us jQuery functionality 
     var $ = cheerio.load(html); 

     var title, release, rating; 
     var json = { title : "", release : "", rating : ""}; 

     $('.span8 b').filter(function(){ 
      // Let's store the data we filter into a variable so we can easily see what's going on. 
      var data = $(this); 
      title = data.first().text(); 
      release = data.text(); 

      json.title = title; 
      json.release = release; 
     }) 
    } 
    else{ 
     console.log("Error occurred: " + error); 
    } 

    fs.writeFile('output.json', JSON.stringify(json, null, 4), function(err){ 

     console.log('File successfully written! - Check your project directory for the output.json file'); 

    }) 

    res.send('Check your console!') 
}) 

}) 

app.listen('8081') 
console.log('Magic happens on port 8081'); 
exports = module.exports = app; 

Я попытался следующие ...

var request = require('request', 
    username:'myuser', 
    password:'mypw'); 

Это просто возвращает Страница аутентификации страницы

request({form: {username:myuser, password:mypw, submit:Login}, url: myURL}, function(error, response, html){ 
    ... 
    ... 
    ... 
} 

Это также просто возвращает страницу страницы аутентификации

Так что мой вопрос: как мне достичь этого с помощью nodejs?

ответ

2

вы не должны использовать .get но .post и поставить пост параметров (имя пользователя и пароль) в вызове

request.post({ 
    headers: {'content-type' : 'application/x-www-form-urlencoded'}, 
    url:  url, 
    body: "username=myuser&password=mypw&submit=Login" 
}, function(error, response, html){ 
    //do your parsing... 
    var $ = cheerio.load(html) 
}); 
+0

спасибо большое, это работает! – gthb7