آج کی دنیا میں ، آن لائن سوشل پلیٹ فارمز جیسے آئی ایم ڈی بی سے ڈیٹا نکالنا تحقیق یا لطف اندوزی کے مقاصد کے لئے فلم سے متعلق بہت ضروری معلومات جمع کرنے کی طرف ایک موثر راستہ ثابت ہوسکتا ہے۔ اس ٹیوٹوریل میں ، ہم آئی ایم ڈی بی پر سرفہرست 250 فلموں کو پائیون کا استعمال کرتے ہوئے کھرچنے کے ذریعے چلیں گے اور فلم کے عنوانات ، مووی کے خلاصے ، ریٹنگز ، انواع اور بہت کچھ جیسی تفصیلات نکالیں گے۔
جب آئی ایم ڈی بی جیسی ویب سائٹوں کو کھرچتے ہو تو ، اس کا پتہ لگانے کے خطرے کو کم سے کم کرنے اور ڈیٹا کی بازیافت کو یقینی بنانے کے لئے کسی حقیقی صارف کے طرز عمل کی نقالی کرنا بہت ضروری ہے۔ یہاں کچھ حکمت عملی ہیں جن کو استعمال کیا جاسکتا ہے:
اس ٹیوٹوریل کے ل we ، ہم HTML کو پارس کرنے کے لئے ویب مواد ، LXML ، اور اختیاری طور پر ، JSON لائبریری کو ضرورت پڑنے پر فارمیٹڈ ڈیٹا کو سنبھالنے کے لئے ویب مواد ، LXML ڈاؤن لوڈ کرنے کے لئے ازگر کی درخواستوں کی لائبریری کا استعمال کریں گے۔ پہلے ، مطلوبہ لائبریریوں کو انسٹال کریں۔
شروع کرنے سے پہلے ، آپ کو ضروری ازگر لائبریریوں کو انسٹال کرنے کی ضرورت ہے۔ ان کو انسٹال کرنے کے لئے اپنے ٹرمینل میں درج ذیل کمانڈ چلائیں:
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', # Do Not Track header
'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)
بڑے پیمانے پر سکریپنگ کے لئے پراکسی مفید ہیں۔ وہ آپ کی درخواستوں کو متعدد آئی پی ایس میں تقسیم کرکے مسدود ہونے سے بچنے میں مدد کرتے ہیں۔ یہاں آپ ایک پراکسی کو شامل کرسکتے ہیں:
proxies = {
"http": "http://your_proxy_server",
"https": "https://your_proxy_server"
}
response = requests.get('https://www.imdb.com/chart/top/', headers=headers, proxies=proxies)
"آپ کے_پروکسی_سرور" کو اصل پراکسی تفصیلات کے ساتھ تبدیل کریں جس تک آپ تک رسائی حاصل ہے۔ اس سے یہ یقینی بنتا ہے کہ آپ کا IP پتہ بے نقاب نہیں ہے ، اور یہ مسدود ہونے سے بچنے میں مدد کرتا ہے۔
ویب پیج کے مواد کو لانے کے بعد ، ہمیں فلم کی تفصیلات نکالنے کے ل it اس کی تجزیہ کرنے کی ضرورت ہے۔ ہم ساختہ اعداد و شمار کو سنبھالنے کے لئے HTML اور JSON کی تجزیہ کرنے کے لئے LXML کا استعمال کریں گے:
from lxml.html import fromstring
import json
# Parse the HTML response
parser = fromstring(response.text)
# Extract the JSON-LD data (structured data) from the script tag
raw_data = parser.xpath('//script[@type="application/ld+json"]/text()')[0]
json_data = json.loads(raw_data)
# Now we have structured movie data in JSON format
آئی ایم ڈی بی ٹاپ 250 صفحے میں ایچ ٹی ایم ایل میں سرایت شدہ ساختی اعداد و شمار شامل ہیں ، جس کو XPath کا استعمال کرتے ہوئے آسانی سے رسائی حاصل کی جاسکتی ہے اور JSON کے بطور تجزیہ کیا جاسکتا ہے۔ ہم فلم کی تفصیلات جیسے نام ، تفصیل ، درجہ بندی ، انواع ، اور بہت کچھ نکالیں گے:
movies_details = json_data.get('itemListElement')
# Loop through the movie data
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']
# Append each movie's data to the list
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
})
ایک بار جب ڈیٹا نکالا جاتا ہے تو ، اس کی شکل میں اس کو اسٹور کرنا ضروری ہے جس کا تجزیہ کرنا آسان ہے۔ اس معاملے میں ، ہم اسے پانڈاس لائبریری کا استعمال کرتے ہوئے سی ایس وی فائل میں محفوظ کریں گے:
import pandas as pd
# Convert the list of movies to a pandas DataFrame
df = pd.DataFrame(movies_data)
# Save the data to a CSV file
df.to_csv('imdb_top_250_movies.csv', index=False)
print("IMDB Top 250 movies data saved to imdb_top_250_movies.csv")
آئی ایم ڈی بی کی ٹاپ 250 فلموں کو کھرچنے کا مکمل کوڈ یہ ہے:
import requests
from lxml.html import fromstring
import json
import pandas as pd
# Define headers for the request
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',
}
# Optionally, set up proxies
proxies = {
"http": "http://your_proxy_server",
"https": "https://your_proxy_server"
}
# Send the request to the IMDB Top 250 page
response = requests.get('https://www.imdb.com/chart/top/', headers=headers, proxies=proxies)
# Parse the HTML response
parser = fromstring(response.text)
# Extract the JSON-LD data
raw_data = parser.xpath('//script[@type="application/ld+json"]/text()')[0]
json_data = json.loads(raw_data)
# Extract movie details
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
})
# Save the data to a CSV file
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