Получить html-код результата Skyscanner с помощью phantomjs

Так как Skyscanner предоставляет свои API только крупным коммерческим веб-сайтам, я хотел создать небольшое приложение самостоятельно, чтобы получать результаты для нескольких направлений для моих собственных целей (не коммерческих).

Я обнаружил, что получить результат поиска рейса довольно сложно, поскольку странице требуется несколько секунд, чтобы завершить поиск рейса и отобразить результаты.

Использование wget, lynx, links2 или edbrowse у меня не сработало, так как я получил результат, что javascript не включен в моем браузере, даже когда links2 был скомпилирован с поддержкой javascript. Может я что-то не так сделал, не знаю.

Однако до сих пор phantomjs обеспечивал наилучшие усилия, и я попробовал несколько фрагментов кода, чтобы получить результаты поиска рейсов.

Источники из:

[Stackoverflow#1][1]
[Stackoverflow#2][2]
[Techslides][3]
[Stackoverflow#3][4]
[Stackoverflow#4][5]

  [1]: http://stackoverflow.com/questions/18526140/how-to-get-html-generated-from-javascript-using-phantomjs
  [2]: http://stackoverflow.com/questions/28209509/get-javascript-rendered-html-source-using-phantomjs
  [3]: http://techslides.com/grabbing-html-source-code-with-phantomjs-or-casperjs
  [4]: http://stackoverflow.com/questions/12450868/how-to-print-html-source-to-console-with-phantomjs
  [5]: http://stackoverflow.com/questions/8692038/phantomjs-page-dump-script-issue

Даже с задержкой, описанной в [Stackoverflow#4][5], это не сработало. Скрипты выдавали (в случае успешного возврата) только страницу с ошибкой скайсканера, говорящую о том, что у них возникла проблема.

Последняя попытка, которую я попробовал, привела к описанной странице с ошибкой:

var page = new WebPage(),t, address;
var fs = require('fs');

var url = 'http://www.skyscanner.at/transport/fluge/nyca/lax/150626/150627/flugpreise-von-new-york-nach-los-angeles-international-im-juni-2015.html?adults=1&children=0&infants=0&cabinclass=economy&rtn=1&preferdirects=false&outboundaltsenabled=false&inboundaltsenabled=false';

address = encodeURI(url);
page.open(address, function (status) {
    if (status !== 'success') {
        console.log('FAIL to load the address');
    } else {
        f = null;
        var markup = page.content;
        console.log(markup);
        try {
        f = fs.open('htmlcode.txt', "w");
        f.write(markup);
        f.close();          
        } catch (e) {
            console.log(e);
        }
    }   
    phantom.exit();

});

Кто-то пробовал что-то подобное раньше и был успешен? Как вы заставили это работать? Я пытаюсь создать решение на основе php и/или сценария оболочки в системе Debian-Linux без графического интерфейса.


person Kevin    schedule 12.06.2015    source источник


Ответы (1)


Я работаю инженером в Skyscanner. Это не ответ на ваш вопрос, но если вы окажетесь на этой странице с ошибкой (или странице с капчей), вполне вероятно, что наш блокировщик ботов вас поймал. Что-то вроде "по замыслу" :)

Я могу дать вам ключ API с консервативным ограничением скорости. Будет ли это интересно?

Ваше здоровье,

Иэн

person iain    schedule 02.07.2015
comment
Здравствуйте, lain, ключ API, конечно, будет интересен. Я также отправил письмо на skyscanner, где описал свой проект и то, что я хотел сделать с ключом API. Как описано, это только для частного использования. Если бы вы могли дать мне ключ API, это было бы самым лучшим решением. Заранее спасибо. Привет Кевин - person Kevin; 03.07.2015
comment
Круто, можешь написать мне по электронной почте iain.wilson[at]skyscanner.net, и я вышлю тебе ключ. - person iain; 08.07.2015