Web scraping, czyli wydobywanie danych ze stron internetowych, to proces pobierania wartościowych informacji z zasobów sieci World Wide Web. Podczas korzystania z wyszukiwarki Google, specjalny program indeksujący, zwany botem, analizuje ogromną ilość treści w Internecie, wybierając te dane, które są najbardziej istotne dla użytkownika.
Założenie, że informacja powinna być dostępna dla każdego, legło u podstaw rozwoju internetu. Jednak dane, które są przeszukiwane, muszą być publicznie dostępne.
Jakie korzyści daje web scraping?
Obecnie żyjemy w erze danych. Surowe dane, dzięki procesowi web scrapingu, mogą zostać przekształcone w przydatne informacje, które można wykorzystać w wielu celach. Można ich użyć do analizy preferencji użytkowników produktów, co pozwala na ich ulepszanie i tworzenie pętli zwrotnej.
Firmy z branży e-commerce mogą korzystać z web scrapingu, aby badać strategie cenowe konkurencji i dostosowywać do nich własne działania. Ten proces może być również stosowany do generowania raportów pogodowych i zbierania wiadomości.
Wyzwania
# 1. Ograniczenia adresów IP
Niektóre strony internetowe wprowadzają limity liczby zapytań o dane, które można wysłać w określonym czasie. Wykrywają one adres IP lub geolokalizację użytkownika i blokują dostęp, aby chronić się przed złośliwymi atakami.
#2. Captcha
Systemy captcha służą do odróżnienia prawdziwego użytkownika od bota próbującego uzyskać dostęp do strony. Strony internetowe używają ich, aby zwalczać spam i kontrolować liczbę skrobaków sieciowych.
#3. Renderowanie po stronie klienta
Jest to jedno z największych wyzwań dla narzędzi do web scrapingu. Współczesne strony internetowe wykorzystują frameworki frontendowe, które umożliwiają tworzenie aplikacji jednostronicowych. Większość takich aplikacji nie ma treści renderowanej po stronie serwera. Zamiast tego, generują ją przy użyciu JavaScript po stronie klienta. To utrudnia skrobakom dostęp do zawartości strony. Aby ją uzyskać, konieczne jest wyrenderowanie JavaScript po stronie klienta.
Interfejs API newsblog.pl
Interfejs API do web scrapingu rozwiązuje wiele problemów związanych z tym procesem, ponieważ większość operacji wykonuje za nas. Przyjrzyjmy się bliżej interfejsowi API newsblog.pl i zobaczmy, jak można go wykorzystać do pobierania danych ze stron internetowych.
API newsblog.pl oferuje prosty proces składający się z trzech etapów:
- Podanie adresu URL do zeskrobania.
- Konfiguracja opcji.
- Pobranie danych.
Możemy zeskrobać wybraną stronę, a następnie otrzymać surowe dane HTML w postaci ciągu znaków lub w pliku HTML, do którego dostęp uzyskuje się za pomocą odnośnika, w zależności od preferencji.
Korzystanie z interfejsu API
W tym poradniku pokażemy, jak korzystać z API newsblog.pl, wykorzystując środowisko uruchomieniowe JavaScript – NodeJS. Zanim przejdziemy dalej, upewnij się, że masz zainstalowane NodeJS w swoim systemie.
- Uruchom polecenie
npm init -y
w terminalu w swoim folderze roboczym. Spowoduje to utworzenie pliku package.json.
- W pliku
package.json
zmień wartość klucza głównego naindex.mjs
, jeśli domyślnie jest ustawiona inna wartość. Możesz też dodać klucz o nazwie „type” i przypisać mu wartość „module”.
{ “type”: “module” }
- Dodaj zależność o nazwie „axios”, wpisując w terminalu polecenie
npm i axios
. Ta zależność jest potrzebna do wysyłania zapytań HTTP do określonych adresów.
- Twój plik
package.json
powinien wyglądać mniej więcej tak:
{ "name": "webscraping", "version": "1.0.0", "description": "", "main": "index.mjs", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "author": "Murtuzaali Surti", "license": "ISC", "dependencies": { "axios": "^1.1.3" } }
- Zaimportuj bibliotekę
axios
do plikuindex.mjs
w następujący sposób. Używamy tutaj słowa kluczowego „import”, ponieważ korzystamy z modułu ES. Gdyby to był plik CommonJS, użylibyśmy słowa kluczowego „require”.
import axios from ‘axios’
- Bazowy adres URL dla wszystkich zapytań do API newsblog.pl będzie taki sam dla każdego endpointu. Możemy go zapisać jako stałą.
const baseUrl="https://api.newsblog.pl.com"
- Ustal adres URL strony, z której chcesz pobrać dane.
let toScrapeURL = "https://developer.mozilla.org/en-US/"
- Stwórz funkcję asynchroniczną i zainicjuj w niej bibliotekę axios.
async function getData() { const res = await axios({}) return res }
- W konfiguracji axios ustaw metodę na „post”, w adresie URL określ endpoint, dodaj nagłówek „x-api-key” z wartością klucza API dostarczonego przez newsblog.pl oraz obiekt „data” do wysłania. Klucz API uzyskasz na stronie dash.newsblog.pl.com.
const res = await axios({ method: "post", url: `${baseUrl}/webscraping`, headers: { "x-api-key": "your api key" }, data: { url: toScrapeURL, output: 'file', device: 'desktop', renderJS: true } })
- Obiekt „data” ma następujące właściwości:
- url: adres URL strony do zeskrobania.
- output: format danych – ciąg znaków lub plik HTML. Domyślną wartością jest ciąg znaków.
- device: rodzaj urządzenia, na którym ma być wyświetlona strona. Dostępne opcje to: „desktop”, „mobile” i „tablet”. Domyślną wartością jest „desktop”.
- renderJS: wartość logiczna określająca, czy JavaScript ma być wyrenderowany. Ta opcja jest szczególnie przydatna, gdy strona korzysta z renderowania po stronie klienta.
- Wywołaj funkcję asynchroniczną i odbierz dane. Możesz skorzystać z funkcji IIFE (Immediately Invoked Function Expression).
(async () => { const data = await getData() console.log(data.data) })()
- Odpowiedź powinna wyglądać podobnie do poniższej:
{ timestamp: 1669358356779, apiStatus: 'success', apiCode: 200, meta: { url: 'https://murtuzaalisurti.github.io', device: 'desktop', output: 'file', blockAds: true, renderJS: true, test: { id: 'mvan3sa30ajz5i8lu553tcckchkmqzr6' } }, data: 'https://api-assets.newsblog.pl.com/tests/web-scraping/pbn0v009vksiszv1cgz8o7tu.html' }
Parsowanie HTML
Aby przetworzyć HTML, można użyć pakietu npm o nazwie node-html-parser
i wyodrębnić z niego potrzebne dane. Na przykład, aby pobrać tytuł strony, możemy użyć następującego kodu:
import { parse } from ‘node-html-parser’ const html = parse(htmlData) // htmlData to surowy tekst HTML pobrany z API newsblog.pl.
Jeśli potrzebujemy tylko metadanych strony, możemy skorzystać z API newsblog.pl dedykowanego metadanym. Wtedy nie trzeba analizować kodu HTML.
Zalety korzystania z API newsblog.pl
W aplikacjach jednostronicowych treść jest generowana przez przeglądarkę przy użyciu JavaScript, a nie serwer. Jeśli spróbujemy pobrać dane z takiej strony bez renderowania JavaScript, otrzymamy tylko element kontenera bez zawartości. Pokażmy to na przykładzie.
Oto strona demonstracyjna stworzona za pomocą React i Vitejs. Spróbujmy ją zeskrobać za pomocą API newsblog.pl, ustawiając opcję renderJS
na wartość „false”. Co otrzymujemy?
<body> <div id="root"></div> <body>
Widzimy tylko kontener główny bez treści. W takiej sytuacji przyda się opcja renderJS
. Spróbujmy zeskrobać tę samą stronę z opcją renderJS
ustawioną na wartość „true”. Co teraz otrzymujemy?
<body> <div id="root"> <div class="App"> <div> <a href="https://vitejs.dev" target="_blank"> <img src="/vite.svg" class="logo" > </a> <a href="https://reactjs.org" target="_blank"> <img src="/assets/react.35ef61ed.svg" class="logo react" > </a> </div> <h1>Vite + React</h1> <div class="card"> <button>count is 0</button> <p>Edit <code>src/App.jsx</code> and save to test HMR</p> </div> <p class="read-the-docs">Click on the Vite and React logos to learn more</p> </div> </div> </body>
Kolejną zaletą korzystania z API newsblog.pl jest możliwość użycia obrotowego serwera proxy, który chroni przed blokowaniem adresów IP. Funkcja proxy jest dostępna w ramach planu premium API newsblog.pl.
Podsumowanie
Użycie API do web scrapingu pozwala skupić się na pozyskiwaniu danych, bez konieczności mierzenia się z technicznymi aspektami tego procesu. Ponadto API newsblog.pl oferuje dodatkowe funkcje, takie jak sprawdzanie poprawności odnośników, wyciąganie metadanych, statystyki dotyczące obciążenia serwera, generowanie zrzutów ekranu i wiele innych, a wszystko to w ramach jednego API. Więcej informacji na ten temat znajdziesz w oficjalnej dokumentacji interfejsu API newsblog.pl.
newsblog.pl