Гайд для новичков по работе с Zennoposter — создаем шаблон для парсинга комментов из Youtube за 50 шагов

Asocks

Seller
Регистрация
21.09.2022
Сообщения
466
Реакции
37
Баллы
28
Zennoposter — это мощный инструмент для автоматизации веб-процессов. Сервис позволяет создавать ботов, которые выполняют задачи юзера на сайтах и в файлах: заполняют формы, подтверждают данные, парсят контент или накручивают просмотры.

Для работы в Zennoposter не требуются навыки в разработке, достаточно составить скрипт в интерфейсе — все действия выполнят программируемые боты. Номинально сервис доступен для понимания рядового пользователя, однако при умении программировать на C# или JavaScript возможности автоматизации становятся безграничными.

Давайте попробуем реализовать проект в Zennoposter, например, автоматически спарсить комментарии на Youtube. Это подробная инструкция из 50 шагов по созданию такого шаблона — пройдя их один раз, можно будет постоянно применять Zennoposter для решения своих задач. Итак, поехали!

1. Сперва заходим в ProjectMaker, создаем новый проект, выбираем на закрепленной внизу панели статических блоков «Интерфейс бота».

118684

NwXQCr0kB-2oFo00bS9CedxiLYlMeaT7yClKJ4pOLOeimxMijmJONmAAtgJrXjSS4ymfanh0XnpUj3r-ZZEdUEmFiA-qiJG5VAsihC6sfdX-ibQl-LXyKbxd36htmX-2eUWzHmy25pwYNOKdFGojVnI


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

BHBYgVFTXeKvrtm0lGJT3Nlmkq80jDB_hoZBBU6LVkjU8CvShY6hngegReNTH3-vQzEcTnajdVwflZ7ce0FG-Jbk6xVN7NHljV14LEQxVc_hsvihW7Bahxg0UzwzGGbjbdui5BWRo37EoNrWtr4qJgQ


3. Теперь создадим вкладку в интерфейсе, чтобы указать
прокси. Для работы с одним видео их подключать не обязательно. В принципе комментарии из одного видео проще посмотреть вручную. Прокси нужны, чтобы применять шаблон для парсинга данных из массива роликов, собственно, ради таких задач и используют Zennoposter.

7q2n0V1Pqk2Xf_RkPc10GyXlPS8Y_AfQbQSnrHufNGhu0uYk0qlHYwDOYgauXSJ774dfnVw98z0X4gRDUhZyh5M6G_2R7ydfXAznWMs-Z9l2n_eE1NRfPUu_tybmlQcURKcWVmgWVA3ng0Peiyfm61k


4. Все данные, вводимые в поля интерфейса бота, сохраняются в соответствующие переменные. Так, прокси отправятся в переменную Variable.proxy.

IXfFKWiohEhnAFfrpp16gTmy0SdSdR3zb681YODTLiTo5sysd7ywz7VQQU4jHaNKZDRMt9dsU40OW3xWfz7pNp4RJP8gSP5EoQ9XBJqTk18gXirPaZGnnup2RfXsKCoqIJACRAV0BZKsdaP1Wc9KQ6A


А количество видео для парсинга — мы тестируем работу шаблона только на одном — запишем в переменную menu.

7RRNBoxeREA-44C6_3rF7n3jAO-JxR5BiIyGbNJTGtSsyuJ6sLxHqPGu3Y_ICKphtGTeX0kufE4IE4P-z_9swh-bZQbBsJPzNZz_EPFW2wZVVqL2HAfPEgQyoKswJ33NN0hsbgnbqpv0aXDJK-wq9bY


5. Если данные не будут сохранены в переменные, сервис выдаст соответствующую ошибку.

5vEisujcrt9R_pG2zxjMdDdp5s3pHD8FYzvz-VX4DvPs47J0-LjXbEHrCgjGMOiH6O7KrleY9dPI_WazRyD9iQdn29buVD6jCmyyX7rjOzWn3n9eJ2kwsgy1jqBxTvZRUCdDDXAsqyTMws7HWGQ3IHg


Пример текста ошибки, если не указана ссылка на видео для парсинга.

2KItT0_awAtrYJnaIaHp_HDAzGYDCNe7LSaHPr6WOKwuAdA4XPbpE6eAveZm_Mf97BJvp75zpFGfYOiq3RENrLfWSXo_HyzZSmU7qsYISHhoIr-Hp-Qur_82SjUt11aueSAIjz-zDJM2XXA56l3XBgE


6. Добавим первое действие для созданного бота. В ProjectMaker кликаем на свободное место в рабочей области и выбираем настройки браузера.

UF_NzdgpYl325whE5rqwmE40tq2wz_Oagos0x3ajZbJ5zsvpwFO8JXJst8FgEF03q9STiQTdo66p6N0Of_L27GGAdclvCx0NcV3sllw1NUelsbB-RKSTHSreTHeK__SNhnYMMJTsYi8p3Mx0jtNYIg8


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

_5IO6CI2GiIjb3c_Wf5DYNFcIbZE6eZHsRj-Mer2PsKP368WmXy6gIS9iiCmh25EQY8YiQVpuqdtEgTUTu3pL-VlzVE4u54bDgxtjKG-d393AeugK541-flUDP2tXbRy4Pabxzh3ZAit18BN4Dlk9Q0


8. Давайте проверим подключение прокси перед использованием шаблона, чтобы точно не попасть в возможные баны площадок. Для этого добавим действие по отправке GET-запроса.

6UE4WV7I53hSXpnoapD1Y9YtyvkF-xO9wZHYr9jGW6EQ2wlAv8Ndwh1IG5vHwF5cVkqZUrn_yigWdL4yYDFwFOKMVUkFHIt6VqV6RUVwMx87ciUWnxjXqTlxMF1mnHHg_ojNKvsCcQgOIx94WnvWxg8


9. Адрес, по которому нужно отправить GET-запрос, возьмем из встроенного в Zennoposter прокси-чекера.


check2.zennolab.com/proxy.php

Полученное значение положим в переменную ip_check, как показано на скрине.

BvrJqv1TPN2u1roz2DbVx1NEg9B-2NgTeWxP_dsYGfeZcaYNoyvsihM7M282-SJjXb9ve7hn6DACIMYT_324eDDOmtmsM2DI4lqhKrElTJDrw23GQc5feyWrdeAMMqGLvG-ttp4h6a_R9wg3VEMpNYk


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

ZZlFNOpocEORx4qxldMGnQLRl6AJr0hKAYbS0LBFrvG0aAfPw2Sq7LRhRK91BnhPd8o8EW_TcL4ZHMCr_OIzVaxWGyetMJTG1KttzYjOHPIbwyrK7-liiCTGnD4S8ltGWsOWgQ-S8Tc4nRNyWkiaesE


11. Применим регулярное выражение, дабы убедиться, что в ответ мы получили IP-адрес без ошибки.


(\d{1,3}\.){3}\d{1,3}

J8ib6bFtY6MNRm4QWJdr9Aa7kNZvFHJfisBK2TUtNwtYkHpfIUUNNR1Ds48LMMi9aBKs-HLtB5xiEQdgFY64T36PZdNmVMfrb3IT_t582Ay48h8Q4GtL_I--t6Wxl5-ZbZig4yLbVltWxIGlmxKyvIc


Кстати, формировать или проверять существующие регулярные выражения удобно на сайте regex101.com/

sEZa_Xcfoj5WhL8fZz6ph27SlT3qHwLMFtmJnhedkL-_dcC_XqRh5vV189mWamT5gcgdenS7cMajBfCHMakLZPRSKLAOW89KXrxcBWLD5PxYzgjP71dnHxIlGkPYSlKVQZVKYEiYIjafZ9W3WbhVMLk


12. Мы убедились, что прокси подключены и шаблон сможет с ними работать, поэтому теперь можем установить прокси. Так же добавляем действие с этой командой. Прокси берем из переменной Variable.proxy.

zqKgiu4CxLS_EPm9zkbB2kdAgTJIol5hyTPtSb4wVtVy8KopRHJ7WbwJXQUq49HG9bqPFVFceHQZb2mvpAATOsTWeX9ct1mMdcj4NVw6DgXZ7vFPM8pf_5DCkzjraUB3aWlu1bRW0Uk1WVF83bNPpmQ


13. Добавим оповещение, если действия отправки GET-запроса и проверки покажут ошибку.

5BrQbvrw4-7pPjuRuOW0_qvvYFb2s6WMLRuMHZDGB1uzZLvQHz1Lve6N1bZYzd3pqrpOBdw578j4RJKqu-W_zMhdbWHvQrdIbsKryxYjCA-RzUhCsUoLxEf8t_-MtfSBvHGexFoix_0bTKNGsdTgEEQ


14. В свойствах действия настроим уведомление об ошибке — содержание и цвет сообщения, а также период его появления.

xi5O37nPqV6dop703z9WS5cm0C4R0L6NAEtWLVI1EGNt7R3icvFLg7C7K0nd3sMgZBe17GwbjY4DbxawaxvAL84r2WEJ07KPxWpTvNFIU2lEMgmWrDMBVCXKDMWAzux5pMIXuWgb-ad328Xgsm3QscY


15. Добавим еще три действия для настройки браузера.

Первое — состояние занятости. Выставим настройки так, чтобы браузер игнорировал запросы AJAX, FLASH-анимацию, GET/POST-запросы и функционал FRAME.

vjA80RmbhW4-WRlZgVIxA3W8iD3XQGT_olRUMlpGsxeYiZ6Q5a3O4bBi4ur1KmLUs2M41oGTe_4tieUwTkAcI7zAhmbh9aYeUx8Avd1RoYr5Aqpniq2yrtzFR9xYqFPGCAfyAX3jNu-EhqxGOzlE2ro


Те же действия для настроек браузера: выключаем рекламу и все медиа-материалы, чтобы не тратить трафик на лишний контент.

6sgOKxxYfmt3jgYw1cn_0IuQsAsXxm9UhU-q6Hd0AbckxDmW11G9hq00q8qoMZBmggubi3Md7rD41hQsVIiFGl_HJCZhmBSUyvMEfbFwOQZ6CEhoKrzmTs0cbyiEbJyaNZMwToGhGuyUKDWxJ801lf0

dY1qwZoPeyXCps1a0Nu09W0EJLIgDoEq7ESuZHQ43YYnc4Na9GL_sXtb_PWYPqYw3L1xRHO7I7dglB2wv1JGE8VIjQR22v7sOXb1oCxKSc0NcXIrfoUITNYSyUTJwcPkhTTBNoWP-VRwGvDJC_KhHJk


16. Итак, мы собрали необходимую основу для нашего шаблона. Дальше — больше.

a6CfmhwEQilTed77vf2IuAheKsl2b8HmOqszMvJFJ2RoH2frBiEVwSOAWRdEkvX_TIND0KfmWqv7wV2D2a89uu9yRJBzzKWSInaKFsN-qQe9hPRfPW7YjqOll7jVo3BAjfYORdYncvIv7ikER2U3UDU


17. Гораздо удобнее парсить мобильную версию Youtube, поэтому добавим действие для изменения ссылки: www.youtube заменяем на m.youtube.

skM1Eq4DD1Cyg3as2pIOuxwInQmOfxBTqNy6VycZ5E2CQs9FLRmWAvFcLNJFVg4uuHqGCTvzF-Rh2bsw1SmVlIUu3O-7XkO48QYjbMIOBQMTVvDl_SWhxNthQYAgfON9jNoI-iOC7cEJqUNayWGViw0

0n2aeuboN6bb4V1SP2yGBS-Ulw-wG8uneV00MQmMDlZgmdyfXoRa5wbyZFeTswsuruzYtcg2Ba3kZFb7Owij8KH1TxezaHZHcRgQHrOiR-LfgBBZwl71LPGVrjCjJYYf-b6AlIIy7Y7_LBziTFN0688


А также в ссылке app=desktop& заменяем на пустую строку.

Все результаты записываем в переменную url.

F-EFGj2q2Eby-EjjMn1BBlrF1i3dKb6j5rnb0eSlzs_3aUuKSdqpj2tw7cp6-9v4qRov7FARt-ikwwePMhjauS3AA8dh-7JyAsjgjURnvYN-UjeP4Rk257z4dUf1_-hd1mY95yCOyaSvgutosIjRVYc


18. Теперь добавим вспомогательную переменную для подсчета обработанных видео.

pDqCmDVMl1GnQqFzznIJzJPHhRwBZtnLZJT1bKfnnsaz_kdamdgYBlWPpQsdh4HpIOMsqjwkFuMML7qWWEu-BSUsZTZRWkttPL9jmap0Ef_lsgBERSGJzt9Eqeq9-DZXGI5xBG9vfYgsbfk7PpkMAqI


Назовем переменную temp_count, она нам еще пригодится.

uL3PZqXjlMApl4Az0613XxwDXZNRfMqXehdtLPcrYcNK_eYk2I-Q0i8XAZ_-57aWODWZdfbg0qIqMHVcSp7llOfb61yWS-XivoCl7uJW7mwl2kwAsNDet0glfD1_M_-4nOUGW1xce92e8kygzUxpUZs


19. Все действия в шаблоне легко связать между собой: соединить края окон экшенов с помощью пунктирной стрелки, либо расположить окна друг под другом, задавая таким образом последовательность действий.

s1idlz7gWbABA7EKW-VrLoX0hFbACDCaCg7dl-X5Z6E9-nbBVv2CuHW_c_WnxBYcP4JdFcqvhuRhFpK_6aZ1HhBoth6-V29eYhUdItgw2s7E6vIBZv5r32do__X6aNqmeQqLBYLZJ_tKYGRnZvDST-w


20. Наконец-то добавим действие перехода бота по ссылке из переменной url.

snaDwj8PgvOqLlnrI-jLDVG8t72oGziDdjO8KMfUYBZCShCTVPaV83TtSeGO-g6oyXq1KLYY9FwHq0yNljjHdU6yYWQxRlbPZP-u91M3jb65kwrHyQUq4_WfwWcRRYHArNM9sGDnewQkEFP7c7uVxBQ


Kk0zWpUGqpM8t7AXFrIDLVT2v067FX-IPm_8pcY1rYDIv3XiJiPNcpgEluRfv3q_KiLVSLmZXCIcvJnMXgBFf3oqLk8XCoPCuKTfqMe_zuIyNDGv0Z_9KwfSNrZmjxpqh_arTCajZduwYS4HN5cnjyo


21. Давайте создадим действие, которое будет останавливать видео после открытия страницы. Это поможет сэкономить трафик и упростит процесс парсинга. Не будем вдаваться тонкости HTML, хотя Zennoposter и это умеет, например, искать элемент сайта по его тегу. Просто добавим событие, которое нужно выполнить — остановить video.

6HqUeDnpTo0EOyPqYEWOS8J9aYN1ujHTW26TQoTKf6vOhXEBtU_UkZy34x7BS47TgQzqgZo5EWLYYtu8TdpY64zIzhMsOBwdmJdrwp12cCnFGOHAAkJxQ3XmZR_i6T1ox09_cSvYtAQMCBOpCE4qIU4


22. Также добавим действие для нахождения кнопки загрузки комментариев под видео. На этой кнопке написано число комментариев, а нам и нужно его узнать.

T0wmhgo_TVrwWlTTpPAKR0vf0eyJPoL6mnEjAXZ_FipDw2guOr91WEe_T-kP-UFkIvIB0dFdKSdHmJ6fDnu9E-KENBPfQowh2lldDSwkg8ETiyEuU2XfE1cBBL0oZLY_dgYsnoXa-xcXpp2ylot1lWU


HTML элемент кнопки сохраняем в переменную check.

KOdVNx8GtL-Sale_6dtwjEcuNcEz7URQpSQzm6fZVKwWqotO9SBm9I_rb0PZPgM9dmMPBZrNm7fzdP0lgfgdbPDFTyxzW1t9vCoV7VDgrReen4Ln3EByP7Mgm6G45u0lPLzcxH0m5dpBdxFRA4a3UwQ


23. Теперь добавляем действие для получения числа из надписи на кнопке. В этом нам поможет регулярное выражение, которое составляем на все том же regex101.com.


(?<=•&nbsp;-).*?(?=</span>)


WewJyln7IXDboSLNzgNjgZlzi3fykxVg4eU_1kBJNxXhSRyQjUDOKJo_EnczyFtQobIIA8NLLQRKIfdTMovennMWIleLL0EcnHyx8juK5NY7_8uD8NmUopuLkMNyrHhRJw7Ni9DG7RPY_-ML7Ru8RTM


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

E__LwtE2hnAqgAdmIaAf56LmpKAhcQH7H8cJDGJwJYMA0i7GZlyRs6n8b_HH1zNHkcYwYHpfX0p8IvVUC93AP-AkEuOXVApir7kJ-yBQm_EPJwmzklIIxqpuxnr7zYV_LDoRcWKOJqWjkuGOQda9df8


25. Построим логику выставления лимита на количество комментариев. Чтобы число комментов под видео случайно не превысило установленный лимит, например, в случае накрутки, приравняем оба этих значения.

TJivXUu6uQIxadZRlG3yY2SI77aK_nkUjJ8Yf4AiI8yJfMr-t0eer2uBxTA_a8b2OpLPIPacXgowYsJzTEQ6gvWtlBybZdOrr5i9lOrOojUuMSNgB8YwPLXr34wenzRblHngTZZkiGrwzD_Leu--y1Q


26. Пока что наш шаблон выглядит так. Поехали дальше — собирать результаты парсинга.

R-gAkVWtFvJKNHui8I6lgUZd7eLNHHEtB-4DgDo7QTVGQCf-HlmOHZ17oJZYc2W4-zbGlY93Ilfm_W3WclovEMHXSs9Woe-Tbdj2fZW5191ixVjmgM26ueobVWyYJwSuHO2_KeGTQzKk3BxovOZiIqQ


27. Создаем файл для получения результатов. Сперва добавим действие для парсинга названия канала.

oMehCPJ68v1_tLp0GY51BNWCHzmZb8Eayi5fnVeAH2AbauPxwmp4Qyyb6f0RbbZN18IkOuO1IpFOMbtjiQQW_xDYOnoieOOavXWgHqKYCIpXoTFTVknDzUOXgXC6tr6LhSsfGmGVh5x6xnWUy2EoTeY


28. Укажем путь xPath до названия канала, полученные данные сохраняем в переменную channel_name.


//a[contains(@href,'/channel/')]//h3

OqTePUMdJxZ_cqyD0oDPxPBL8RYCgSI3Adhd9U6g7dbNG4i6OaC8NHNzc56qnC3RuwJ49lX7ph1LONpXOuj70IiX6QnjxOCaFyHSGueyZwXii1SJC_ngViFnECPsEgMA1pRjoHKo6PTure9xN3xx8hE


29. Следующим действием спарсим ID видео при помощи регулярного выражения и сохраним в переменную video_id.


(?<=watch\?v=).*?(?=&|$)

Откуда мы взяли регулярное выражение? Составили сами по уже знакомым правилам, но точно так же можно загуглить выражение и проверить через подходящий тестер.

Cr5KOxeRc4XHqHnjY07rm6cxYWtVtg3e0ZzkOWDWVBvFyOof-cP5r0q_cGNoEKlwQW9ujc2nhRBPYfHQRlE5pJOXfmx_0kpW18wPelvjPdvTp1e6JXx7bS4RIxwlIqZodqNtL1U1z5ywQ9M0nvB0DOA


30. Сформируем путь к файлу с результатами, применяя наши переменные. Так будет выглядеть итоговый текст выражения:


{-Project.Directory-}Результат\Комментарии\[{-Variable.channel_name-}]__{-Variable.video_id-}_{-TimeNow.TimeNow-}.xlsx

eyIBeTAr-v7avwCS4xkDoVAqbgANQX8ohANT7FsMVxncGu_4nkkUEx15_zlMcwcpC6JM_re0onOEysBBG_hDjpUMtT1XV5n7XJFA7IznQ4Zb9KPeB_2FaGBkyqewjt_oUv1pzgTfiVpsCAJydlTuO0s


Данные сохраняем в переменную path_to_file.

c9lHEqlyiaMoj9SI1Xj8xNb2PCn9TpxYJQX5Iv2c4HmNtmg3k6SQjA2y6NTD4nXElx5WSCGcC1kUaq1D3-soqsNxOZQGPP3U3NEgRHe4cxaJjDPGxx_FdAaQpVsiIVfwppTQdm4zMDh8mS7fjzPkyoA


31. Теперь создаем таблицу с результатами и привязываем к файлу через переменную его пути из предыдущего шага.

vuliAE7kG2ri3tIYx4b13NFT6gJH5H-6pROOd0id2Ri3c6Dov1J9gkT1GfAKB3A57p9GzswlZ_w3WrGa3W2ZqlTWh49n4W-AaHsuy6Kji0ilLUgsaWyanJhnmKi1NCbhfQJm6bhummvo9b6ZwAehGy0

-8qrDNc5Ej2kwE_sIaoU9LRj2S7RmCRX-fPkiNuHaqXlepnWKMKmq5gfs98rJOJjxNRH_crqaIdIJ-lT4pv56tB5eDKSmvznuuh2nhDqX_4_0M4tu2JgGl3JMeJ8iJ-VENlZKUScVF_LaeDkVY4VsqE


32. Zennoposter — это low-code платформа, поэтому нам все же придется поработать со своим кодом, так как штатный функционал не предусматривает нужные нам действия. А именно — нам надо разделить лимит комментариев на 20, чтобы получить количество страниц для парсинга.

Итак, добавляем действие «свой код».

Dlq0Fmw3ZcRFXwGRcRNLrTBSO1fNUwqjMJ7D-sL8ykTv1IfyJCET4FKR7NCwWEBCr9zf8e-mkppxxkDZjqqVKTw-R8rCKps3TKRGJIx8B1Kc9lMq4fzx0xxxDi3dZ570k1HKJRmscq8YrSPbU1zJWNM


Поделим число комментариев на 20 с помощью команды


return Convert.ToString(((Convert.ToInt32(project.Variables["comment_num_limit"].Value))/20)+1)

Полученное значение сохраняем в переменную max_page.

N0Afbcl-qVwsBVrh3KspUCENv9gMgFbq2ShW8SuNLU4eB6ukm8XKF7DzdOIqxJw5bqDVMw6w76qyHHXxVDrZaqQBGMPPMiTRB80MBcKvwL01XITtvX9yaJGR9rBLDOG99XVHwNQsc5yjpcpVzRYzPuE


33. Все получилось, но нужно добавить паузу в одну секунду, чтобы дать время файловой системе на обработку данных.

eSRy3koPx_gKYsUFnSEqkLYwvvIEyGbtnj_e2RipjuPlCJRQVnCbgeyWKq-afzzMbFtuOmQSIsr_Jmc1xZnMzpKP3Vxwl86t2W93tguNbM4feU8YzscIg_ODwM9vHCfKDwuuy5JEjMS6gIJcIXrQjxo


34. Настроим получение файлов с комментариями. Для этого переведем бота в режим перехвата трафика, добавив кастомный код.


instance.UseTrafficMonitoring = true;

fiOOd1zea_8Mdr_XD6dSwyDO0WcrgVj5Tlub_x6-UN1uAvkZ1R6pM-cTkR0S9r9rk4WrKRe5scc9UyjwsqfiSK5oM3Rn7mdc4d3e3g8bdjIboHfhc6cs44CE3v-nx-FVRMAwKfF87C_SY3T9RTE3n3g


35. Еще прежде — в шаге 22 — мы находили кнопку для загрузки комментариев. Теперь предпримем те же действия, но кликнем по кнопке. Это нужно, чтобы страница с комментариями полностью развернулась, так как в мобильной версии Youtube видно только первый коммент под видео.

yTnbGxCbYV5OljfRx6xpekFRbWA4K_vFbKt49hX1zcgA1RcbnnHll03WEhCBMr20a_Jo-5PBIybOTsv3in1-opoA3GGC4DCZaLdikgLYAgmw-MOdUJY9uQUogYr0KdxCKg_nfm7Qj52SAF1ziZlFbR0


36. Спарсить текст открывшихся комментов можно с помощью JSON — текстового формата обмена данными, основанного на JavaScript. Для этого добавляем ещё один кастомный код — он построчно переберет массив данных JSON.


var tUrl = "";
var traffic = instance.ActiveTab.GetTraffic();
var list = project.Lists["Запросы"];

foreach(var t in traffic) {
tUrl = t.Url;
if (tUrl.Contains("v1/next?")) {
list.Add(System.Text.Encoding.UTF8.GetString(t.ResponseBody));
}
}

return "Ничего не нашли";

0BBgNt_02tFw6aWbNSsFipTjRKQg6USUVcX1P5IV6zhL_5dy9kaUTy0XKxu_uUafhCOFc3WUMsR_AhD6b022ykvE6d9wjh4hSUeAKRUBx7bV4PhRWawTSuUwLruXx6AdNrSqb9EWMOjlvk9DclFE99I


Тут же в свойствах действия создадим новый список «Запросы» и сохраним туда результаты. Количество получившихся строк отправляем в переменную count.

CFnsNUBSK0eLtxfqAlDielIS2gvBUYkgbA3wyQDK9Nv6YoiuqnnKko80fLjvVr6ywMHsfuYzck9mvqdqFgA2uiP7Ra_GXw8mxGP98L9-l7242QqtU-fO-dLIJu5meRm21L8_8rHwd2dqQdFvDU4cy1w


37. Еще одна проверка: сравним количество полученных строк из count с нашей переменной Variable.temp_count из 18 шага, а также с максимальным количеством страниц, заданным в переменной max_page на 32 шаге. Если проходим проверку, загружаем ещё страницу комментариев.

6F2Ww-VabH-eIAa9tvkI7gg2_6Z-IgUPs4ZIYZvWk-Q1ePLE4CQGb1DEa4k0qCc9RbpSkGj85BXbyDoXeWZIVgvYHdvzHNQZtjg3GHQi9cTQxt4VNOU9-UE-Sp9A9pXn3khy5ErPfkOEepDw0MallVs

07US2B6I1RUxuGlVEiJz2VdVwQYV2VFz2VpPMX2E-B0sS0LdPuHI5VTeskk1zmfVTbosdCzM8gbQ3Ce46iyFaSogJ1YAzAxfyHz9ZuIdGlujV9ue34AIx4y0bDpO-La-lnYevjHk8VlKLMOlfRsIWIk


38. Теперь добавим действие «выполнить событие», чтобы настроить клик на элемент загрузки комментариев с сайта.

uqVzRzpTc5ppZ2vwj80w-82G8qRZG8K9IPtaXUsilpsJ7R4wkWStOAzAW1QWQxvQkAEn6dEz3rwO_O-wR2ihssAYXcN-h6LKigpRRDdtinHB_QfdD-FQqDCVW8ZQ8uZRO0SxF_hMVE7qJRUQ6nen_WM

HcFiIgP0LAdP0emtzWC3EcliSvB50oEGGUQ8uPAB-0XcF1AWNho4oN6gJbGtDbrISvNja0wuP2QrAUMAUzWe1SZKO0si2tqDmGln79FjZhRHyu7H4oiQACjIzcH2gChmNnp_X-WQZVWuG2UAgMRRdI4


39. Вот что у нас получилось.

WG__NYCG53FdxQA3fqOfhSDKSQ67-d1cO6ghyR0dDPPR2LlffQZY7hXbekeu0JKK8k7cgCk-2TRjTXuo0KxmH4-nrmOjfrNwKNAPvLlgYtiYCsNj5JpT1B__t3nbLH9yRoT9IKXUpp5JeO6OiMqWcT4


40. Наконец-то приступим к парсингу полученных данных из JSON.

xwBKqujddhfs65ixpYmMHRaG2rYBi0PBzQENLFk4si375qcr5F-52u138r2MHMU_A066mI9__ROX_1toVLdH3YlsoKrzFgGieumVuu4kUJXyprvCI2MkQeeELfGR5GJsv5nuo4MfUoHRtjnESEMD9-Q


41. Для этого добавим действие обработки JSON.

blcXLpbQcAx8I8SVQ7NJCZ9j1P8abFCeuXeDu_kPq2CRuqsGs-q1Rnzu1q0n23biOVnAjFou4wIp7O1ohOIPpnSpuDxNvNvjqB3aFrqQ5uI_xjdZ1Lzu3-Byvr57yWTV2ZQ0V-S2kOxU6vS932DH7os


В параметрах укажем переменную Variable.json.

_q3RQbTmJvapdDsAMaCV3FKl1dKvxr7_7Dr5BzH3_Z-8lbkKVuQ73Bfs8y3JICKx7X-Qybpwt7jMxkpzEYnsWGG7gzE4U4KSO0Kl7TWo77IbljyEs6GIKkME7iBunf0Ygi_vhYJcwv0uLBLf-6roPQ0


42. Много переменных не бывает, поэтому заведем еще одну — для трека обработанных элементов JSON. С её помощью будем переходить к следующему элементу.

L_q1GwvBXNKe4wERKRW_iUuTNYUfEYMa9cyZDUN6yYWjcq-HEg40hefxuqEXLIOowCIILfcoRCnM3nPXE-lBXPsTYw5O4PH3xm0t_eeYtuLXrgNkUUviGKmtbQaDjPNLCVrQx0B9MYB9PL7yBfbbwNM

t6aTmkgeU--K5FE_vrikNLenPsUUItXShLgcSPUUMguOzP9v0Oi5swPTlEcF38IFIDMVRGhBW5YQMcfXONaP3CgftXI7RK0qyuIhBAu3vbaVAT1GccjWzYYhWXko4d6IFcfy8buX-F0DjwkiiNLHTEY


43. Создадим новый файл уже непосредственно для текстов комментариев.

Bg9lnE6ciWIaRQA5otdUCrYY-4LDr_YwEmFOBR2Rb8w3eSI3DbbRbTKxKu7MnncdGzeHIDrkp6InSchs_W9_AO6j5Rz7uoqBB6svo7ipxg4F70UfXvkukXBATnhmlD2myK57R41dXPhrCJPRD2LJ6PM


Для этого задаем свойства действия и создаем пустой список с названием «Текст».

-gFipwkzUe7dYg9cTJ86tpKBzGhQg2O5FD6dH2J7tamoFZL-8JhNgwoGFRArPnrmgYsBpCHyu5z5KVm07JWE6DtbHlC1wGLGZYLnZMxqpdVi-ezsQAj80oicBAkhQOrojTN_bYDmNL-LBsYw4SapQbY
hA36ZLja7hZZXPfcHT8L0peO6HC2PuPvHdgq_Oe9xDYCVHSjlRO66b7EaeyDzfLN36ycb0YkF0obMxIOJmlnvKLENl8JuB8pHULTQ3B9hWs6qcanpMg1FhRFB2fBgrViokqnHVLGhnmP-ptvLYf0iGQ


44. В него извлечем текстовое содержимое комментариев, обратившись к вложенным свойствам JSON:


onResponseReceivedEndpoints[1].reloadContinuationItemsCommand.continuationItems[{-Variable.counter_JSON-}].commentThreadRenderer.comment.commentRenderer.contentText.runs

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

Благодаря переменной Variable.counter_JSON бот сможет перебирать данные JSON.

58uAMReeiKYhkUyqIwvHLX0yxfV7pSwEfS7a61FZVggObmV7kyulAeLDAM7zjbiLevEeAA-yNpDuK0mLRUH9nyUf3nfK_xrWgJRLUyFQjOMlJgG32yxHaBVDlHDmVn0oHzEZrriuaeUqVyC-xn13hL8


45. Весь извлеченный из текущего элемента JSON текст, который записали в список «Текст», объединим в одной переменной text_comment.

uV5r3tsJ5KvAAuWgd3Eqj0DxVNDenYlPoKZDzXxEV62AGkoctheOcLkv-NB1c_JP8zvKcd4QR73W1Giy66J5jZT4J-8QTttHhvxkL9jpCtE2SPeWaoP8Tyu0xmQThfth5Q8G_zYiMZ1U4_unYcevs9M

syOnECeS-I-PYkgN3mwb9SjdPDvUBQ6GIw-sIxdMaQp8vRN96CIqwM-pLLX3FzSFcHJX8GRe4XFj6EIuC3DknnJ414_nLydWnNROAvbGLboXkLtUsNdMpFvb4Z_zS7ClaLVzXRr4KPHcH_ykhNv4rLA


46. Добавим строку в таблицу результатов.

1uCBfOMv9_5BmcY-as3NOIVtx8yu4SuStvOeufAGQB2lJMV376BnjnDliU2BBqvtzq8ZUPqH9qPTiuMFfFVHZ3TZMJZpzvEmNZza_wZXMPjRISRmEes1DDcdq16cD8KDykZp19yQ3K2lJYC6YL6K4XM


47. Увеличим значение нашей переменной-счётчика, чтобы извлекать комментарии дальше,уже из следующего элемента JSON.

oiBvyHXcsFT9x-uRPfi7Y_7_BWtIys9OzgfehR50CGfgte1fm9DDp2v9JELCJ9IoQ2yzTrcBCrYUprSwVtuYSDvXlNlix6LMV4YsCBkee3NCKdPQnJOTheaAnIhMZR6bP7uJN-osMEl192MQqhqI9kQ

VLgiNV-QIDen4Ue6A5I8N7jv8nF2P9f79k1fe36badHhB9PxEg7IkFY7BZsf5VYSDgySFEXCDpWUh8RqPGPznr8_-ihnEqkYKe48JcvPTon8Gf_-vb6WYr7r3JLcpPjJZxtv1KfAK9N7aOfM-bMmq8Y


48. Свяжем действия, чтобы зациклить логику.

3rAM0P5nJztx1xQ5TdsLIY9DP-U-CnQ99tRoiI7MXAnWvwWmLX3Cu-Ph5Hckq8gZKHtrt24KA2kgueoUk26DMmxaPKfUjHAfYL0BEj4Z0gIIZMKrY3f8IMhO2n-XnSlAQ54d3qYGC23tqGI1hxegECk


49. Когда после очередного увеличения счётчика для JSON, мы не сможем извлечь текстовую часть комментария и получим ошибку — прерываем цикл.

QnxL5O_aPD2G-oJbceySD1AdJ_6SHIWdEMmoEbYdxiuMpNl0fvuYldVhtcttqI1O8Y5zgUY9_6W95mgv3UlSk_zQSQR9b5QxYbm7reUukx37iPo2SSn1qne53QVKI1eF5Vje09W94VUk8CJ0ROnyccI


50. Добавим действие с оповещением о проделанной работе.

BpAaziGP_WRaj828VQRh_rhXwQT9pVI36xG09zbBOwqP0XKBxkcHKixc4a94hkAk-bd1SxBdYx8Lj7bNJPmDpZZ3TJvkhClWq4rFK5mnPVCivUDo0O0mLxhTQl92iQrcE735K12LiUzZBCNKxV8s4gA

L0o3Z7zTEQXtjm56Zjb_eI9MnKUL6V3zgybqBRqHFCbz29FdA43WX-98mD-CFuPIgcKZrJEuGtjCyeCaAf89IXaV3y7X6FJyI8aKjzeCSwiQItJETuaVyYU-QX3263CEIHu0SMnbW5cACC6ar3rsAoA


Итак. Вот что у нас получилось.

hlSU7Az4kLb59OqLG8QHNd3Sk3jpSRDlkYHeDeFWIMxwfvJ1l4tGAHbdTFy0Yvi9nGmE6OrWOiNyvVSegU3a1rvdF-Gy4GDBmLo3GtWB2_Wi5khFwEL2CUIvvtqDNKUcUdtuhNrX1iCd7xNOBTy2JuI


Этот шаблон позволяет парсить данные из множества видео на Youtube и получать информацию в удобном формате — у нас это таблица в Excel. Так вы сможете быстро собирать качественные и количественные данные и опираться на них в работе.

Реализуйте возможности, которые открываются перед вами в интернете. Используйте автоматизированный софт и освободитесь от рутины, чтобы тратить время на действительно важные вещи.
 
Последнее редактирование:
Кажется, написание поста заняло больше времени, чем написание бота )))
 
  • Спасибо
Реакции: aidar171
Кстати, формировать или проверять существующие регулярные выражения удобно на сайте regex101.com/
Чем не угодил родной отладчик самого мейкера? Как по мне, так он самый понятный. Я в регулярках от слова совсем и никак не втыкаю, очень выручает встроенный тестер регулярок. А всякие онлайн-сервисы не смог осилить
 
Спасибки, принцип понятен

Надеюсь шаблон примерно одинаковый для парсинга других ресурсов..
 
  • Спасибо
Реакции: Asocks
Чем не угодил родной отладчик самого мейкера? Как по мне, так он самый понятный. Я в регулярках от слова совсем и никак не втыкаю, очень выручает встроенный тестер регулярок. А всякие онлайн-сервисы не смог осилить
Его также оценили, но regex101.com/ привлёк тем, что подсвечивает какой именно токен регулярки распознал ту или иную часть строки. Пояснение к токенам и шпаргалка также помогают в отладке.
118685
 
  • Спасибо
Реакции: Андрейка2020
Спасибки, принцип понятен

Надеюсь шаблон примерно одинаковый для парсинга других ресурсов..
Вам спасибо за прочтение! Увы и ах, почти к каждому сайту нужен свой подход. Потому и ценны отлаженные работающие шаблоны.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)