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

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

आज की दुनिया में, IMDB जैसे ऑनलाइन सामाजिक प्लेटफार्मों से डेटा निकालना अनुसंधान या आनंद के उद्देश्यों के लिए बहुत अधिक आवश्यक फिल्म-संबंधी जानकारी एकत्र करने की दिशा में एक प्रभावी सड़क हो सकती है। इस ट्यूटोरियल में, हम पायथन का उपयोग करके IMDB पर शीर्ष 250 फिल्मों को स्क्रैप करने और मूवी टाइटल, मूवी सारांश, रेटिंग, शैलियों, और बहुत कुछ जैसे विवरण निकालेंगे।

IMDB जैसी वेबसाइटों को स्क्रैप करते समय, यह पता लगाने के जोखिम को कम करने और सफल डेटा पुनर्प्राप्ति सुनिश्चित करने के लिए एक वास्तविक उपयोगकर्ता के व्यवहार का अनुकरण करना महत्वपूर्ण है। यहां कुछ रणनीतियाँ हैं जिन्हें नियोजित किया जा सकता है:

  1. आईपी अवरुद्ध करने से बचें: वेबसाइटें अक्सर उन अनुरोधों की संख्या को सीमित करती हैं जो स्क्रैपिंग को रोकने के लिए एकल आईपी पते से किए जा सकते हैं। प्रॉक्सी का उपयोग करके, आप कई आईपी पते पर अपने अनुरोधों को फैला सकते हैं, जिससे अवरुद्ध होने का जोखिम कम हो सकता है।
  2. गुमनामी सुनिश्चित करें: Proxies आपके वास्तविक IP पते को मास्क करता है, जो न केवल आपकी गोपनीयता की रक्षा करने में मदद करता है, बल्कि वेबसाइटों के लिए यह भी कठिन बनाता है कि आप स्क्रैपिंग गतिविधियों को वापस ट्रैक करें।
  3. गति सीमाओं का अनुपालन करें: कई प्रॉक्सी के माध्यम से अनुरोधों को वितरित करना आपके प्रश्नों की आवृत्ति को प्रबंधित करने में मदद कर सकता है, वेबसाइट की दर सीमा के भीतर रहना और एंटी-स्क्रैपिंग उपायों को ट्रिगर करने की संभावना को कम करना।
  4. बाईपास सर्वर संदेह: उन हेडर को शामिल करना जो एक विशिष्ट ब्राउज़र की नकल करते हैं, जैसे कि उपयोगकर्ता-एजेंट, आपके स्क्रैपिंग अनुरोधों को सामान्य उपयोगकर्ता अनुरोधों की तरह अधिक दिखाई दे सकता है। यह सर्वर को आपकी गतिविधियों को संदिग्ध के रूप में चिह्नित करने से रोक सकता है।

चरण 1: खुरचनी तैयार करना

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

पुस्तकालयों को स्थापित करना

शुरू करने से पहले, आपको आवश्यक पायथन पुस्तकालयों को स्थापित करने की आवश्यकता है। उन्हें स्थापित करने के लिए अपने टर्मिनल में निम्न कमांड चलाएं:


pip install requests lxml

इन पुस्तकालयों का उपयोग HTTP अनुरोध करने, HTML सामग्री को पार्स करने और निकाले गए डेटा को संसाधित करने के लिए किया जाएगा।

HTTP अनुरोध हेडर को कॉन्फ़िगर करना

हमारे अनुरोधों को एक वास्तविक वेब ब्राउज़र से मिलते -जुलने के लिए, तदनुसार HTTP हेडर स्थापित करना महत्वपूर्ण है। यहाँ एक उदाहरण है कि आप अपनी स्क्रिप्ट में इन हेडर को कैसे कॉन्फ़िगर कर सकते हैं:


import requests

headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',  # हेडर को ट्रैक न करें
    'pragma': 'no-cache',
    'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Linux"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}

response = requests.get('https://www.imdb.com/chart/top/', headers=headers)

प्रॉक्सी की स्थापना

प्रॉक्सी बड़े पैमाने पर स्क्रैपिंग के लिए उपयोगी हैं। वे कई IPS में आपके अनुरोधों को वितरित करके अवरुद्ध होने से बचने में आपकी सहायता करते हैं। यहां बताया गया है कि आप एक प्रॉक्सी को कैसे शामिल कर सकते हैं:


proxies = {
    "http": "http://your_proxy_server",
    "https": "https://your_proxy_server"
}

response = requests.get('https://www.imdb.com/chart/top/', headers=headers, proxies=proxies)

"Your_proxy_server" को वास्तविक प्रॉक्सी विवरण के साथ बदलें। यह सुनिश्चित करता है कि आपका आईपी पता उजागर नहीं है, और यह अवरुद्ध होने से बचने में मदद करता है।

चरण 2: HTML सामग्री को पार्स करना

वेबपेज सामग्री लाने के बाद, हमें फिल्म विवरण निकालने के लिए इसे पार्स करने की आवश्यकता है। हम संरचित डेटा को संभालने के लिए HTML और JSON को पार्स करने के लिए LXML का उपयोग करेंगे:


from lxml.html import fromstring
import json

# HTML प्रतिक्रिया को पार्स करें
parser = fromstring(response.text)

# स्क्रिप्ट टैग से JSON-LL डेटा (संरचित डेटा) निकालें
raw_data = parser.xpath('//script[@type="application/ld+json"]/text()')[0]
json_data = json.loads(raw_data)

# अब हमारे पास JSON प्रारूप में संरचित मूवी डेटा है

चरण 3: फिल्म विवरण निकालना

IMDB शीर्ष 250 पृष्ठ में HTML में एम्बेडेड संरचित डेटा शामिल हैं, जिसे XPATH और JSON के रूप में पार्स का उपयोग करके आसानी से एक्सेस किया जा सकता है। हम फिल्म विवरण जैसे नाम, विवरण, रेटिंग, शैलियों, और बहुत कुछ निकालेंगे:


movies_details = json_data.get('itemListElement')

# मूवी डेटा के माध्यम से लूप
movies_data = []
for movie in movies_details:
    movie_type = movie['item']['@type']
    url = movie['item']['url']
    name = movie['item']['name']
    description = movie['item']['description']
    image = movie['item']['image']
    bestRating = movie['item']['aggregateRating']['bestRating']
    worstRating = movie['item']['aggregateRating']['worstRating']
    ratingValue = movie['item']['aggregateRating']['ratingValue']
    ratingCount = movie['item']['aggregateRating']['ratingCount']
    contentRating = movie['item'].get('contentRating')
    genre = movie['item']['genre']
    duration = movie['item']['duration']
    
    # प्रत्येक फिल्म के डेटा को सूची में जोड़ें
    movies_data.append({
        'movie_type': movie_type,
        'url': url,
        'name': name,
        'description': description,
        'image': image,
        'bestRating': bestRating,
        'worstRating': worstRating,
        'ratingValue': ratingValue,
        'ratingCount': ratingCount,
        'contentRating': contentRating,
        'genre': genre,
        'duration': duration
    })

चरण 4: डेटा का भंडारण

एक बार डेटा निकालने के बाद, इसे एक ऐसे प्रारूप में संग्रहीत करना महत्वपूर्ण है जिसका विश्लेषण करना आसान है। इस मामले में, हम इसे पंडास लाइब्रेरी का उपयोग करके एक CSV फ़ाइल में सहेजेंगे:


import pandas as pd

# फिल्मों की सूची को एक पांडस डेटाफ्रेम में बदलें
df = pd.DataFrame(movies_data)

# डेटा को CSV फ़ाइल में सहेजें
df.to_csv('imdb_top_250_movies.csv', index=False)

print("IMDB Top 250 movies data saved to imdb_top_250_movies.csv")

पूरा कोड

यहाँ IMDB की शीर्ष 250 फिल्मों को स्क्रैप करने के लिए पूरा कोड है:


import requests
from lxml.html import fromstring
import json
import pandas as pd

# अनुरोध के लिए हेडर को परिभाषित करें
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Linux"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}

# वैकल्पिक रूप से, प्रॉक्सी सेट करें
proxies = {
    "http": "http://your_proxy_server",
    "https": "https://your_proxy_server"
}

# IMDB शीर्ष 250 पृष्ठ पर अनुरोध भेजें
response = requests.get('https://www.imdb.com/chart/top/', headers=headers, proxies=proxies)

# HTML प्रतिक्रिया को पार्स करें
parser = fromstring(response.text)

# JSON-LL डेटा निकालें
raw_data = parser.xpath('//script[@type="application/ld+json"]/text()')[0]
json_data = json.loads(raw_data)

# फिल्म विवरण निकालें
movies_details = json_data.get('itemListElement')

movies_data = []
for movie in movies_details:
    movie_type = movie['item']['@type']
    url = movie['item']['url']
    name = movie['item']['name']
    description = movie['item']['description']
    image = movie['item']['image']
    bestRating = movie['item']['aggregateRating']['bestRating']
    worstRating = movie['item']['aggregateRating']['worstRating']
    ratingValue = movie['item']['aggregateRating']['ratingValue']
    ratingCount = movie['item']['aggregateRating']['ratingCount']
    contentRating = movie['item'].get('contentRating')
    genre = movie['item']['genre']
    duration = movie['item']['duration']
    
    movies_data.append({
        'movie_type': movie_type,
        'url': url,
        'name': name,
        'description': description,
        'image': image,
        'bestRating': bestRating,
        'worstRating': worstRating,
        'ratingValue': ratingValue,
        'ratingCount': ratingCount,
        'contentRating': contentRating,
        'genre': genre,
        'duration': duration
    })

# डेटा को CSV फ़ाइल में सहेजें
df = pd.DataFrame(movies_data)
df.to_csv('imdb_top_250_movies.csv', index=False)
print("IMDB Top 250 movies data saved to imdb_top_250_movies.csv")

नैतिक विचार

किसी भी वेबसाइट को स्क्रैप करने से पहले, नैतिक और कानूनी मुद्दों पर विचार करना महत्वपूर्ण है:

  • Robots.txt का सम्मान करें: IMDB के Robots.txt फ़ाइल की जाँच करें कि वेबसाइट के कौन से भागों को स्क्रैप करने की अनुमति है। हमेशा वेबसाइट की नीतियों का पालन करें।
  • सर्वर को ओवरलोड करने से बचें: सर्वर पर अनावश्यक लोड डालने से बचने के लिए अपने अनुरोधों की आवृत्ति को सीमित करके जिम्मेदारी से डेटा स्क्रैप करें।
  • सेवा की शर्तों का सम्मान करें: सुनिश्चित करें कि स्क्रैपिंग IMDB की सेवा की शर्तों का उल्लंघन नहीं करता है।

हमेशा नियमों के प्रति सचेत रहें और वैध उद्देश्यों के लिए वेब स्क्रैपिंग का उपयोग करें।

टिप्पणियाँ:

0 टिप्पणियाँ