Объект $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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
// кол-во 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>"); |
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.