Test
10 000 stron
3,75 USD
0,38 USD/1K stron
- Wypróbuj na swoich prawdziwych URL-ach
- To samo API co w największym pakiecie
- Kredyty nigdy nie wygasają
Przypadek użycia · monitoring · /batch
Porównywanie surowego HTML wywołuje alert za każdym razem, gdy zmieni się reklama lub token. Porównywanie głównej treści jako Markdown sygnalizuje tylko to, co zauważyłby czytelnik: nową cenę, przeformułowaną klauzulę, nowy wpis w changelogu.
Szybka odpowiedź
Jak mogę monitorować strony internetowe pod kątem zmian treści?
Czytaj każdą stronę według harmonogramu jako Markdown jej głównej treści, zapisuj tekst i porównuj go z poprzednią wersją; wysyłaj alert tylko wtedy, gdy tekst się zmieni. WebReaderAPI czyta do 100 URL-i na zadanie batch, usuwa reklamy i menu, żeby nie wywoływały fałszywych alarmów, i pobiera jeden kredyt za stronę od 0,07 USD/1K stron według stanu na październik 2026. Bez KYC; płatność kryptowalutą.
| Endpoint | POST https://webreaderapi.com/api/v1/batch, potem GET https://webreaderapi.com/api/v1/jobs/{job_id} |
|---|---|
| Rozmiar batcha | Do 100 URL-i na jedno zadanie wsadowe |
| Co jest porównywane | Markdown głównej treści, bez reklam, menu i bannerów |
| Rozliczanie | 1 kredyt = 1 odczytana strona bez przeglądarki; 2 kredyty, gdy strona wymaga przeglądarki do wyrenderowania JavaScript. Zapytanie, które się nie powiedzie lub które zostanie odrzucone przez robots.txt witryny, nie jest obciążane opłatą |
| Przykładowy wolumen | 200 stron sprawdzanych dziennie = około 6000 stron miesięcznie |
| Cena | 3,75 USD za 10 000 stron; kredyty nigdy nie wygasają |
Strony, których treść ma znaczenie dla Twojego biznesu i które zmieniają się bez zapowiedzi:
Trzymaj się listy publicznych stron. Profile osobiste i strony za loginem są poza zakresem.
Ponieważ HTML zmienia się cały czas, choć treść się nie zmienia. Rotujące reklamy, tokeny sesji, znaczniki czasu w stopkach i znaczniki testów A/B sprawiają, że dwa wczytania tej samej strony się różnią. Diff na HTML zamienia ten szum w alerty, a ludzie przestają je czytać.
Markdown głównej treści usuwa większość szumu przed porównaniem. Zostaje tekst, który czyta człowiek: nagłówki, akapity, listy i tabele. Diff na tym tekście jest krótki, czytelny i wart alertu.
import difflib
import json
import os
import pathlib
import time
import requests
API = "https://webreaderapi.com/api/v1"
HEADERS = {"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]}
STORE = pathlib.Path("snapshots.json")
URLS = [
"https://example.com/pricing",
"https://example.com/legal/terms",
"https://example.com/changelog",
]
old = json.loads(STORE.read_text(encoding="utf-8")) if STORE.exists() else {}
job = requests.post(API + "/batch", headers=HEADERS, json={"urls": URLS}, timeout=60).json()
results, cursor, delay = [], None, 5
while True:
params = {"cursor": cursor} if cursor else {}
page = requests.get(API + "/jobs/" + job["job_id"], headers=HEADERS, params=params, timeout=60).json()
results += page.get("results", [])
cursor = page.get("next_cursor")
if page["status"] == "done" and not cursor:
break
if not cursor:
time.sleep(delay)
delay = min(delay * 2, 60)
new = dict(old)
for item in results:
if "markdown" not in item:
print("not read:", item["url"], item.get("error", {}).get("code"))
continue
before = old.get(item["url"], "")
if before and before != item["markdown"]:
diff = difflib.unified_diff(before.splitlines(), item["markdown"].splitlines(), lineterm="", n=0)
print("CHANGED:", item["url"])
print("\n".join(list(diff)[:40]))
new[item["url"]] = item["markdown"]
STORE.write_text(json.dumps(new, ensure_ascii=False), encoding="utf-8")
Sprawdzaj tak często, jak realistycznie zmienia się strona, i nie częściej. Codziennie pasuje do stron z cennikami i changelogów; co tydzień pasuje do polityk i dokumentacji. Strona czytana co godzinę rzadko mówi więcej niż jedno czytanie dziennie, a kosztuje 24 razy więcej.
WebReaderAPI przestrzega robots.txt dla każdej strony i respektuje Crawl-delay witryny w zadaniach crawlowania. Strony, których witryna zabrania, są pomijane i nie są naliczane, więc rygorystyczna witryna po prostu wypada z raportu. Zapytaj właściciela, jeśli potrzebujesz dostępu do strony, która odmawia robotom.
Jeden kredyt za stronę na sprawdzenie. Kilka przykładów w cenach z października 2026:
Strony wymagające przeglądarki zużywają dwa kredyty; ustaw render=false dla stron, o których wiesz, że są czystym HTML, aby utrzymać licznik na jednym.
Pomnóż strony przez liczbę sprawdzeń miesięcznie, a potem wybierz pakiet, który wystarczy na kilka miesięcy. Kredyty nigdy nie wygasają.
10 000 stron
3,75 USD
0,38 USD/1K stron
50 000 stron
14,25 USD
0,28 USD/1K stron
100 000 stron
21,75 USD
0,22 USD/1K stron
W każdym planie: Wyodrębnianie głównej treści · Renderowanie JavaScript, gdy potrzebne · Nieudane i odrzucone strony bez opłat · Kredyty nigdy nie wygasają
Nie. Odczytuje strony i zwraca Markdown; Twój skrypt porównuje wersje i wysyła alert e-mailem, na czacie lub jako zgłoszenie. Powyższy kod wypisuje zmienione linie jako punkt wyjścia.
Porównuj Markdown głównej treści, a nie HTML, i przed diffem usuń linie, o których wiesz, że zmieniają się przy każdym wczytaniu, takie jak „zaktualizowano 5 minut temu”. Większość rotujących elementów jest już usuwana przez wyodrębnianie głównej treści.
Tak. Z render=auto strony, które bez JavaScript są puste, są renderowane w przeglądarce za dwa kredyty. Strony działające bez niego pozostają na jednym.
Tak: uruchom zadanie crawlowania zamiast batcha, a potem porównuj stronę po stronie. W przypadku dużych witryn najpierw porównaj daty lastmod w sitemapie i ponownie odczytaj tylko strony, które się zmieniły.
Od 0,07 USD/1K stron · bez KYC
Uzyskaj klucz API