Cách thu thập dữ liệu Instagram: Hồ sơ, bài viết, bình luận và hơn thế nữa
Advanced Data Extraction Specialist
Tóm tắt:
- Instagram sử dụng các API JSON nội bộ của nó — vì vậy hãy gọi chúng trực tiếp. Trang hồ sơ được cung cấp thông tin bởi
web_profile_info; bài viết và bình luận đến từ điểm cuối GraphQL. Bạn lấy JSON đó từ bên trong một phiên đã được hiển thị thay vì lấy dữ liệu từ DOM. - Hai điều làm cho các cuộc gọi API hoạt động: tiêu đề
x-ig-app-idvà cookie của chính trang. Tảiinstagram.comtrước để phiên có cookie, sau đófetch()API từ bên trong trang vớicredentials: 'include'và tiêu đề app-id. - Khu vực và trình duyệt thật không phải là tùy chọn. Instagram rất nặng về danh tiếng IP và dấu vân tay; cùng một cuộc gọi bị nghẽn từ một điểm ra sẽ trả về một cách rõ ràng từ một điểm khác. Ghim
proxyCountryvà chạy trên một trình duyệt chống phát hiện. - Bạn nhận được các đối tượng có cấu trúc, không phải HTML.
web_profile_infotrả về đối tượnguserđầy đủ — người theo dõi, người theo dõi, số bài viết, xác minh, tiểu sử — chính xác như cách giao diện của Instagram tiêu thụ. - Một mẫu bao trùm hồ sơ, bài viết và bình luận. Tạo một phiên, truy cập vào điểm cuối nội bộ phù hợp, phân tích JSON. Bề mặt thay đổi; kỹ thuật không thay đổi.
- Miễn phí để bắt đầu. Tài khoản Scrapeless mới bao gồm thời gian chạy Trình duyệt Lấy dữ liệu miễn phí — đăng ký tại app.scrapeless.com.
Giới thiệu: lấy dữ liệu Instagram từ các API của chính nó
Các trang web của Instagram là những vỏ React được phục hồi từ các điểm cuối JSON nội bộ. Lấy dữ liệu DOM đã được hiển thị là cách làm khó khăn, dễ vỡ — các bộ chọn thường thay đổi và hầu hết dữ liệu thậm chí không có trong mã đánh dấu ban đầu. Cách đáng tin cậy là gọi các điểm cuối giống như giao diện gọi: web_profile_info cho một hồ sơ, truy vấn GraphQL cho một bài viết và các bình luận của nó. Chúng trả về JSON có cấu trúc rõ ràng.
Vấn đề là các điểm cuối đó chỉ trả lời một yêu cầu trông giống như đến từ ứng dụng web Instagram. Điều đó có nghĩa là ba điều: yêu cầu mang theo tiêu đề x-ig-app-id, bao gồm cookie của phiên, và phát xuất từ một IP và dấu vân tay trình duyệt mà Instagram tin tưởng. Bỏ lỡ bất kỳ điều nào và bạn sẽ nhận được một body trống hoặc một điểm kiểm tra.
Hướng dẫn này chạy trên Trình duyệt Lấy dữ liệu Scrapeless — Chromium chống phát hiện với một đầu ra dân cư — được kết nối với Puppeteer qua CDP. Bạn tải instagram.com để có một phiên thực, sau đó gọi các API nội bộ của nó từ bên trong trang. Việc trích xuất hồ sơ bên dưới đã được ghi lại trực tiếp. Chỉ dữ liệu công khai.
Những gì bạn có thể làm với nó
- Lấy một hồ sơ — người theo dõi, người theo dõi, số bài viết, xác minh, tiểu sử, liên kết bên ngoài.
- Lấy một bài viết đơn lẻ bằng shortcode với phương tiện, chú thích, và số lượng.
- Thu thập các bình luận của bài viết với tác giả, văn bản, và số lượng thích.
- Duyệt các bài viết của người dùng bằng cách phân trang điểm cuối dòng thời gian.
- Làm phong phú hồ sơ quy mô bằng cách lặp lại cuộc gọi hồ sơ trên một danh sách tài khoản.
Tại sao Trình duyệt Lấy dữ liệu Scrapeless
Trình duyệt Lấy dữ liệu Scrapeless là một trình duyệt đám mây có thể tùy chỉnh, chống phát hiện, được thiết kế cho các trình thu thập dữ liệu web và các tác nhân AI. Đối với Instagram cụ thể, nó mang lại:
- Chromium tự phát triển — một trình duyệt thực sự khởi động phiên và giữ các cookie mà các cuộc gọi API cần.
- Dấu vân tay chống phát hiện — yêu cầu đọc như ứng dụng web Instagram, vì vậy các điểm cuối nội bộ sẽ trả lời thay vì trả về một điểm kiểm tra.
- Proxy dân cư tại 195+ quốc gia — ghim đầu ra theo quốc gia; khu vực đúng là điều tạo ra phản hồi sạch.
- Thời gian sống phiên có thể cấu hình — giữ phiên sống qua nhiều cuộc gọi điểm cuối.
- Kết nối chuẩn Puppeteer — tạo một phiên với SDK, sau đó
puppeteer.connect()qua CDP; phần còn lại là Puppeteer thông thường.
Nhận khóa API của bạn trên gói miễn phí tại app.scrapeless.com.
Điều kiện tiên quyết
- Node.js 18 trở lên
- Tài khoản Scrapeless và khóa API — đăng ký tại app.scrapeless.com
- Hiểu biết cơ bản về Puppeteer và JSON
Cài đặt
bash
npm install @scrapeless-ai/sdk puppeteer-core
bash
export SCRAPELESS_API_KEY="your_api_token_here"
Bước 1 — Tạo một phiên và tải Instagram
SDK tạo phiên đám mây; Puppeteer kết nối qua CDP. Điều hướng đến instagram.com trước tiên là điều tạo ra phiên với cookie mà API nội bộ cần:
javascript
import { Scrapeless } from '@scrapeless-ai/sdk';
import puppeteer from 'puppeteer-core';
const client = new Scrapeless({ apiKey: process.env.SCRAPELESS_API_KEY });
const { browserWSEndpoint } = await client.browser.create({
proxyCountry: 'US', // ghim đầu ra — khu vực ảnh hưởng đến việc API trả lời
sessionTTL: 180,
});
const browser = await puppeteer.connect({ browserWSEndpoint });
const page = await browser.newPage();
chờ trang.goto('https://www.instagram.com/', {
chờCho: 'domcontentloaded',
thời gianChờ: 60000,
});
Nếu một cuộc gọi bị treo hoặc trả về trống, hãy chuyển đổi `proxyCountry` trước khi thay đổi bất kỳ điều gì khác — vùng là nguyên nhân phổ biến nhất.
---
## Bước 2 — Lấy thông tin hồ sơ từ `web_profile_info`
Với phiên đã được khởi động, `fetch()` điểm cuối hồ sơ từ bên trong trang. Hai yếu tố chính là tiêu đề `x-ig-app-id` và `credentials: 'include'` (để cookie của trang đi kèm):
```javascript
const user = await page.evaluate(async (username) => {
const res = await fetch(
`https://i.instagram.com/api/v1/users/web_profile_info/?username=${username}`,
{
headers: { 'x-ig-app-id': '936619743392459' }, // id ứng dụng web công khai
credentials: 'include',
},
);
const data = JSON.parse(await res.text());
return data.data.user;
}, 'nasa');
console.log({
username: user.username,
full_name: user.full_name,
verified: user.is_verified,
followers: user.edge_followed_by.count,
following: user.edge_follow.count,
posts: user.edge_owner_to_timeline_media.count,
});
// {
// username: 'nasa',
// full_name: 'NASA',
// verified: true,
// followers: 104420451,
// following: 91,
// posts: 4817
// }
Điều này trả về đối tượng user đầy đủ của Instagram nguyên văn — cùng cấu trúc mà front-end của chính nó trình bày.
Lấy mã API của bạn trên kế hoạch miễn phí: app.scrapeless.com
Bước 3 — Bài viết và bình luận từ GraphQL
Các bài viết riêng lẻ và bình luận của chúng đến từ điểm cuối GraphQL của Instagram. Hình dạng là giống nhau — fetch() từ bên trong trang — nhưng đây là một POST với shortcode của bài viết trong các biến:
javascript
const shortcode = 'C1234567abc'; // từ instagram.com/p/<shortcode>/
const post = await page.evaluate(async (shortcode) => {
const variables = JSON.stringify({ shortcode });
// doc_id xác định truy vấn GraphQL đã lưu mà ứng dụng web đang sử dụng
const body = `variables=${encodeURIComponent(variables)}&doc_id=YOUR_DOC_ID`;
const res = await fetch('https://www.instagram.com/graphql/query', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body,
credentials: 'include',
});
return JSON.parse(await res.text());
}, shortcode);
doc_id là id truy vấn đã lưu mà front-end của Instagram gửi; hãy ghi lại id hiện tại từ bảng điều khiển mạng của một bài viết thực. Từ phản hồi, bạn đọc đối tượng media (xdt_shortcode_media) cho chú thích, URL media và các cạnh bình luận.
Những gì bạn nhận được
Cuộc gọi hồ sơ trả về đối tượng user của Instagram. Hình dạng dưới đây là một bản ghi thực; số lượng thay đổi theo thời gian:
json
{
"username": "nasa",
"full_name": "NASA",
"is_verified": true,
"is_private": false,
"biography": "Making the seemingly impossible, possible...",
"external_url": "https://...",
"edge_followed_by": { "count": 104420451 },
"edge_follow": { "count": 91 },
"edge_owner_to_timeline_media": { "count": 4817 }
}
// Bản ghi thực từ web_profile_info (@nasa). Đối tượng người dùng đầy đủ mang theo hàng chục trường khác; hãy đọc những trường mà bạn cần.
Một vài quan sát chân thật:
- Đối tượng
userrất lớn. Nó bao gồm các cờ kinh doanh, các trường đại lý AI, các số lượng nổi bật, và nhiều hơn nữa — hãy đọc một vài trường bạn cần và bỏ qua phần còn lại. - Số lượng nằm trong
edge_*.count. Người theo dõi, theo dõi và bài viết được nhúng dướiedge_followed_by,edge_follow, vàedge_owner_to_timeline_media. - Tài khoản riêng tư trả về shell hồ sơ nhưng không có media. Kiểm tra
is_privatetrước khi mong đợi bài viết. - Vùng cũng quan trọng như tiêu đề. Ghim
proxyCountry; một vùng không may là nguyên nhân thường gặp của một nội dung trống.
Kết luận: gọi các API mà Instagram đã mở
Lấy thông tin từ Instagram một cách gọn gàng có nghĩa là gọi các điểm cuối JSON nội bộ của nó từ bên trong một phiên thực tế, đã được khởi động — web_profile_info cho hồ sơ, GraphQL cho bài viết và bình luận — với tiêu đề x-ig-app-id và cookie của trang. Chạy trên Scrapeless Scraping Browser là điều làm cho các cuộc gọi đó có phản hồi: Chromium chống phát hiện cộng với truy cập cư trú, vì vậy Instagram xem yêu cầu như ứng dụng web của chính nó. Để biết cùng một mô hình SDK-over-CDP trên một bề mặt xã hội khác, xem hướng dẫn lấy dữ liệu TikTok; trang sản phẩm Scraping Browser và tài liệu bao phủ toàn bộ bề mặt SDK. Ghim vùng, khởi động phiên, gửi tiêu đề app-id và đọc JSON.
Sẵn sàng để xây dựng quy trình dữ liệu AI của riêng bạn?
Tham gia cộng đồng của chúng tôi để nhận một kế hoạch miễn phí và kết nối với các nhà phát triển đang xây dựng các pipeline dữ liệu xã hội: Discord · Telegram.
Đăng ký tại app.scrapeless.com để nhận runtime Scraping Browser miễn phí và điều chỉnh các mẫu ở trên cho các hồ sơ, bài viết và hashtag mà workflow của bạn cần. Xem bảng giá để biết quy mô.
Câu hỏi thường gặp
Q: Ghi dữ liệu Instagram có hợp pháp không?
Việc thu thập dữ liệu công khai thường là hợp lệ, nhưng Điều khoản Dịch vụ của Instagram áp dụng và các quy tắc có thể khác nhau tùy theo khu vực. Chỉ thu thập dữ liệu công khai, xem lại Điều khoản Dịch vụ và tham khảo ý kiến luật sư cho trường hợp sử dụng của bạn.
Q: Tại sao API hồ sơ lại trả về thân rỗng hoặc một điểm kiểm tra?
Thông thường có một trong ba lý do: thiếu header x-ig-app-id, không có cookie phiên (bạn đã bỏ qua việc tải instagram.com trước), hoặc một khu vực rời khỏi mà Instagram không tin tưởng. Gửi header, sử dụng credentials: 'include', và gán proxyCountry.
Q: Tôi có cần phải đăng nhập không?
Đối với các hồ sơ và bài viết công khai, các điểm cuối web-app trả lời một phiên ẩn danh nhưng đã được làm ấm. Việc thu thập dữ liệu khi đã đăng nhập là một con đường khác, có rủi ro cao hơn; hướng dẫn này giữ trên dữ liệu công khai.
Q: doc_id cho các bài viết đến từ đâu?
Nó là id truy vấn đã được lưu mà front-end của Instagram gửi đến GraphQL. Đọc giá trị hiện tại từ bảng mạng khi xem một bài viết thực tế — nó thay đổi theo thời gian.
Q: Tôi có cần một proxy không?
Có. Instagram rất coi trọng uy tín IP; hãy gán egress nhà ở với proxyCountry để các điểm cuối nội bộ phản hồi.
Q: Tôi có thể gửi bao nhiêu yêu cầu?
Giữ cho nó khiêm tốn — một vài phiên mỗi khu vực và một khoảng cách giữa các lần gọi — để tín hiệu uy tín IP tetap sạch.
Q: Tôi có thể chạy điều này mà không cần một tác nhân AI không?
Có. Đây là SDK của Scrapeless cộng với Puppeteer thông thường qua CDP — không cần tác nhân.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.



