Як парсити сайти в скриптах - асистент дуся

У скриптах Дусі є спеціальна дія «HTTP запит», за допомогою якого можна отримувати дані з будь-якого сайту, а потім робити з ними щось корисне.
Для цього потрібно зовсім небагато - навчитися користуватися CSS селекторами. І тоді залишиться лише знайти корисні сайти і зробити з них ще більш корисні голосові функції!
У статті я покажу на прикладі одного з скриптів, як використовувати CSS селектори і можливості Дусі по роботі з масивами даних.
Що таке CSS селектори

Як ви напевно знаєте, будь-яка веб сторінка - це звичайний HTML код у вигляді тегів. Вони описують документ, який повинен бути відображений у вашому веб-після завантаження станиці.
CSS - це каскадні таблиці стилів. З їх допомогою описується, як ваша сторінка повинна виглядати. Тобто де який шрифт, які відступи і так далі.
CSS селектор - це вираз, який говорить парсеру сторінки, які теги потрібно «витягнути» зі сторінки. Наприклад, селектор div.my-class витягне з сторінки все теги div, у яких є CSS клас my-class.
Власне, це все що нам потрібно для того, щоб витягнути з будь-якої сторінки будь-яку інформацію. Повний синтаксис CSS селекторів можна легко знайти в інтернеті. Там же безліч навчального матеріалу. Наприклад ось офіційна документація парсеру. який використовується Дусею.
Як це використовувати в скриптах
Дія «HTTP запит» вміє робити запити на будь-який URL. А потім зберегти отриманий контент в декількох змінних. Наприклад $ http_content буде зберігати весь відповідь - тобто нашу HTML сторінку.
Також, ця дія дозволяє написати один CSS селектор. який автоматично витягне текст потрібного тега в змінну $ http_html_text. Буде витягнутий текст саме з першого знайденого елемента.
Але з версії 1.5.3 можна витягати тексти кількох тегів, а також їх атрибутів. Як це робиться - подивимося на прикладі.

Є такий прекрасний сайт otzovik.com - на ньому можна написати і знайти відгуки на що-завгодно; Давайте подивимося, як можна створити дуже корисний скрипт, який за запитом буде знаходити на цьому сайті сторінку з відгуками потрібного нам товару (або навіть не товару) і відразу відкривати браузер на цій сторінці.
З чого почати
Для початку потрібно подивитися, як взагалі працює сайт.

Як бачимо, пошук на сайті працює дійсно добре - ми можемо написати запит будь-яким чином і все одно отримати першим результатом в списку найбільш релевантний варіант.
Це найголовніше - так як в голосовому асистент використовується мова, а значить пошуковий запит може бути розпізнаний як завгодно.
Це означає, що нам просто потрібно в нашому скрипті створити дію «HTTP запит» і написати URL виду
Що будемо аналізувати довільні
Тепер подивимося на саму сторінку з результатами пошуку. Як видно, тут йде список товарів, але самих відгуків не видно. У нашому скрипті ми хочемо зробити так, щоб відразу відкривалася сторінка найпершого товару, щоб користувач відразу бачив відгуки. Перед цим добре б вимовити назву товару, щоб користувач розумів, на що саме він дивиться.
Для цього будемо використовувати CSS селектори.
вивчаємо сторінку
Пишемо CSS селектори
Витягнемо назву товару відразу в змінну $ http_html_text. Для цього в настройках дії «HTTP запит» пропишемо CSS селектор
Це означає, що буде витягнутий текст з самого першого елемента h3 під найпершим тегом td, у якого є клас nprods. Тепер наша змінна $ http_html_text буде містити назву товару.
А змінна $ http_html_texts буде містити назви всіх товарів, знайдених за запитом. Але в нашому скрипті вони не потрібні.
Тепер цю зміну можна сміливо прописати в дії «Сказати» - і Дуся буде вимовляти назву товару, для якого зараз відкриється сторінка відгуків.
А саме - функцією «fattr» - вона приймає ім'я атрибута ( «href»), рядок з CSS селектором ( «a.arev») і власне той відповідь від сервера, який потрібно парсити ( «$ http_content»). І повертає текст самого першого знайденого елемента. У нашому випадку це буде рядок типу «/ reviews / apple_ipad_2 /».
Пропишемо це в дії «Зберегти змінну» і дамо змінної яке-небудь ім'я, наприклад «href».
Все готово!
В результаті
У нас вийшов скрипт, який автоматично витягує на наш запит потрібні нам дані, озвучує їх і відкриває браузер там, де потрібно. Швидко і зручно! Саме так, як повинен діяти голосовий асистент - допомагати користувачу знаходити потрібну інформацію тільки за рахунок голосу.
