Пятница, 29.03.2024, 16:03
Приветствую Вас Гость | RSS
Главная | Парсинг сайтов - Форум | Регистрация | Вход
Меню сайта
Наш опрос
Сколько будет 2+2 в троичной системе счисления?
Всего ответов: 468
Форма входа
Друзья сайта
Статистика
Viking_World
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Интернет » Разное » Парсинг сайтов
Парсинг сайтов
VikingДата: Среда, 29.04.2015, 05:47 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 1070
Репутация: 4
Статус: Offline
Простой парсинг сайтов с помощью SlimerJS
ИЗ ПЕСОЧНИЦЫ
Tur1st • 14 января в 11:57
В виду отсутствия хорошего материала по парсингу с помощью скриптового браузера SlimerJS и наличия свободного времени решил написать небольшую статью.

Начало работы

Для того, чтобы начать работать со SlimerJs, необходимо скачать последнюю версию скриптового браузера (я обычно качаю полную версию, в которую включен XulRunner, позволяющий запускать SlimerJS в отсутствие Firefox) для вашей ОС.

Не буду описывать инсталяцию SlimerJS, так как она довольно подробно описана здесь, поэтому сразу перейдем к разбору ситуаций, которые чаще всего могут встретиться при парсинге сайта с динамическм контентом.

Использование

Предположим, что контент сайта загружается аяксом после того, как уже загружена сама страница. Получить динамический контент можно несколькими способами, основной — это написать функцию, которая будет через интервал времени проверять наличие данных. Этот вариант я использовал повсеместно, но если на сайте требовалось совершить много последовательных действий, то кода становилось больше и тем сложнее было его поддерживать. В итоге я стал больше применять паузы во время выполнения, которые упростили задачу:

var webpage = require('webpage').create();
webpage
.open('http://example.com')
.then(function(){
slimer.wait(3000); // пауза, длительность в миллисекундах
var someContent = webpage.evaluate(function () { // после того как динамический контент подгружен, можно его спарсить
return document.querySelector("#aDiv").textContent;
});
});

Еще одна полезная возможность — это создание событий. Очень просто имитировать набор символов в тексовом поле, что часто требуется при авторизации или регистрации, например:

var webpage = require('webpage').create();
webpage
.open('http://example.com')
.then(function(){
webpage.evaluate(function () {
document.getElementById("input").focus();
});
webpage.sendEvent('keypress', "hello World");
});

Вообще функция senEvent() очень гибкая, подробнее о ней можно прочитать здесь.

Довольно часто возникает ситуация, когда при парсинге на сайте появляется каптча. В этом случаем потребуется сделать скриншот каптчи и отправить его в один из сервисов, которые предоставляют услуги по разгадке каптч.

var webpage = require('webpage').create();
webpage
.open('http://example.com')
.then(function(){
webpage.clipRect = { top: 14, left: 3, width: 400, height: 300 }; // для использования этой функции нам должны быть известно позиционирование каптчи
var screen = webpage.renderBase64('png'); // обычно я кодирую изображение в base64, так его проще передать сторонему сервису
var webpage2 = require('webpage').create(); // создаем второе соединени
webpage2
.open('http://example2.com')
.then(function(){ //...далее думаю уже должно быть понятно
});

SlimerJS очень похож на PhantomJS, но самое важное отличие, которое хотелось бы отметить — это окно бразуера во время выполнения SlimerJS. Другими словами, отладка и разработка ведутся проще, чем с фантомом.

Итог

SlimerJS позволяет быстро и просто парсить сложные динамические сайты, которые обычным cUrl спарсить не получается.
 
Форум » Интернет » Разное » Парсинг сайтов
  • Страница 1 из 1
  • 1
Поиск:
Бесплатный хостинг uCozCopyright MyCorp © 2024