Đạt được quyền truy cập vào dữ liệu Instagram có thể khó khăn do các cơ chế chống BOT khác nhau, yêu cầu đăng nhập và giới hạn tỷ lệ. Tuy nhiên, bạn có thể trích xuất thông tin hữu ích từ hồ sơ công khai với các công cụ và kỹ thuật phù hợp. Bài viết này sẽ hướng dẫn bạn thông qua cách loại bỏ dữ liệu người dùng Instagram bằng Python bằng cách thực hiện các yêu cầu API đến phụ trợ Instagram, trích xuất thông tin từ dữ liệu JSON được trả về và lưu nó vào tệp JSON.
Trước khi chúng tôi vào mã, hãy đảm bảo bạn đã cài đặt các thư viện Python cần thiết.
pip install requests python-box
Chúng tôi sẽ chia mã thành các phần khác nhau để hiểu rõ hơn, bao gồm gửi yêu cầu, lấy và phân tích dữ liệu, sử dụng proxy để tránh phát hiện và đơn giản hóa việc phân tích cú pháp JSON với thư viện hộp.
Mặt trận của Instagram được bảo mật rất nhiều, nhưng phần phụ trợ cung cấp các điểm cuối API có thể được sử dụng mà không cần xác thực. Chúng tôi sẽ sử dụng một trong những điểm này trong tương lai.
API này cung cấp thông tin chi tiết về hồ sơ của người dùng, bao gồm mô tả của họ, số lượng người theo dõi và bài đăng. Hãy khám phá cách yêu cầu dữ liệu bằng thư viện yêu cầu trong Python.
Giải thích:
import requests
# Xác định các tiêu đề để bắt chước yêu cầu trình duyệt thực
headers = {
"x-ig-app-id": "936619743392459", # ID ứng dụng Instagram để xác thực yêu cầu
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9,ru;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept": "*/*",
}
# Thay thế cái này bằng tên người dùng bạn muốn cạo
username = 'testtest'
# Gửi yêu cầu API để nhận dữ liệu hồ sơ
response = requests.get(f'https://i.instagram.com/api/v1/users/web_profile_info/?username={username}', headers=headers)
response_json = response.json() # Phân tích phản hồi vào đối tượng JSON
Vì Instagram hạn chế các yêu cầu lặp đi lặp lại từ cùng một địa chỉ IP, nên sử dụng proxy là điều cần thiết để cạo quy mô lớn. Một proxy định tuyến yêu cầu của bạn thông qua các địa chỉ IP khác nhau, giúp bạn tránh phát hiện.
Để thiết lập một máy chủ proxy, bạn sẽ cần địa chỉ IP, số cổng và, nếu được yêu cầu, tên người dùng và mật khẩu để xác thực.
proxies = {
'http': 'http://<proxy_username>:<proxy_password>@<proxy_ip>:<proxy_port>',
'https': 'https://<proxy_username>:<proxy_password>@<proxy_ip>:<proxy_port>',
}
response = requests.get(f'https://i.instagram.com/api/v1/users/web_profile_info/?username={username}', headers=headers, proxies=proxies)
API của Instagram trả về một cấu trúc JSON lồng nhau phức tạp, có thể khó điều hướng bằng cách sử dụng truy cập dựa trên từ điển truyền thống. Để làm cho phân tích cú pháp dễ dàng hơn, chúng ta có thể sử dụng thư viện hộp, cho phép truy cập dữ liệu JSON bằng ký hiệu DOT thay vì các khóa từ điển.
Giải thích:
from box import Box
response_json = Box(response.json())
# Trích xuất dữ liệu hồ sơ người dùng
user_data = {
'full name': response_json.data.user.full_name,
'id': response_json.data.user.id,
'biography': response_json.data.user.biography,
'business account': response_json.data.user.is_business_account,
'professional account': response_json.data.user.is_professional_account,
'category name': response_json.data.user.category_name,
'is verified': response_json.data.user.is_verified,
'profile pic url': response_json.data.user.profile_pic_url_hd,
'followers': response_json.data.user.edge_followed_by.count,
'following': response_json.data.user.edge_follow.count,
}
Khi dữ liệu hồ sơ được trích xuất, chúng tôi cũng có thể quét dữ liệu từ dòng thời gian video của người dùng và các bài đăng thông thường.
Giải thích:
# Trích xuất dữ liệu video
profile_video_data = []
for element in response_json.data.user.edge_felix_video_timeline.edges:
video_data = {
'id': element.node.id,
'short code': element.node.shortcode,
'video url': element.node.video_url,
'view count': element.node.video_view_count,
'comment count': element.node.edge_media_to_comment.count,
'like count': element.node.edge_liked_by.count,
'duration': element.node.video_duration,
}
profile_video_data.append(video_data)
# Trích xuất dữ liệu truyền thông dòng thời gian (ảnh và video)
profile_timeline_media_data = []
for element in response_json.data.user.edge_owner_to_timeline_media.edges:
media_data = {
'id': element.node.id,
'short code': element.node.shortcode,
'media url': element.node.display_url,
'comment count': element.node.edge_media_to_comment.count,
'like count': element.node.edge_liked_by.count,
}
profile_timeline_media_data.append(media_data)
Khi bạn đã trích xuất tất cả dữ liệu, bước tiếp theo là lưu nó vào tệp JSON để phân tích hoặc lưu trữ thêm. Chúng tôi sử dụng mô -đun JSON của Python để viết dữ liệu được trích xuất vào các tệp JSON. Mỗi tệp sẽ được định dạng gọn gàng, nhờ vào indent=4 tham số, giúp dễ dàng đọc và xử lý dữ liệu.
import json
# Lưu dữ liệu người dùng vào tệp JSON
with open(f'{username}_profile_data.json', 'w') as file:
json.dump(user_data, file, indent=4)
# Lưu dữ liệu video vào tệp JSON
with open(f'{username}_video_data.json', 'w') as file:
json.dump(profile_video_data, file, indent=4)
# Lưu dữ liệu phương tiện dòng thời gian vào tệp JSON
with open(f'{username}_timeline_media_data.json', 'w') as file:
json.dump(profile_timeline_media_data, file, indent=4)
Ở đây, tập lệnh Python hoàn chỉnh kết hợp tất cả các phần được thảo luận trước đó. Mã này thu thập dữ liệu hồ sơ người dùng, dữ liệu video và dữ liệu phương tiện dòng thời gian từ Instagram, xử lý các tiêu đề và proxy cần thiết và lưu thông tin được trích xuất vào các tệp JSON.
import requests
from box import Box
import json
# Các tiêu đề để bắt chước yêu cầu trình duyệt thực sự đối với API phụ trợ của Instagram
headers = {
"x-ig-app-id": "936619743392459",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9,ru;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept": "*/*",
}
# Đặt proxy để tránh giới hạn tỷ lệ và phát hiện (tùy chọn)
proxies = {
'http': 'http://<proxy_username>:<proxy_password>@<proxy_ip>:<proxy_port>',
'https': 'https://<proxy_username>:<proxy_password>@<proxy_ip>:<proxy_port>',
}
# Tên người dùng Instagram để cạo
username = 'testtest'
# Gửi yêu cầu đến API phụ trợ của Instagram để lấy dữ liệu hồ sơ
response = requests.get(f'https://i.instagram.com/api/v1/users/web_profile_info/?username={username}',
headers=headers, proxies=proxies)
response_json = Box(response.json()) # Chuyển đổi phản hồi thành đối tượng hộp để điều hướng dễ dàng
# Trích xuất dữ liệu hồ sơ người dùng
user_data = {
'full name': response_json.data.user.full_name,
'id': response_json.data.user.id,
'biography': response_json.data.user.biography,
'business account': response_json.data.user.is_business_account,
'professional account': response_json.data.user.is_professional_account,
'category name': response_json.data.user.category_name,
'is verified': response_json.data.user.is_verified,
'profile pic url': response_json.data.user.profile_pic_url_hd,
'followers': response_json.data.user.edge_followed_by.count,
'following': response_json.data.user.edge_follow.count,
}
# Trích xuất dữ liệu video từ dòng thời gian video của người dùng
profile_video_data = []
for element in response_json.data.user.edge_felix_video_timeline.edges:
video_data = {
'id': element.node.id,
'short code': element.node.shortcode,
'video url': element.node.video_url,
'view count': element.node.video_view_count,
'comment count': element.node.edge_media_to_comment.count,
'like count': element.node.edge_liked_by.count,
'duration': element.node.video_duration,
}
profile_video_data.append(video_data)
# Trích xuất dữ liệu truyền thông dòng thời gian (ảnh và video)
profile_timeline_media_data = []
for element in response_json.data.user.edge_owner_to_timeline_media.edges:
media_data = {
'id': element.node.id,
'short code': element.node.shortcode,
'media url': element.node.display_url,
'comment count': element.node.edge_media_to_comment.count,
'like count': element.node.edge_liked_by.count,
}
profile_timeline_media_data.append(media_data)
# Lưu dữ liệu hồ sơ người dùng vào tệp JSON
with open(f'{username}_profile_data.json', 'w') as file:
json.dump(user_data, file, indent=4)
print(f'saved json: {username}_profile_data.json')
# Lưu dữ liệu video vào tệp JSON
with open(f'{username}_video_data.json', 'w') as file:
json.dump(profile_video_data, file, indent=4)
print(f'saved json: {username}_video_data.json')
# Lưu dữ liệu phương tiện dòng thời gian vào tệp JSON
with open(f'{username}_timeline_media_data.json', 'w') as file:
json.dump(profile_timeline_media_data, file, indent=4)
print(f'saved json: {username}_timeline_media_data.json')
Có thể thực hiện dữ liệu Instagram với Python bằng cách tận dụng API phụ trợ được cung cấp bởi Instagram, giúp bỏ qua một số hạn chế trước. Sử dụng các tiêu đề phù hợp để bắt chước hành vi của trình duyệt và sử dụng các proxy để tránh giới hạn tỷ lệ là các bước quan trọng. Thư viện hộp đơn giản hóa quá trình bằng cách làm cho JSON phân tích trực quan hơn với ký hiệu DOT. Trước khi bạn bắt đầu xóa Instagram ở quy mô, hãy nhớ tuân thủ các điều khoản dịch vụ của Instagram và đảm bảo các nỗ lực cào của bạn không vi phạm chính sách của họ.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bình luận: 0