Объект $harvestor. Безбраузерный сбор интернет страниц с обработкой JS.
В Human Emulator Studio 7.0.2 был добавлен новый объект harvestor, на который бы мы хотели обратить внимание наших клиентов. Этот объект создан для безбраузерного сбора html страниц с отработанным JS. ТО есть страницы обрабатываются без открытия в браузере и на выходе вы получаете их html код. Использование данного объекта упростит и существенно ускорит сбор интересующей вас информации из сети.
Как это работает?
C помощью функции $harvestor->init мы инициализируем сборщик. В функцию передаётся путь к файлу с путями к страницам, которые надо собрать.
После чего запускаем сбор с помощью $harvestor->start. Функция $harvestor->is_finished() возвращает состояние работы харвестера, а $harvestor->get_completed_count количество готовых страниц. Получить html страницы можно с помощью функции $harvestor->get_html($i).
Таким образом, простой скрипт сбора страниц с помощью объекта harvestor будет выглядеть следующим образом:
// 1
echo "1. Сфорируем файл с урлами : ";
$path="test\in_file.urls";
echo $file_os->delete("test\in_file.urls")." ";
echo $textfile->add_string_to_file("test\in_file.urls","ya.ru\n")." ";
echo $textfile->add_string_to_file("test\in_file.urls","google.com\n")." ";
echo $textfile->add_string_to_file("test\in_file.urls","yandex.ru\n")." ";
echo $textfile->add_string_to_file("test\in_file.urls","vk.com\n")." ";
echo $textfile->add_string_to_file("test\in_file.urls","ttttttt\n")." ";
// 2
echo "\n2. Инициализируем сборщик файлом с урлами: ";
echo $harvestor->init("test\in_file.urls",true)." ";
// 3
echo "\n3. Запуститм сбор и дождемся окончания : ";
echo $harvestor->start(false)."<br>";
while (!$harvestor->is_finished())
echo ".".$harvestor->get_completed_count().".";
// 4
echo "\n4. Выведем длину полученных урлов в файле : ";
$count = $textfile->get_lines_count($path);
for ($i=0;$i<$count;$i++)
echo strlen($harvestor->get_html($i))." ";
Ещё примеры.
Скрипт сбора email адаптированный под объект harvestor
// кол-во
for($ii=0;$ii<count($keys);$ii++)
{
// получить запрос
$key = trim($keys[$ii]);
// перейти на гугль
$browser->navigate("google.com");
// задаём слово в поиск
$input->set_value_by_name("q",$key);
$input->click_by_name("q");
// нажмём пробел для отключения всплывшей подсказки
$keyboard->send_key(32,false);
// нажать enter
$keyboard->send_key(13,false);
// ждём
sleep(3);
// обнулим перед следующим проходом
$crnt_page=1;
while(true)
{
// получим все ссылки на сайты заключённые в тэгах <cite>
$sites=$webpage->get_body_inter_prefix_all("<cite ","cite>");
$sites=explode("<br>",$sites);
$file_os->delete($path_urls);
// пройдёмся по всем полученным ссылкам
for($i=0;$i<count($sites);$i++)
{
// переходим на сайт
$site=str_replace("<b>","",trim($sites[$i]));
$site=str_replace("</b>","",$site);
$site=get_string($site, ">","</");
if($site=="")
continue;
// пишем ссылки файл для харвестера
$textfile->add_string_to_file($path_urls,trim($site)."\r\n",60) ;
}
// ////////////////////////////////////////////////////////////
// инициализация харвестера
$harvestor->init($path_urls);
$last_count =0;
debug_mess("Запустим сбор и дождемся окончания : ");
echo $harvestor->start(false)."<br>"; // запуск в работу
while (!$harvestor->is_finished())
{
// получаем количество завершённых
$count = $harvestor->get_completed_count();
// если закончили ещё один обработаем его
if ($count!=$last_count)
{
$html_source = $harvestor->get_html($count-1);
// ищем все email на странице
preg_match_all('/[-0-9a-z_]+@[-0-9a-z_]+\.[a-z]{2,6}/i', $html_source, $matches);
// пройдёмся по полученным результатам
foreach ($matches[0] as $key=>$value)
{
// уберём лишнее
$str_mail=str_replace(">","",$value);
$str_mail=str_replace("<","",$str_mail);
$str_mail=str_replace("mailto:","",$str_mail);
$str_mail=str_replace("/","",$str_mail);
$str_mail=str_replace("mail:","",$str_mail);
// запишем в файл
$textfile->add_string_to_file($file_res,trim($str_mail)."\r\n",60) ;
echo trim($str_mail).'<br>';
}
$last_count = $count;
// убрать дубликаты из файла
dedupe($file_res);
}
}
// не перешли на следующую страницу
if(!next_page($crnt_page))
break;
}
}
debug_mess(" скрипт закончил работу<br>");
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.