Як парсити WordPress сайти

У попередньому пості я говорив про особливості WordPress сайтів, завдяки якій їх можна легко парсити. Деякі з вас припустили, що це стосується RSS Feed. Але ні, ця “особливість” стосується … wp-json і shortlink.

Що таке shortlink? Це посилання виду domain.com/?p=123. 123 – це внутрішній ID поста, за яким можна спарсити статтю, підставивши ось таку конструкцію до домену {domain} / wp-json / wp / v2 / posts / {id}

Для статті https://hekkpipe.com/car-hookah / ось формат wp-json https://hekkpipe.com/wp-json/wp/v2/posts/8105

Який алгоритм?

  1. Парсіть shortlink зі сторінки
  2. Додаєте id до конструкції {domain} / wp-json / wp / v2 / posts / {id}
  3. Парсіть статтю
    1. Назва статті знаходиться в”title”: {“rendered”:”назва статті”}
    2. Текст статті починається з “content”: {“rendered”:”тіло статті з html тегами”}
  4. Обробляєте статтю (видаляєте зовнішні посилання, інлайн стилі) – щоб узгоджувалося з оформленням вашого сайту. Можна відразу видаляти всі зображення, щоб потім вставити свої.

А що далі? Ми зберігали це в .html файл, і потім конвертували в .docx

У багатьох перекладачах (DeepL, Яндекс.Перекладач) є функція перекладу документа. Перекладений документ заливається потім на сайт за допомогою Mammoth. Можна це прискорити за допомогою WP REST API.

Ага, я видалю посилання на shortlink і ти мене не спарсиш ❌

Спаршу. У коді є ще ось такий фрагмент

<link rel=”alternate” type=”application/json” href=”https://hekkpipe.com/wp-json/wp/v2/posts/8105″ />

Це пряме посилання на сторінку у форматі wp-json. Теж видалите?

Тоді у мене для вас є ще одна новина.

https://hekkpipe.com/wp-json/wp/v2/posts/?per_page=100&?page=1
?per_page=100 – Виводити по 100 постів на сторінці (більше не можна)

?page=1 – власне пагінація

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

Update. Також можна витягнути ось так статтю

https://hekkpipe.com/wp-json/wp/v2/posts/?title=%22How%20to%20make%20your%20hookah%20taste%20fresh?%22

Як від цього захиститися?

✅ Закрити REST API від публічного доступу. Інструкція в цій статті (https://wp-kama.ru/handbook/rest). відключати REST API повністю не рекомендується, через це може поламатися адмінка.

Варіанти застосувань ви самі придумаєте.

А в чому мораль? Хочеш дорвейщикам життя спростити? Ні, хочу спростити життя веб-майстрам. Часто в чатах пишуть, що мій контент спарсили, тепер його треба переписувати… а ви не спрощуйте парсинг вашого контенту.

Пізніше опублікую добірку, як захищатися від парсингу контенту. Але ви повинні знати: якщо вас дійсно хочуть спарсити, нічого (ні Cloudflare, ні капча, ні інші рішення) вас не захистить. Завжди є Selenium, Zennoposter, мобільні проксі (які ніхто майже не банить) – і майже будь-який захист буде пройдено.

Оцініть статтю
Додати коментар