Dán một profile hoặc bài đăng công khai. Web Unlocker trả về trang X mà không cần đăng nhập: số người theo dõi, tiểu sử và 5 bài đăng mới nhất của một profile, mỗi bài đăng kèm lượt thích, lượt đăng lại, lượt trả lời và lượt xem chính xác. $0.98 cho 1.000 trang.
1.000 yêu cầu miễn phí · Chỉ tính phí khi thành công · 195+ quốc gia · Sẵn sàng cho Claude
Trang X thường mất 2 đến 10 giây để tải. Hệ thống vẫn đang xử lý, bạn không cần nhấp lại.
Sẵn sàng cho các tài khoản của riêng bạn? Nhận API key hoặc đặt lịch demo.
Hãy cho chúng tôi biết đôi nét về đội ngũ của bạn để nhận:
Các trang công khai, không cần đăng nhập, không cần tài khoản X và không cần X API key. Các đội social listening, agency, thương hiệu và AI agent đọc hai loại trang này, mỗi loại đều được tính như một trang.





Muốn tự mình thử? Nhận API key với 1.000 yêu cầu miễn phí.
Web Unlocker tính phí một trang bài đăng một lần, kèm lượt trả lời, lượt đăng lại, lượt thích và lượt xem chính xác, với $0.98 cho 1.000 trang. Một Twitter scraper trên Apify tính $0.05 cho mỗi liên kết bài đăng đơn lẻ, còn Bright Data tính $1.50 cho 1.000 bản ghi.
X API tính $5.00 cho 1.000 bài đăng.
Ở đây 1.000 bài đăng có giá $0.98.
Yêu cầu mà dịch vụ không trả lời được thì không tốn phí. Trong bài kiểm tra của chúng tôi, 6 trên 50 lần thử đầu tiên nhận về một lời từ chối nhanh, và yêu cầu lại thì trang được trả về.
Chi phí cho 1.000 bài đăng X
1.000 bài đăng công khai kèm lượt thích, lượt đăng lại, lượt trả lời và lượt xem, theo giá công bố
Gologin: $0.98 cho 1.000 trang, mỗi bài đăng một trang. Bright Data tính phí mỗi bản ghi, $1.50 cho 1.000. X API tính $0.005 cho mỗi bài đăng được đọc. Twitter Scraper Lite trên Apify tính $0.05 cho mỗi liên kết bài đăng đơn lẻ, cộng $0.0004 cho mỗi bài đăng.
Sẵn sàng chạy nó trên các bài đăng của riêng bạn? Nhận API key và các yêu cầu miễn phí.
Bài kiểm tra thu thập dữ liệu Twitter của chúng tôi: 20 profile thương hiệu và nhà sáng tạo, mỗi profile một bài đăng mới, cùng 10 tài khoản nhỏ hơn, mỗi trang được yêu cầu tối đa ba lần, giống cách bản demo ở trên làm. Đây là những gì trả về, và nhanh đến đâu.
44 trên 50 trả về ngay lần đầu.
6 trang còn lại ở lần thứ hai hoặc thứ ba.
X API chính thức, các Twitter scraper trên Apify và X Scraper API của Bright Data: mỗi bên tính phí bao nhiêu cho cùng 1.000 bài đăng và profile, và đòi hỏi gì ở bạn trước khi bắt đầu.
| Bạn cần gì | ||||
|---|---|---|---|---|
| Bạn trả tiền cho | Một trang | Mỗi bài đăng hoặc profile | Mỗi truy vấn và bài đăng | Mỗi bản ghi |
| 1.000 bài đăng theo liên kết | $0.98 | $5.00 | $50.40 | $1.50 |
| 1.000 profile | $0.98 | $10.00 | $4.40 | $1.50 |
| Tài khoản nhà phát triển | Không cần | Cần | Không cần | Không cần |
| Kiểm tra lặp lại một tài khoản | Có | Có | Có hạn chế | Có |
| Tìm kiếm theo từ khóa | Không | Có | Có | Có |
| Số người theo dõi chính xác | Làm tròn | Có | Có | Có |
| Miễn phí để bắt đầu | 1.000 yêu cầu | Không | $5 mỗi tháng | 5.000 mỗi tháng |
| Cùng giá trên mọi trang web khác | Có | Không | Không | Không |
Cần thu thập nhiều hơn X? Web Unlocker trả về bất kỳ trang nào theo cùng cách, với cùng mức giá.
Một trang profile mang về 5 bài đăng mới nhất của một tài khoản kèm lượt thích, lượt đăng lại, lượt trả lời và lượt xem chính xác. 100 tài khoản cho bạn 500 bài đăng mới với $0.098, kiểm tra bao nhiêu lần tùy bạn. Twitter scraper chính của Apify yêu cầu bạn không lặp lại một truy vấn.
X API tính $5 cho 1.000 bài đăng.
Ở đây 1.000 bài đăng đến từ 200 profile với $0.20.
X gửi cho khách truy cập chưa đăng nhập dữ liệu nằm trong HTML của trang, kèm số liệu chính xác dưới mỗi bài đăng. Web Unlocker trả về HTML đó, và vài dòng code sẽ đọc nó. Tab Danh sách tài khoản là một Twitter crawler nhỏ: đưa vào các tài khoản, nhận ra các bài đăng mới nhất trong một file CSV.
Điền biểu mẫu ở trên. Key sẽ được gửi qua email trong vòng một ngày làm việc.
Một profile để lấy số người theo dõi và 5 bài đăng mới nhất, một bài đăng để lấy lượt thích, lượt đăng lại, lượt trả lời và lượt xem chính xác.
Kiểm tra xem trang có kèm dữ liệu không, và yêu cầu lại khi dịch vụ gửi về một lời từ chối nhanh.
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`);Sẵn sàng chạy nó trên các tài khoản của riêng bạn? Nhận API key và các yêu cầu miễn phí.
Một tài khoản, một mạng proxy, một hệ sinh thái. Chọn sản phẩm phù hợp với công việc.
Thu thập thêm nhiều trang web khác? Xem các scraper Instagram, Reddit và YouTube, hoặc mọi công cụ thu thập dữ liệu web.
Twitter scraper, nay còn được gọi là X scraper, là công cụ đọc các trang X (trước đây là Twitter) công khai và chuyển chúng thành dữ liệu: tên, tiểu sử, số người theo dõi và các bài đăng mới nhất của một profile, nội dung, thời gian, lượt trả lời, lượt đăng lại, lượt thích và lượt xem của một bài đăng. Gologin Web Unlocker là một Twitter scraper API: gửi cho nó địa chỉ một trang và nó trả về trang kèm dữ liệu đó, với $0.98 cho 1.000 trang.
Có, không cần đăng nhập. X hiển thị profile và bài đăng công khai cho khách truy cập chưa đăng nhập, với dữ liệu nằm ngay trong trang. Web Unlocker mở chúng như một khách truy cập chưa đăng nhập từ một địa chỉ IP tại Mỹ, nên bạn không cần tài khoản X, không cần cookie và không cần X API key: trong bài kiểm tra của chúng tôi, 50 trên 50 trang trả về kèm dữ liệu.
Gửi địa chỉ profile hoặc bài đăng tới Web Unlocker bằng thư viện requests và đọc số liệu từ trang. Tab Python ở trên là một Twitter scraper Python hoàn chỉnh, đã được kiểm thử trên API thật: nó in ra số người theo dõi của một profile và 5 bài đăng mới nhất kèm lượt thích, lượt đăng lại, lượt trả lời và lượt xem chính xác.
Có. X API chính thức là một cách để đọc bài đăng, trang công khai là một cách khác. Web Unlocker đọc trang, nên bạn không cần tài khoản nhà phát triển, không phải trả hóa đơn X API và không vướng mức trần 3 triệu lượt đọc bài đăng mỗi tháng của nó.
Không, nếu bạn đọc bài đăng ở quy mô lớn. X API nay tính phí theo mức sử dụng: $0.005 cho mỗi bài đăng được đọc và $0.010 cho mỗi profile, tối đa 3 triệu lượt đọc bài đăng mỗi tháng. Web Unlocker đi kèm 1.000 yêu cầu miễn phí, đủ cho 1.000 bài đăng hoặc profile.
Giá Twitter API nay là giá X API, tính phí theo mức sử dụng: $5.00 cho 1.000 bài đăng và $10.00 cho 1.000 profile. Web Unlocker tính $0.98 cho 1.000 trang trong cả hai trường hợp, và một trang profile đã kèm 5 bài đăng mới nhất của tài khoản: 1.000 bài đăng từ 200 profile có giá $0.20.
$980 nếu bạn đọc mỗi bài đăng từ liên kết riêng của nó, với $0.98 cho 1.000 trang. Đọc chúng từ trang profile thì 1 triệu bài đăng cần 200.000 trang, mỗi trang 5 bài đăng: $196. X API tính $5,000 cho cùng một triệu bài đăng đó.
Có. Mỗi yêu cầu tải trang trực tiếp, nên số liệu là những con số X hiển thị tại thời điểm đó: trong bài kiểm tra của chúng tôi, cùng một bài đăng của NASA có 4.337 lượt thích, và 4.341 lượt sau hai mươi phút.
Web Unlocker thì không. X chỉ mở trang tìm kiếm và hashtag sau khi đăng nhập, nên một yêu cầu chưa đăng nhập sẽ dừng ở trang đăng ký. Hãy bắt đầu từ các tài khoản và bài đăng bạn theo dõi: trang của chúng là công khai, và mẫu Danh sách tài khoản ở trên kiểm tra cả một danh sách như vậy.
Một phần. Một trang bài đăng mang về 3 hoặc 4 trả lời hàng đầu, mỗi trả lời kèm tác giả, nội dung và lượt thích, lượt đăng lại và lượt xem chính xác. Toàn bộ danh sách trả lời chỉ mở sau khi đăng nhập.
Không phải dưới dạng danh sách: ai theo dõi một tài khoản chỉ hiển thị sau khi đăng nhập. Số người theo dõi là công khai và đi kèm mọi profile, được làm tròn theo cách X hiển thị cho khách truy cập chưa đăng nhập (92.2M, 28M): trang không có con số chính xác. Số liệu của mọi bài đăng đều chính xác.
5 bài mới nhất, theo cách X hiển thị cho khách truy cập chưa đăng nhập, mỗi bài kèm lượt trả lời, lượt đăng lại, lượt thích, dấu trang và lượt xem chính xác. Bài đăng được ghim đứng đầu và được đánh dấu là đã ghim. Với các bài đăng cũ hơn, hãy dùng liên kết của chúng: mỗi trang bài đăng là một yêu cầu.
Tùy vào nhu cầu của bạn. Các scraper của Apify tìm kiếm theo từ khóa và tính phí mỗi bài đăng. X API đọc được mọi thứ, với $5 cho 1.000 bài đăng. Web Unlocker trả về trang profile hoặc bài đăng công khai kèm số liệu chính xác với một mức giá cho mỗi trang, trên X và trên mọi trang web khác.
Có. Twitter scraper chính của Apify chỉ nhận lượt tìm kiếm, ít nhất 50 bài đăng mỗi truy vấn, và yêu cầu bạn không lặp lại cùng một truy vấn; bài đăng đơn lẻ đi qua phiên bản Lite của nó với $0.05 mỗi liên kết. Web Unlocker nhận bất kỳ liên kết profile hoặc bài đăng nào với $0.98 cho 1.000 trang, thường xuyên tùy bạn cần.
Profile và bài đăng tải được mà không cần đăng nhập là các trang công khai. Trong vụ X Corp. v. Bright Data, vào tháng 5 năm 2024, một thẩm phán liên bang Mỹ đã bác đơn kiện của X về việc thu thập dữ liệu công khai. Bạn thu thập gì và dùng ra sao là quyết định của bạn, vì vậy hãy đối chiếu với các quy định áp dụng cho dự án của bạn.
Có. Agent gửi địa chỉ profile hoặc bài đăng tới cùng API đó và đọc số liệu từ trang. Với MCP & AI Skills, Claude xây dựng công cụ đó từ mô tả công việc.
Hãy cho chúng tôi biết đôi nét về đội ngũ của bạn để nhận: