विभिन्न एंटी-बॉट तंत्र, लॉगिन आवश्यकताओं और दर सीमाओं के कारण इंस्टाग्राम डेटा तक पहुंच प्राप्त करना मुश्किल हो सकता है। हालांकि, आप सही उपकरण और तकनीकों के साथ सार्वजनिक प्रोफाइल से उपयोगी जानकारी निकाल सकते हैं। यह लेख आपको Instagram के बैकएंड के लिए API अनुरोध करने के लिए Python का उपयोग करके इंस्टाग्राम उपयोगकर्ता डेटा को स्क्रैप करने के तरीके के माध्यम से मार्गदर्शन करेगा, लौटे JSON डेटा से जानकारी निकालने और इसे JSON फ़ाइल में सहेजने के लिए।
इससे पहले कि हम कोड में जाएं, सुनिश्चित करें कि आपने आवश्यक पायथन लाइब्रेरी इंस्टॉल कर ली हैं।
pip install requests python-box
हम बेहतर समझ के लिए विभिन्न वर्गों में कोड को तोड़ देंगे, जिसमें अनुरोध भेजना, डेटा प्राप्त करना और डेटा को पार्स करना, पता लगाने से बचने के लिए प्रॉक्सी का उपयोग करना, और बॉक्स लाइब्रेरी के साथ JSON पार्सिंग को सरल बनाना शामिल है।
Instagram का फ्रंटेंड भारी रूप से सुरक्षित है, लेकिन बैकएंड API समापन बिंदु प्रदान करता है जिसका उपयोग प्रमाणीकरण के बिना किया जा सकता है। हम आगे बढ़ने वाले इन बिंदुओं में से एक का उपयोग करेंगे।
यह एपीआई उपयोगकर्ता की प्रोफ़ाइल के बारे में विस्तृत जानकारी प्रदान करता है, जिसमें उनके विवरण, अनुयायी गणना और पोस्ट शामिल हैं। आइए देखें कि पायथन में अनुरोध लाइब्रेरी का उपयोग करके डेटा का अनुरोध कैसे करें।
स्पष्टीकरण:
import requests
# एक वास्तविक ब्राउज़र अनुरोध की नकल करने के लिए हेडर को परिभाषित करें
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": "*/*",
}
# इसे उस उपयोगकर्ता नाम के साथ बदलें जिसे आप खुरचना चाहते हैं
username = 'testtest'
# प्रोफ़ाइल डेटा प्राप्त करने के लिए एक एपीआई अनुरोध भेजें
response = requests.get(f'https://i.instagram.com/api/v1/users/web_profile_info/?username={username}', headers=headers)
response_json = response.json() # एक JSON ऑब्जेक्ट में प्रतिक्रिया को पार्स करें
चूंकि इंस्टाग्राम एक ही आईपी पते से बार-बार अनुरोधों को प्रतिबंधित करता है, इसलिए बड़े पैमाने पर स्क्रैपिंग के लिए प्रॉक्सी का उपयोग करना आवश्यक है। एक प्रॉक्सी विभिन्न आईपी पते के माध्यम से आपके अनुरोधों को रूट करता है, जिससे आपको पता लगाने से बचने में मदद मिलती है।
प्रॉक्सी सर्वर सेट करने के लिए, आपको आईपी एड्रेस, पोर्ट नंबर और, यदि आवश्यक हो, तो ऑथेंटिकेशन के लिए एक उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होगी।
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)
इंस्टाग्राम की एपीआई एक जटिल नेस्टेड जेएसओएन संरचना लौटाती है, जिसे पारंपरिक शब्दकोश-आधारित पहुंच का उपयोग करके नेविगेट करना मुश्किल हो सकता है। पार्सिंग को आसान बनाने के लिए, हम बॉक्स लाइब्रेरी का उपयोग कर सकते हैं, जो शब्दकोश कुंजियों के बजाय डॉट नोटेशन का उपयोग करके JSON डेटा तक पहुंचने की अनुमति देता है।
स्पष्टीकरण:
from box import Box
response_json = Box(response.json())
# उपयोगकर्ता प्रोफ़ाइल डेटा निकालें
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,
}
एक बार प्रोफ़ाइल डेटा निकालने के बाद, हम उपयोगकर्ता के वीडियो समयरेखा और नियमित पोस्ट से डेटा को भी परिमार्जन कर सकते हैं।
स्पष्टीकरण:
# वीडियो डेटा निकालें
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)
# टाइमलाइन मीडिया डेटा (फ़ोटो और वीडियो) निकालें
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)
एक बार जब आप सभी डेटा निकाल लेते हैं, तो अगला चरण इसे आगे के विश्लेषण या भंडारण के लिए JSON फ़ाइल में सहेजना है। हम JSON फ़ाइलों के लिए निकाले गए डेटा को लिखने के लिए पायथन के JSON मॉड्यूल का उपयोग करते हैं। प्रत्येक फ़ाइल को बड़े करीने से स्वरूपित किया जाएगा, इंडेंट = 4 पैरामीटर के लिए धन्यवाद, जिससे डेटा को पढ़ना और संसाधित करना आसान हो जाता है।
import json
# JSON फ़ाइल में उपयोगकर्ता डेटा सहेजें
with open(f'{username}_profile_data.json', 'w') as file:
json.dump(user_data, file, indent=4)
# JSON फ़ाइल में वीडियो डेटा सहेजें
with open(f'{username}_video_data.json', 'w') as file:
json.dump(profile_video_data, file, indent=4)
# एक JSON फ़ाइल में टाइमलाइन मीडिया डेटा सहेजें
with open(f'{username}_timeline_media_data.json', 'w') as file:
json.dump(profile_timeline_media_data, file, indent=4)
यहाँ पूर्ण पायथन स्क्रिप्ट है जो पहले से चर्चा किए गए सभी वर्गों को जोड़ती है। यह कोड इंस्टाग्राम से उपयोगकर्ता प्रोफ़ाइल डेटा, वीडियो डेटा, और टाइमलाइन मीडिया डेटा को स्क्रैप करता है, आवश्यक हेडर और प्रॉक्सी को संभालता है, और JSON फ़ाइलों को निकाली गई जानकारी को बचाता है।
import requests
from box import Box
import json
# इंस्टाग्राम के बैकएंड एपीआई के लिए एक वास्तविक ब्राउज़र अनुरोध की नकल करने के लिए हेडर
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": "*/*",
}
# दर-सीमित और पता लगाने (वैकल्पिक) से बचने के लिए एक प्रॉक्सी सेट करें
proxies = {
'http': 'http://<proxy_username>:<proxy_password>@<proxy_ip>:<proxy_port>',
'https': 'https://<proxy_username>:<proxy_password>@<proxy_ip>:<proxy_port>',
}
# इंस्टाग्राम यूजरनेम को स्क्रैप करने के लिए
username = 'testtest'
# प्रोफ़ाइल डेटा प्राप्त करने के लिए इंस्टाग्राम के बैकएंड एपीआई को एक अनुरोध भेजें
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()) # आसान नेविगेशन के लिए बॉक्स ऑब्जेक्ट की प्रतिक्रिया को परिवर्तित करें
# उपयोगकर्ता प्रोफ़ाइल डेटा निकालें
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,
}
# उपयोगकर्ता के वीडियो समयरेखा से वीडियो डेटा निकालें
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)
# टाइमलाइन मीडिया डेटा (फ़ोटो और वीडियो) निकालें
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)
# एक 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')
# 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')
# एक 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')
पायथन के साथ इंस्टाग्राम डेटा को स्क्रैप करना इंस्टाग्राम द्वारा प्रदान किए गए बैकएंड एपीआई का लाभ उठाकर किया जा सकता है, जो कुछ फ्रंट-एंड प्रतिबंधों को बायपास करने में मदद करता है। ब्राउज़र व्यवहार की नकल करने के लिए सही हेडर का उपयोग करना और दर-सीमित करने से बचने के लिए प्रॉक्सी को नियोजित करना महत्वपूर्ण कदम हैं। बॉक्स लाइब्रेरी ने डॉट नोटेशन के साथ JSON पार्सिंग को अधिक सहज बनाकर प्रक्रिया को सरल बना दिया। इससे पहले कि आप पैमाने पर इंस्टाग्राम को स्क्रैप करना शुरू करें, इंस्टाग्राम की सेवा की शर्तों का पालन करना याद रखें, और सुनिश्चित करें कि आपके स्क्रैपिंग प्रयास उनकी नीतियों का उल्लंघन नहीं करते हैं।
टिप्पणियाँ: 0