Zombie.js в node.js не может очистить определенные сайты - PullRequest
2 голосов
/ 05 января 2012

Простой скрипт ниже возвращает кучу мусора.Это работает для большинства веб-сайтов, но не для William Hill:

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

запуск с узлом

вывод:

S����J����ꪙRU�6���Efr2�Riz����� ^ ��0�X� �� {� ^ �a�yp��p�����Ή��`�� (���S] -«N8q / ݻ и;? ݇ ׯ Ei ٲ> -3 Gee, mFMIQ2 ڊ ZGOJ ^ SC ~ gJO 緹 O ݎ ТЭНа; v�v���D�tvJn��J�8'�� 햷 r�v: ��m��J��Z�nh�] �� ����Z����. {Z��ӲlB'.¶D ~ $ п / у "ZnI" nj \ 00_I \ 00 \ SOE8 { "м;ч, oQy, а [CQD 띊 / |:;?! Z} /w ے� h� <�������% ������A�K = -a�� ~ '</p>

(фактический выход намного дольше)

Кто-нибудь знаетпочему это случилосьручки, и, в частности, почему это происходит на единственном сайте, который я действительно хочу почистить ???

Спасибо

Ответы [ 2 ]

1 голос
/ 07 июня 2012

Я давно отказался от этого метода, но на случай, если кому-то будет интересно, я получил ответ от одного из разработчиков zombie.js.

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

Он говорит: «Зомбитеперь будет отправлять заголовок accept-encoding, чтобы указать, что он не поддерживает gzip. "

Спасибо всем, кто смотрел на это.

0 голосов
/ 05 января 2012

Тот же код работает для других сайтов (которые также используют gzip для ответа), поэтому это не проблема кода.

Я предполагаю, что сайт обнаруживает, что вы не используете браузер, и защищает от извлечения данных.

...