आज की दुनिया में, IMDB जैसे ऑनलाइन सामाजिक प्लेटफार्मों से डेटा निकालना अनुसंधान या आनंद के उद्देश्यों के लिए बहुत अधिक आवश्यक फिल्म-संबंधी जानकारी एकत्र करने की दिशा में एक प्रभावी सड़क हो सकती है। इस ट्यूटोरियल में, हम पायथन का उपयोग करके IMDB पर शीर्ष 250 फिल्मों को स्क्रैप करने और मूवी टाइटल, मूवी सारांश, रेटिंग, शैलियों, और बहुत कुछ जैसे विवरण निकालेंगे।
IMDB जैसी वेबसाइटों को स्क्रैप करते समय, यह पता लगाने के जोखिम को कम करने और सफल डेटा पुनर्प्राप्ति सुनिश्चित करने के लिए एक वास्तविक उपयोगकर्ता के व्यवहार का अनुकरण करना महत्वपूर्ण है। यहां कुछ रणनीतियाँ हैं जिन्हें नियोजित किया जा सकता है:
इस ट्यूटोरियल के लिए, हम वेब सामग्री डाउनलोड करने के लिए पायथन के अनुरोध लाइब्रेरी का उपयोग करेंगे, HTML को पार्स करने के लिए LXML, और वैकल्पिक रूप से, जरूरत पड़ने पर स्वरूपित डेटा को संभालने के लिए JSON लाइब्रेरी। सबसे पहले, आवश्यक पुस्तकालयों को स्थापित करें।
शुरू करने से पहले, आपको आवश्यक पायथन पुस्तकालयों को स्थापित करने की आवश्यकता है। उन्हें स्थापित करने के लिए अपने टर्मिनल में निम्न कमांड चलाएं:
pip install requests lxml
इन पुस्तकालयों का उपयोग HTTP अनुरोध करने, HTML सामग्री को पार्स करने और निकाले गए डेटा को संसाधित करने के लिए किया जाएगा।
हमारे अनुरोधों को एक वास्तविक वेब ब्राउज़र से मिलते -जुलने के लिए, तदनुसार 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" को वास्तविक प्रॉक्सी विवरण के साथ बदलें। यह सुनिश्चित करता है कि आपका आईपी पता उजागर नहीं है, और यह अवरुद्ध होने से बचने में मदद करता है।
वेबपेज सामग्री लाने के बाद, हमें फिल्म विवरण निकालने के लिए इसे पार्स करने की आवश्यकता है। हम संरचित डेटा को संभालने के लिए 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 प्रारूप में संरचित मूवी डेटा है
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
})
एक बार डेटा निकालने के बाद, इसे एक ऐसे प्रारूप में संग्रहीत करना महत्वपूर्ण है जिसका विश्लेषण करना आसान है। इस मामले में, हम इसे पंडास लाइब्रेरी का उपयोग करके एक 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")
किसी भी वेबसाइट को स्क्रैप करने से पहले, नैतिक और कानूनी मुद्दों पर विचार करना महत्वपूर्ण है:
हमेशा नियमों के प्रति सचेत रहें और वैध उद्देश्यों के लिए वेब स्क्रैपिंग का उपयोग करें।
टिप्पणियाँ: 0