node.js中的Zombie.js无法抓取某些网站

时间:2012-01-05 12:30:18

标签: javascript node.js screen-scraping zombie.js

下面的简单脚本会返回一堆垃圾。它适用于大多数网站,但不适用于威廉希尔:

var Browser = require("zombie");
var assert = require("assert");

// Load the page from localhost
browser = new Browser()
browser.visit("http://sports.williamhill.com/bet/en-gb/betting/y/5/et/Football.html", function () {
browser.wait(function(){
console.log(browser.html());
});
});

使用节点

运行

输出:

SJꪙRUݒkf6Efr2Riz ^ 0X {^ayppΉ`(S] - 'N8q /ݻ U;݇ׯ荣ٲ&GT -3 GEE,mFMIQ2ڊZGOJ ^ SC〜gJO缇öݎPETN; vvDtvJnJ8' 햷RV : m J Z nh ] Z 。{Z Ӳl B' .¶D ~$n / u“ z倪 “nj\ 00_I \ 00 \ SOE8 {” 米; H,oQy;一个[ ?CQD띊/ |:;?!Z} / WےH<% AK = -a〜'

(实际输出更长)

任何人都知道为什么会发生这种情况,特别是为什么它会发生在我真正想要刮掉的唯一网站上?

由于

2 个答案:

答案 0 :(得分:1)

我很久以前就放弃了这种方法,但如果有人有兴趣,我会收到一个zombie.js开发者的回复。

https://github.com/assaf/zombie/issues/251#issuecomment-5969175

他说:“Zombie现在会发送accept-encoding标头,表明它不支持gzip。”

感谢所有对此进行调查的人。

答案 1 :(得分:0)

相同的代码适用于其他网站(也使用gzip进行回复),因此这不是代码问题。

我的猜测是该网站检测到您没有运行浏览器并防范数据提取。