Wklej publiczny profil lub post. Web Unlocker zwróci stronę X bez logowania: obserwujących, bio i 5 najnowszych postów profilu, a dla każdego posta dokładne polubienia, reposty, odpowiedzi i wyświetlenia. $0.98 za 1000 stron.
1000 darmowych żądań · Płatność tylko za sukces · 195+ krajów · Gotowe dla Claude
Strony X ładują się zwykle od 2 do 10 sekund. Nadal pracuję, nie musisz klikać ponownie.
Gotowy na własne konta? Pobierz klucz API albo umów demo.
Opowiedz nam trochę o swoim zespole i otrzymasz:
Publiczne strony, bez logowania, bez konta na X i bez klucza X API. Zespoły social listeningu, agencje, marki i agenci AI czytają te dwa rodzaje stron, każdą rozliczaną jako jedna strona.





Chcesz spróbować sam? Odbierz klucz API z 1000 darmowych żądań.
Web Unlocker rozlicza stronę posta raz, z dokładnymi odpowiedziami, repostami, polubieniami i wyświetleniami, po $0.98 za 1000 stron. Twitter scraper na Apify rozlicza $0.05 za każdy pojedynczy link do posta, a Bright Data $1.50 za 1000 rekordów.
X API rozlicza $5.00 za 1000 postów.
Tutaj 1000 kosztuje $0.98.
Żądanie, na które usługa nie może odpowiedzieć, nic nie kosztuje. W naszym teście 6 z 50 pierwszych prób wróciło z szybką odmową, a ponowna prośba przyniosła stronę.
Ile kosztuje 1000 postów z X
1000 publicznych postów z polubieniami, repostami, odpowiedziami i wyświetleniami, według opublikowanych cen
Gologin: $0.98 za 1000 stron, jedna strona na post. Bright Data rozlicza każdy rekord, $1.50 za 1000. X API rozlicza $0.005 za odczyt posta. Twitter Scraper Lite na Apify rozlicza $0.05 za pojedynczy link do posta plus $0.0004 za post.
Chcesz uruchomić to na własnych postach? Odbierz klucz API i darmowe żądania.
Nasz test scrapowania Twittera: 20 profili marek i twórców, po jednym świeżym poście z każdego i 10 mniejszych kont, każda strona z maksymalnie trzema próbami, tak jak robi to demo powyżej. Oto, co wróciło i jak szybko.
44 z 50 wróciło za pierwszym razem.
Pozostałe 6 za drugim lub trzecim.
Oficjalne X API, scrapery Twittera od Apify i X Scraper API od Bright Data: ile każde z nich pobiera za te same 1000 postów i profili i czego wymaga od Ciebie, zanim zaczniesz.
| Czego to wymaga | ||||
|---|---|---|---|---|
| Płacisz za | Stronę | Każdy post lub profil | Każde zapytanie i post | Każdy rekord |
| 1000 postów z linków | $0.98 | $5.00 | $50.40 | $1.50 |
| 1000 profili | $0.98 | $10.00 | $4.40 | $1.50 |
| Konto deweloperskie | Niepotrzebne | Potrzebne | Niepotrzebne | Niepotrzebne |
| Powtórne sprawdzenia konta | Tak | Tak | Ograniczone | Tak |
| Wyszukiwanie po słowie kluczowym | Nie | Tak | Tak | Tak |
| Dokładna liczba obserwujących | Zaokrąglona | Tak | Tak | Tak |
| Darmowy start | 1000 żądań | Nie | $5 miesięcznie | 5000 miesięcznie |
| Ta sama cena na każdej innej witrynie | Tak | Nie | Nie | Nie |
Scrapujesz nie tylko X? Web Unlocker zwraca każdą stronę w ten sam sposób, w tej samej cenie.
Strona profilu przynosi 5 najnowszych postów konta z dokładnymi polubieniami, repostami, odpowiedziami i wyświetleniami. 100 kont daje 500 świeżych postów za $0.098, tak często, jak sprawdzasz. Główny Twitter scraper od Apify prosi, by nie powtarzać zapytania.
X API rozlicza $5 za 1000 postów.
Tutaj 1000 przychodzi z 200 profili za $0.20.
X wysyła niezalogowanemu użytkownikowi dane w HTML strony, z dokładnymi liczbami pod każdym postem. Web Unlocker zwraca ten HTML, a kilka linii kodu go odczytuje. Zakładka Lista kont to mały crawler Twittera: konta na wejściu, najnowsze posty w CSV na wyjściu.
Wypełnij formularz powyżej. Klucz przychodzi e-mailem w ciągu jednego dnia roboczego.
Profil dla obserwujących i 5 najnowszych postów, post dla dokładnych polubień, repostów, odpowiedzi i wyświetleń.
Sprawdź, czy strona przyszła z danymi, i poproś o nią ponownie, gdy usługa wysłała szybką odmowę.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python x_profile.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport html
import json
import os
import re
import time
from datetime import datetime, timezone
import requests
username = "NASA"
def scrape(url):
for attempt in range(3):
address = url if attempt == 0 else f"{url}?fresh={int(time.time())}"
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
params={"url": address, "geo": "us", "format": "json"},
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
timeout=90,
)
page = response.json().get("data", {}).get("html", "") if response.ok else ""
if 'role="group"' in page:
return page
time.sleep(3)
raise RuntimeError("The page came back without data, try again later")
def meta(page, name):
found = re.search(rf'<meta (?:property|name)="{name}" content="([^"]*)"', page)
return html.unescape(found.group(1)) if found else None
def count(page, word):
found = re.search(rf">([\d.,]+[KMB]?)</span>\s*<span[^>]*>{word}<", page)
return found.group(1) if found else None
def text_of(chunk):
start = chunk.find('aria-label="More"')
if start < 0:
return ""
start = chunk.find("</button>", start) + len("</button>")
ends = [chunk.find(mark, start) for mark in ('inert=""', "data-press-control", "<video", 'role="group"', "<article")]
end = min([chunk.rfind("<", 0, at) for at in ends if at > 0] or [len(chunk)])
words = re.sub(r"<script.*?</script>|<[^>]+>", "", chunk[start:end], flags=re.S)
return html.unescape(words).strip()
page = scrape(f"https://x.com/{username}")
posts = []
start = 0
for match in re.finditer(r'aria-label="([^"]*)"[^>]*role="group"', page):
chunk = page[start : match.start()]
start = match.end()
link = re.search(r'href="/(\w+)/status/(\d+)', chunk)
stamp = re.search(r'"timestamp":(\d+)', chunk)
counts = {word.rstrip("s").replace("replie", "reply"): int(value) for value, word in re.findall(r"(\d+) (\w+)", match.group(1))}
posts.append(
{
"url": f"https://x.com/{link.group(1)}/status/{link.group(2)}",
"time": datetime.fromtimestamp(int(stamp.group(1)) / 1000, timezone.utc).isoformat() if stamp else None,
"pinned": ">Pinned</span>" in chunk[: chunk.find("data-post-avatar")],
"text": text_of(chunk),
"replies": counts.get("reply", 0),
"reposts": counts.get("repost", 0),
"likes": counts.get("like", 0),
"bookmarks": counts.get("bookmark", 0),
"views": counts.get("view"),
}
)
profile = {
"username": meta(page, "profile:username"),
"name": meta(page, "author"),
"bio": meta(page, "description"),
"followers": count(page, "Followers"),
"following": count(page, "Following"),
"posts": meta(page, "twitter:data1"),
"joined": meta(page, "twitter:data2"),
"latest_posts": posts,
}
print(json.dumps(profile, indent=2, ensure_ascii=False))
print(f"@{username}: {profile['followers']} followers, {len(posts)} latest posts with exact counts from one page")GOLOGIN_SCRAPING_API_KEY=your_key node x-posts.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const links = [
'https://x.com/NASA/status/2120305504295510080',
'https://x.com/SpaceX/status/2120808224324510133',
'https://x.com/Spotify/status/2120607242374504556',
];
async function scrape(url) {
for (let attempt = 1; attempt <= 3; attempt++) {
const address = attempt === 1 ? url : `${url}?fresh=${Date.now()}`;
const params = new URLSearchParams({ url: address, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes('role="group"')) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
throw new Error(`${url} came back without data, try again later`);
}
const meta = (page, name) => page.match(new RegExp(`<meta (?:property|name)="${name}" content="([^"]*)"`))?.[1] ?? '';
const count = (label, word) => Number(label.match(new RegExp(`(\\d+) ${word}`))?.[1] ?? 0);
const posts = [];
for (const url of links) {
const page = await scrape(url);
const label = page.match(/aria-label="([^"]*)"[^>]*role="group"/)[1];
posts.push({
url,
author: meta(page, 'og:title').replace(/ on X$/, ''),
date: meta(page, 'article:published_time').slice(0, 10),
replies: count(label, 'repl'),
reposts: count(label, 'repost'),
likes: count(label, 'like'),
bookmarks: count(label, 'bookmark'),
views: count(label, 'view'),
});
}
writeFileSync('posts.csv', ['url,author,date,replies,reposts,likes,bookmarks,views', ...posts.map((post) => Object.values(post).map((value) => JSON.stringify(value)).join(','))].join('\n'));
console.table(posts);
console.log(`${posts.length} posts in ${posts.length} pages: $${(posts.length * 0.00098).toFixed(4)} on the Growth plan`);GOLOGIN_SCRAPING_API_KEY=your_key node x-accounts.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const accounts = ['NASA', 'NatGeo', 'SpaceX', 'Spotify', 'YouTube'];
async function scrape(url) {
for (let attempt = 1; attempt <= 3; attempt++) {
const address = attempt === 1 ? url : `${url}?fresh=${Date.now()}`;
const params = new URLSearchParams({ url: address, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes('role="group"')) return page;
await new Promise((resolve) => setTimeout(resolve, 3000));
}
return '';
}
const count = (label, word) => Number(label.match(new RegExp(`(\\d+) ${word}`))?.[1] ?? 0);
const rows = [];
for (const account of accounts) {
const page = await scrape(`https://x.com/${account}`);
const followers = page.match(/>([\d.,]+[KMB]?)<\/span>\s*<span[^>]*>Followers</)?.[1] ?? '';
let start = 0;
for (const group of page.matchAll(/aria-label="([^"]*)"[^>]*role="group"/g)) {
const chunk = page.slice(start, group.index);
start = group.index + group[0].length;
const [, author, id] = chunk.match(/href="\/(\w+)\/status\/(\d+)/) ?? [];
const time = chunk.match(/"timestamp":(\d+)/)?.[1];
rows.push({
account,
followers,
post: `https://x.com/${author}/status/${id}`,
date: time ? new Date(Number(time)).toISOString().slice(0, 10) : '',
replies: count(group[1], 'repl'),
reposts: count(group[1], 'repost'),
likes: count(group[1], 'like'),
views: count(group[1], 'view'),
});
}
}
writeFileSync('latest-posts.csv', ['account,followers,post,date,replies,reposts,likes,views', ...rows.map((row) => Object.values(row).map((value) => JSON.stringify(value)).join(','))].join('\n'));
console.table(rows);
console.log(`${rows.length} posts from ${accounts.length} accounts in ${accounts.length} pages: $${(accounts.length * 0.00098).toFixed(4)} on the Growth plan`);Chcesz uruchomić to na własnych kontach? Odbierz klucz API i darmowe żądania.
Jedno konto, jedna sieć proxy, jeden ekosystem. Wybierz produkt, którego wymaga zadanie.
Scrapujesz więcej witryn? Zobacz scrapery Instagram, Reddit i YouTube albo wszystkie narzędzia do web scrapingu.
Twitter scraper, nazywany dziś także X scraperem, to narzędzie, które czyta publiczne strony X (dawniej Twitter) i zamienia je w dane: nazwę, bio, obserwujących i najnowsze posty profilu oraz tekst, czas, odpowiedzi, reposty, polubienia i wyświetlenia posta. Gologin Web Unlocker to Twitter scraper API: wyślij mu adres strony, a zwróci stronę z tymi danymi, po $0.98 za 1000 stron.
Tak, bez logowania. X pokazuje publiczne profile i posty niezalogowanym użytkownikom, z danymi w samej stronie. Web Unlocker otwiera je jako niezalogowany użytkownik z adresu w USA, więc nie potrzebujesz konta na X, cookies ani klucza X API: w naszym teście 50 z 50 stron wróciło z danymi.
Wyślij adres profilu lub posta do Web Unlocker biblioteką requests i odczytaj liczby ze strony. Zakładka Python powyżej to kompletny Twitter scraper w Pythonie, przetestowany na działającym API: wypisuje obserwujących profilu i jego 5 najnowszych postów z dokładnymi polubieniami, repostami, odpowiedziami i wyświetleniami.
Tak. Oficjalne X API to jeden sposób czytania postów, publiczna strona to drugi. Web Unlocker czyta stronę, więc pomijasz konto deweloperskie, rachunek za X API i jego miesięczny limit 3 mln odczytów postów.
Nie do czytania postów na dużą skalę. X API rozlicza teraz za użycie: $0.005 za odczyt posta i $0.010 za profil, do 3 mln odczytów postów miesięcznie. Web Unlocker zawiera 1000 darmowych żądań, czyli wystarczająco na 1000 postów lub profili.
Cennik Twitter API to dziś cennik X API, rozliczany za użycie: $5.00 za 1000 postów i $10.00 za 1000 profili. Web Unlocker rozlicza $0.98 za 1000 stron w obu przypadkach, a strona profilu zawiera już 5 najnowszych postów konta: 1000 postów z 200 profili kosztuje $0.20.
$980, jeśli czytasz każdy post z jego własnego linku, po $0.98 za 1000 stron. Ze stron profili 1 milion postów to 200 000 stron po 5 postów: $196. X API rozlicza $5000 za ten sam milion postów.
Tak. Każde żądanie ładuje aktualną stronę, więc liczby są takie, jakie X pokazuje w tej chwili: w naszym teście ten sam post NASA miał 4337 polubień, a dwadzieścia minut później 4341.
Nie z Web Unlocker. X otwiera strony wyszukiwania i hashtagów dopiero po zalogowaniu, więc niezalogowane żądanie trafia na stronę rejestracji. Zacznij od kont i postów, które śledzisz: ich strony są publiczne, a przykład Lista kont powyżej sprawdza całą ich listę.
Częściowo. Strona posta przynosi jego 3 lub 4 najlepsze odpowiedzi, każdą z autorem, tekstem i dokładnymi polubieniami, repostami i wyświetleniami. Pełna lista odpowiedzi otwiera się dopiero po zalogowaniu.
Nie jako listę: to, kto obserwuje konto, widać tylko po zalogowaniu. Liczba obserwujących jest publiczna i przychodzi z każdym profilem, zaokrąglona tak, jak X pokazuje ją niezalogowanym użytkownikom (92.2M, 28M): strona nie zawiera dokładnej liczby. Liczby każdego posta przychodzą dokładne.
5 najnowszych, tak jak X pokazuje je niezalogowanemu użytkownikowi, każdy z dokładnymi odpowiedziami, repostami, polubieniami, zakładkami i wyświetleniami. Przypięty post jest pierwszy i oznaczony jako przypięty. Dla starszych postów użyj ich linków: każda strona posta to jedno żądanie.
To zależy od zadania. Scrapery Apify wyszukują po słowie kluczowym i rozliczają każdy post. X API czyta wszystko, po $5 za 1000 postów. Web Unlocker zwraca publiczną stronę profilu lub posta z dokładnymi liczbami w jednej cenie za stronę, na X i na każdej innej witrynie.
Tak. Główny Twitter scraper od Apify przyjmuje tylko wyszukiwania, co najmniej 50 postów na zapytanie, i prosi, by nie powtarzać tego samego zapytania; pojedyncze posty idą przez jego wersję Lite za $0.05 za link. Web Unlocker przyjmuje każdy link do profilu lub posta po $0.98 za 1000 stron, tak często, jak potrzebujesz.
Profile i posty, które ładują się bez logowania, to publiczne strony. W sprawie X Corp. v. Bright Data, w maju 2024, amerykański sędzia federalny oddalił pozew X dotyczący scrapowania publicznych danych. To, co zbierasz i jak tego używasz, zależy od Ciebie, więc sprawdź to z zasadami obowiązującymi w Twoim projekcie.
Tak. Agent wysyła adres profilu lub posta do tego samego API i odczytuje liczby ze strony. Z MCP & AI Skills Claude buduje to narzędzie na podstawie opisu zadania.
Opowiedz nam trochę o swoim zespole i otrzymasz: