由于skyscanner只向大型商业网站提供api,我想自己构建一个小应用程序,以便为我自己的目的检索多个目的地的结果(非商业用途)。
我发现获取航班搜索的结果似乎非常困难,因为页面需要几秒钟才能完成航班搜索并显示结果。
使用wget,lynx,links2或edbrowse对我来说不起作用,因为我得到的结果是我的浏览器中没有启用javascript,即使在使用javascript支持编译links2时也是如此。也许我做错了什么,我不知道。
然而,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]中描述的时间延迟,它也不起作用。 这些脚本(如果成功返回)仅导致skyscanner的错误页面,说他们遇到了问题。
我尝试的最后一次努力导致了所描述的错误页面:
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();
});
有人尝试过这样的事情并且成功吗?你是怎么做到的?我正在尝试在无Gui的Debian-Linux系统上构建基于php和/或shell脚本的解决方案。
答案 0 :(得分:1)
我在Skyscanner工作。这不是您问题的答案,但是,如果您最终在错误页面(或验证码页面)上,我们的僵尸程序拦截器很可能会抓住您。这是一种"设计" :)
我可以通过保守的速率限制为您提供API密钥。那会有兴趣吗?
干杯,
伊恩