कैसे पायथन का उपयोग करके इंस्टाग्राम डेटा को परिमार्जन करें

टिप्पणियाँ: 0

विभिन्न एंटी-बॉट तंत्र, लॉगिन आवश्यकताओं और दर सीमाओं के कारण इंस्टाग्राम डेटा तक पहुंच प्राप्त करना मुश्किल हो सकता है। हालांकि, आप सही उपकरण और तकनीकों के साथ सार्वजनिक प्रोफाइल से उपयोगी जानकारी निकाल सकते हैं। यह लेख आपको Instagram के बैकएंड के लिए API अनुरोध करने के लिए Python का उपयोग करके इंस्टाग्राम उपयोगकर्ता डेटा को स्क्रैप करने के तरीके के माध्यम से मार्गदर्शन करेगा, लौटे JSON डेटा से जानकारी निकालने और इसे JSON फ़ाइल में सहेजने के लिए।

आवश्यक पुस्तकालयों की स्थापना

इससे पहले कि हम कोड में जाएं, सुनिश्चित करें कि आपने आवश्यक पायथन लाइब्रेरी इंस्टॉल कर ली हैं।


pip install requests python-box

  • अनुरोध: HTTP अनुरोध करने के लिए।
  • पायथन-बॉक्स: डॉट्स को ऑब्जेक्ट्स में बदलकर डेटा एक्सेस को सरल बनाता है जो डॉट नोटेशन एक्सेस की अनुमति देता है।

हम बेहतर समझ के लिए विभिन्न वर्गों में कोड को तोड़ देंगे, जिसमें अनुरोध भेजना, डेटा प्राप्त करना और डेटा को पार्स करना, पता लगाने से बचने के लिए प्रॉक्सी का उपयोग करना, और बॉक्स लाइब्रेरी के साथ JSON पार्सिंग को सरल बनाना शामिल है।

चरण 1। एपीआई अनुरोध करना

Instagram का फ्रंटेंड भारी रूप से सुरक्षित है, लेकिन बैकएंड API समापन बिंदु प्रदान करता है जिसका उपयोग प्रमाणीकरण के बिना किया जा सकता है। हम आगे बढ़ने वाले इन बिंदुओं में से एक का उपयोग करेंगे।

यह एपीआई उपयोगकर्ता की प्रोफ़ाइल के बारे में विस्तृत जानकारी प्रदान करता है, जिसमें उनके विवरण, अनुयायी गणना और पोस्ट शामिल हैं। आइए देखें कि पायथन में अनुरोध लाइब्रेरी का उपयोग करके डेटा का अनुरोध कैसे करें।

स्पष्टीकरण:

  1. हेडर: इंस्टाग्राम अनुरोध हेडर का विश्लेषण करके अधिकांश बीओटी अनुरोधों को ब्लॉक करता है। एक्स-आईजी-ऐप-आईडी आवश्यक है क्योंकि यह इंस्टाग्राम ऐप से आने वाले अनुरोध की नकल करता है।
  2. उपयोगकर्ता-एजेंट स्ट्रिंग ब्राउज़र को अनुरोध करने का प्रतिनिधित्व करता है, इंस्टाग्राम को यह मानते हुए कि यह एक वास्तविक उपयोगकर्ता है।
  3. बैकेंड एपीआई अनुरोध: URL https://i.instagram.com/api/v1/users/web_profile_info/?username={username} इंस्टाग्राम के बैकएंड एपीआई का हिस्सा है। यह एक सार्वजनिक प्रोफ़ाइल के बारे में विस्तृत जानकारी प्रदान करता है।
  4. JSON प्रतिक्रिया को संभालना: हम API प्रतिक्रिया को JSON ऑब्जेक्ट में परिवर्तित करने के लिए response.json () का उपयोग करते हैं जिसे हम आसानी से पार्स और निकाल सकते हैं।

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 ऑब्जेक्ट में प्रतिक्रिया को पार्स करें

चरण 2। दर-सीमित को बायपास करने के लिए प्रॉक्सी हैंडलिंग

चूंकि इंस्टाग्राम एक ही आईपी पते से बार-बार अनुरोधों को प्रतिबंधित करता है, इसलिए बड़े पैमाने पर स्क्रैपिंग के लिए प्रॉक्सी का उपयोग करना आवश्यक है। एक प्रॉक्सी विभिन्न आईपी पते के माध्यम से आपके अनुरोधों को रूट करता है, जिससे आपको पता लगाने से बचने में मदद मिलती है।

प्रॉक्सी सर्वर सेट करने के लिए, आपको आईपी एड्रेस, पोर्ट नंबर और, यदि आवश्यक हो, तो ऑथेंटिकेशन के लिए एक उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होगी।


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)

चरण 3। बॉक्स के साथ JSON पार्सिंग को सरल बनाना

इंस्टाग्राम की एपीआई एक जटिल नेस्टेड जेएसओएन संरचना लौटाती है, जिसे पारंपरिक शब्दकोश-आधारित पहुंच का उपयोग करके नेविगेट करना मुश्किल हो सकता है। पार्सिंग को आसान बनाने के लिए, हम बॉक्स लाइब्रेरी का उपयोग कर सकते हैं, जो शब्दकोश कुंजियों के बजाय डॉट नोटेशन का उपयोग करके JSON डेटा तक पहुंचने की अनुमति देता है।

स्पष्टीकरण:

  1. बॉक्स: यह लाइब्रेरी एक JSON शब्दकोश को एक ऑब्जेक्ट में परिवर्तित करती है, जिससे हमें डॉट नोटेशन का उपयोग करके गहराई से नेस्टेड फ़ील्ड का उपयोग करने की अनुमति मिलती है। उदाहरण के लिए, response_json ['डेटा'] ['उपयोगकर्ता'] ['full_name'] लिखने के बजाय, हम बस response_json.data.user.full_name लिख सकते हैं।
  2. डेटा निकालना: हम उपयोगकर्ता का पूरा नाम, आईडी, जीवनी, चाहे वह व्यवसाय या पेशेवर खाता, सत्यापन स्थिति और अनुयायी गिनती जैसी उपयोगी प्रोफ़ाइल जानकारी निकालते हैं।

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,
}

चरण 4। वीडियो और टाइमलाइन डेटा निकालना

एक बार प्रोफ़ाइल डेटा निकालने के बाद, हम उपयोगकर्ता के वीडियो समयरेखा और नियमित पोस्ट से डेटा को भी परिमार्जन कर सकते हैं।

स्पष्टीकरण:

  1. वीडियो डेटा: यह खंड उपयोगकर्ता के इंस्टाग्राम वीडियो के बारे में डेटा निकालता है, जिसमें वीडियो URL, व्यू काउंट, कमेंट काउंट और वीडियो की अवधि शामिल है।
  2. टाइमलाइन मीडिया: इसी तरह, यह खंड उपयोगकर्ता की टाइमलाइन से डेटा निकालता है, पोस्ट के मीडिया URL, लाइक और टिप्पणियों को कैप्चर करता है।

# वीडियो डेटा निकालें
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)

चरण 5। JSON फ़ाइलों को डेटा सहेजना

एक बार जब आप सभी डेटा निकाल लेते हैं, तो अगला चरण इसे आगे के विश्लेषण या भंडारण के लिए 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 टिप्पणियाँ