Веб-скрапінг за допомогою Java пояснюється простіше

| | 0 Comments| 8:40 AM
Categories:

Веб-збирання дозволяє ефективно збирати великі обсяги даних з Інтернету в дуже швидкий спосіб і особливо корисно у випадках, коли веб-сайти не розкривають свої дані структурованим способом через використання інтерфейсів прикладного програмування (API).

Наприклад, уявіть, що ви створюєте програму, яка порівнює ціни на товари на сайтах електронної комерції. Як би ти ставився до цього? Один із способів — самостійно вручну перевірити ціни на товари на всіх сайтах і записати результати. Однак це нерозумний спосіб, оскільки на платформах електронної комерції є тисячі продуктів, і вам знадобиться вічність, щоб отримати відповідні дані.

Кращий спосіб зробити це – за допомогою веб-скрапінгу. Веб-збирання — це процес автоматичного вилучення даних із веб-сторінок і веб-сайтів за допомогою програмного забезпечення.

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

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

Багато підприємств і компаній покладаються на веб-збирання для отримання даних для аналізу. Компанії, що спеціалізуються на людських ресурсах, електронній комерції, фінансах, нерухомості, подорожах, соціальних медіа та дослідженнях, використовують веб-збирання для отримання відповідних даних із веб-сайтів.

Сам Google використовує веб-скрапінг для індексування веб-сайтів в Інтернеті, щоб надавати користувачам відповідні результати пошуку.

Однак важливо бути обережним під час зламування павутини. Хоча видалення загальнодоступних даних не є незаконним, деякі веб-сайти забороняють таке збирання. Це може бути тому, що вони мають конфіденційну інформацію користувача, їхні умови використання прямо забороняють веб-скапінг або вони захищають інтелектуальну власність.

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

Щоб перевірити, чи можна видалити веб-сайт, додайте robots.txt до URL-адреси веб-сайту. robots.txt використовується для вказівки роботам, які частини веб-сайту можна скопіювати. Наприклад, щоб перевірити, чи можна скинути Google, перейдіть на сторінку google.com/robots.txt

User-agent: * відноситься до всіх ботів або програмних скриптів і сканерів. Disallow використовується, щоб повідомити ботам, що вони не можуть отримати доступ до будь-якої URL-адреси в каталозі, наприклад /search. Дозволити вказує каталоги, з яких вони можуть отримати доступ до URL-адрес.

Прикладом сайту, який не дозволяє копіювання, є LinkedIn. Щоб перевірити, чи можна сканувати LinkedIn, перейдіть на сторінку linkedin.com/robots.txt

Як ви бачите, вам не дозволено очищати LinkedIn без їхнього дозволу. Завжди перевіряйте, чи веб-сайт дозволяє копіювання, щоб уникнути юридичних проблем.

Чому Java є підходящою мовою для веб-скопіювання

У той час як ви можете створити веб-скребок за допомогою різних мов програмування, Java особливо ідеально підходить для цієї роботи з кількох причин. По-перше, Java має багату екосистему та велику спільноту, а також надає різноманітні бібліотеки веб-скрейперів, такі як JSoup, WebMagic і HTMLUnit, які спрощують написання веб-скребків.

  Як встановити SSD у свій настільний ПК

Він також надає бібліотеки аналізу HTML для спрощення процесу вилучення даних із документів HTML і мережевих бібліотек, таких як HttpURLConnection, для надсилання запитів до різних URL-адрес веб-сайтів.

Потужна підтримка Java для паралелізму та багатопотоковості також корисна для веб-скрапінгу, оскільки вона дозволяє паралельно обробляти та обробляти завдання веб-скрапінгу з кількома запитами, дозволяючи вам скрапінгувати кілька сторінок одночасно. Оскільки масштабованість є ключовою перевагою Java, ви можете комфортно чистити веб-сайти у величезному масштабі за допомогою веб-скребка, написаного на Java.

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

Java також можна використовувати з безголовими браузерами, такими як Headless Chrome, HTML Unit, Headless Firefox і PhantomJs, серед інших. Безголовий браузер – це браузер без графічного інтерфейсу користувача. Безголові браузери можуть імітувати взаємодію користувачів і дуже корисні під час сканування веб-сайтів, які потребують взаємодії користувача.

Крім того, Java є дуже популярною та широко використовуваною мовою, яка підтримується та може бути легко інтегрована з різними інструментами, такими як бази даних та інфраструктури обробки даних. Це вигідно, оскільки гарантує, що під час збирання даних усі інструменти, необхідні для збирання, обробки та зберігання даних, ймовірно, підтримують Java.

Давайте подивимося, як ми можемо використовувати Java для веб-скрапінгу.

Java for Web Scraping: передумови

Щоб використовувати Java у веб-скрейпінгу, мають бути виконані наступні передумови:

1. Java – у вас повинна бути встановлена ​​Java, бажано остання версія для тривалої підтримки. Якщо у вас не встановлено Java, перейдіть до встановлення Java, щоб дізнатися, як інсталювати Java на вашій машині

2. Інтегроване середовище розробки (IDE) – на вашій машині має бути встановлено IDE. У цьому підручнику ми будемо використовувати IntelliJ IDEA, але ви можете використовувати будь-яку IDE, яка вам знайома.

3. Maven – це використовуватиметься для керування залежностями та для встановлення бібліотеки веб-збирання.

Якщо у вас не встановлено Maven, ви можете встановити його, відкривши термінал і виконавши:

sudo apt install maven

Це встановить Maven з офіційного репозиторію. Ви можете підтвердити успішне встановлення Maven, виконавши:

mvn -version

Якщо інсталяція пройшла успішно, ви повинні отримати такий результат:

Налаштування середовища

Щоб налаштувати середовище:

1. Відкрийте IntelliJ IDEA. На лівій панелі меню натисніть «Проекти», а потім виберіть «Новий проект».

2. У вікні «Новий проект», що відкриється, заповніть його, як показано нижче. Переконайтеся, що для мови встановлено Java, а для системи збірки – Maven. Ви можете дати проекту будь-яке ім’я, а потім використати «Розташування», щоб указати папку, у якій потрібно створити проект. Після завершення натисніть «Створити».

  Як встановити та використовувати AceStream

3. Після створення проекту ви повинні мати pom.xml у своєму проекті, як показано нижче.

Файл pom.xml створюється Maven і містить інформацію про проект і деталі конфігурації, які використовуються Maven для створення проекту. Саме цей файл ми також використовуємо, щоб вказати, що ми будемо використовувати зовнішні бібліотеки.

Під час створення веб-скребка ми будемо використовувати бібліотеку jsoup. Тому нам потрібно додати його як залежність у файл pom.xml, щоб Maven міг зробити його доступним у нашому проекті.

4. Додайте залежність jsoup у файл pom.xml, скопіювавши наведений нижче код і додавши його до свого файлу pom.xml

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.16.1</version>
        </dependency>
    </dependencies>

Результат має бути таким, як показано нижче:

Якщо ви зіткнулися з помилкою про те, що залежність не знайдено, клацніть позначений значок, щоб Maven завантажив внесені зміни, завантажив залежність і усунув помилку.

Таким чином, ваше середовище повністю готове.

Веб-скрейпінг за допомогою Java

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

Щоб скачати веб-сайт за допомогою Java

1. На лівій панелі меню IntelliJ відкрийте каталог src, а потім головний каталог, який знаходиться всередині каталогу src. Головний каталог містить каталог під назвою java; клацніть його правою кнопкою миші та виберіть «Новий», а потім «Клас Java».

Дайте класу будь-яку назву, наприклад WebScraper, а потім натисніть Enter, щоб створити новий клас Java.

Відкрийте щойно створений файл, що містить класи Java, які ви щойно створили.

2. Веб-скрейпінг передбачає отримання даних із веб-сайтів. Тому нам потрібно вказати URL-адресу, з якої ми хочемо отримати дані. Після того, як ми вкажемо URL-адресу, нам потрібно підключитися до URL-адреси та зробити запит GET, щоб отримати вміст HTML сторінки.

Код, який це робить, показано нижче:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;

public class WebScraper {
    public static void main(String[] args) {
        String url = "https://www.scrapethissite.com/pages/simple/";
        try {
            Document doc = Jsoup.connect(url).get();
            System.out.println(doc);

        } catch (IOException e) {
            System.out.println("An IOException occurred. Please try again.");
        }
    }
}

Вихід:

Як бачите, повертається HTML сторінки, і це те, що ми друкуємо. Під час сканування URL-адреса, яку ви вказуєте, може містити помилку, а ресурс, який ви намагаєтеся отримати, може взагалі не існувати. Ось чому важливо загорнути наш код у оператор try-catch.

Лінія:

Document doc = Jsoup.connect(url).get();

Використовується для підключення до URL-адреси, яку потрібно отримати. Метод get() використовується для виконання запиту GET і отримання HTML на сторінці. Повернений результат потім зберігається в об’єкті JSOUP Document під назвою doc. Зберігання результату в документі JSOUP дозволяє використовувати JSOUP API для маніпулювання повернутим HTML.

3. Перейти до ScrapeThisSite і перевірте сторінку. У HTML ви повинні побачити наведену нижче структуру:

  Cache Killer очищає ваш кеш щоразу перед завантаженням веб-сторінки [Chrome]

Зверніть увагу, що всі країни на сторінці зберігаються в однаковій структурі. Є div із класом під назвою country з елементом h3 із класом country-name, що містить назву кожної країни на сторінці.

Усередині головного div є ще один div з класом country-info, і він містить таку інформацію, як столиця, населення та площа країни. Ми можемо використовувати ці назви класів, щоб вибрати елементи HTML і отримати з них інформацію.

4. Витягніть певний вміст із HTML на сторінці за допомогою таких рядків:

Elements countries = doc.select(".country");         
for (Element country : countries) {
   String countryName = country.select(".country-name").text();
   String capitalCity = country.select(".country-capital").text();
   String population = country.select(".country-population").text();
   System.out.println(countryName + " - " + capitalCity + " Population - " + population);
}

Ми використовуємо метод select(), щоб вибрати елементи з HTML сторінки, які відповідають певному селектору CSS, який ми передаємо. У нашому випадку ми передаємо імена класів. Перевіривши сторінку, ми побачили, що вся інформація про країну на сторінці зберігається в div з класом країни.

Кожна країна має власний div із класом країни, і div містить таку інформацію, як назва країни, столиця та населення.

Тому ми спочатку вибираємо всі країни на сторінці за допомогою класу .country. Потім ми зберігаємо це в змінній під назвою “страни” типу Elements, яка працює як список. Потім ми використовуємо цикл for, щоб пройти через країни та витягнути назву країни, столицю та населення та роздрукувати знайдене.

Усю нашу кодову базу показано нижче:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.jsoup.nodes.Element;

import java.io.IOException;

public class WebScraper {
    public static void main(String[] args) {
        String url = "https://www.scrapethissite.com/pages/simple/";
        try {
            Document doc = Jsoup.connect(url).get();

            Elements countries = doc.select(".country");
            
            for (Element country : countries) {
                String countryName = country.select(".country-name").text();
                String capitalCity = country.select(".country-capital").text();
                String population = country.select(".country-population").text();
                System.out.println(countryName + " - " + capitalCity + " - Population - " + population);
            }

        } catch (IOException e) {
            System.out.println("An IOException occurred. Please try again.");
        }
    }
}

Вихід:

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

Висновок

Веб-скопіювання – це чудовий спосіб витягувати неструктуровані дані з веб-сайтів, зберігати дані в структурованому вигляді та обробляти дані для отримання значущої інформації. Однак важливо бути обережним під час сканування веб-сторінок, оскільки деякі веб-сайти не дозволяють копіювання веб-сторінок.

Щоб бути в безпеці, використовуйте веб-сайти, які надають пісочниці, щоб практикувати злам. В іншому випадку завжди перевіряйте файл robots.txt кожного веб-сайту, який ви хочете скраппіювати, щоб з’ясувати, чи веб-сайт дозволяє копіювання.

під час написання веб-скраппера Java є чудовою мовою, оскільки вона надає бібліотеки, які роблять веб-скрапінг простішим і ефективнішим. Як розробник Java, створення веб-скребка допоможе вам ще більше розвинути свої навички програмування. Тож напишіть свій власний веб-скраппер або змініть той, що використовується в статті, щоб отримувати різну інформацію. Щасливого кодування!

Ви також можете ознайомитися з деякими популярними хмарними рішеннями для копіювання веб-сторінок.