Приклад парсеру для web сайтів

Часто виникає завдання періодично парсити який-небудь сайт на наявність нової інформації. Наприклад, якщо ти пишеш агрегатор контенту з новинного сайту або форуму, в якому немає підтримки RSS. Найпростіше написати скрепер на Python і розібрати отриманий HTML через beautifulsoup або регулярки. Однак є більш елегантний спосіб - самому зробити відсутні API для сайту і отримувати відповіді в звичному JSON, як ніби-то у сайту є нативний API.

Приклад парсеру для web сайтів

Не будемо далеко ходити за прикладом і напишемо парсер контенту з сайту відомого журналу. Як ти знаєш, сайти не зараз не надає ніякого API для програмного отримання статей, крім RSS. Однак RSS не завжди зручний, та й видає далеко не всю потрібну інформацію. Виправимо це!

ПОСТАНОВКА ЗАДАЧІ

Фреймворк для парсером WEB САЙТІВ

WrapAPI - це досить новий (пара місяців від роду) сервіс для побудови потужних кастомних парсеров інтернету і надання до них доступу по API. Не лякайся, якщо нічого не зрозумів, зараз поясню на пальцях. Працює так:

Трохи про приватності запитів

Ти напевно вже задумався про те, наскільки безпечно використовувати чужий сервіс і передавати йому параметри своїх запитів з приватними даними. Тим більше що за замовчуванням для кожного нового API-проекту буде створюватися публічний репозиторій і запускати API з нього зможе будь-хто. Не все так погано:

1. Кожен API-репозиторій (а відповідно, і всі API-запити в ньому) можна зробити приватним. Вони не будуть показуватися в загальному списку вже створених API на платформі WrapAPI. Просто вибери досить складне ім'я сховища, і шанс, що на нього хтось забреде випадково, зведеться до мінімуму.

2. Будь-який запит до WrapAPI вимагає спеціального токена, який потрібно отримати в своїй учетке WrapAPI. Тобто просто так дізнатися URL до твого сховища і тягати через

ПРИГОТУВАННЯ

Кілька простих кроків перед початком.
1. Йдемо на сайт WrapAPI, створюємо нову учетку і логіном в неї.
2. Встановлюємо розширення для Chrome (підійде будь-який Chromium-based браузер), відкриваємо консоль розробника і бачимо нову вкладку WrapAPI. 3. Переходимо на неї і логіном.

Це розширення нам знадобиться для того, щоб перехоплювати запити, які ми збираємося емулювати, і швидко направляти їх в WrapAPI для подальшої роботи. За логікою роботи це розширення дуже схоже на в'язку Burp Proxy + Burp Intruder.

Приклад парсеру для web сайтів

відловлювати ЗАПИТИ

Тепер потрібно вказати WrapAPI, який HTTP-запит ми будемо використовувати для побудови нашого API. Йдемо на сайт «Хакера» і відкриваємо консоль розробника, переключившись на вкладку WrapAPI.

Приклад парсеру для web сайтів

Приклад парсеру для web сайтів

конфігуруємо WRAPAPI

Приклад парсеру для web сайтів

Переходь на вкладку Inputs and request. Тут нам знадобиться вказати, з якими параметрами WrapAPI повинен парсити запитувану сторінку, щоб сервер віддав йому валідний відповідь.

Приклад парсеру для web сайтів

Заголовки запиту нижче можна не чіпати, я використовував стандартні з Chromium. Якщо Парс не "Хакер», а дані з якого-небудь закритого сервера, можеш підставити туди потрібні куки, хедери, basic-auth і все, що потрібно. Одним словом, ти зможеш налаштувати свій запит так, щоб сервер без жодних підозр віддав тобі контент.

Приклад парсеру для web сайтів

ВЧИМО WRAPAPI бракує фічам

Тепер потрібно вказати WrapAPI, як обробляти отриманий результат і в якому вигляді його представляти. Переходь на наступну вкладку - Outputs and response.

Приклад парсеру для web сайтів

Невеликий глосарій, перш ніж йти далі:

  • Output - фільтр-постпроцесор контенту, який приймає на входесирой відповідь сервера, а повертає вже модифікований за заданими правилами. Вони бувають декількох типів. Самі часто використовувані:
    • JSON вибирає вміст зазначеного атрибута, який поданий на вхід JSON-об'єкта, і повертає його значення як рядок;
    • CSS вибирає елементи DOM за вказаною CSS-селектору (наприклад, ID або класу) і повертає їх значення, атрибут або весь HTML-тег цілком. Може повернути як один рядок, так і масив знайдених входжень;
    • Regular expression вибирає входження по регулярному виразу, в іншому той же, що і попередній output;
    • HTTP Header вибирає значення HTTP-заголовка відповіді сервера і повертає його рядком;
    • Cookie вибирає значення Cookie, отриманої у відповіді від сервера, і повертає його рядком.
  • Output Scenario - набір аутпут, які об'єднані в одну або кілька паралельних ланцюжків. По суті - майже весь набір препроцесорів, які перетворюють серверний відповідь в потрібний нам формат.
  • Test case - збережений відповідь сервера, на якому тестуються обробники і підбирається потрібна ланцюжок аутпут.
    Створи новий test case, збережи його під ім'ям page1. Тепер подивися, що повернув сервер. Це повинен бути об'єкт JSON, одне з полів якого містить шматок HTTP-розмітки з перерахуванням запитаних постів.

Приклад парсеру для web сайтів

Схожі статті