اس مضمون میں ، ہم یہ ظاہر کریں گے کہ بُکنگ ڈاٹ کام کی ویب سائٹ سے ازگر کے ساتھ ڈیٹا اکٹھا کرنے کا طریقہ۔ ہم معلومات حاصل کریں گے ، لیکن اس تک محدود نہیں ، ہوٹل کے نام ، درجہ بندی ، قیمتیں ، مقام کے پتے اور ان کی تفصیل شامل ہیں۔ فراہم کردہ کوڈ آپ کو HTML مواد کی تجزیہ کرکے اور ایمبیڈڈ JSON ڈیٹا کو نکال کر ہوٹل کے صفحات سے ڈیٹا بازیافت کرنے کی اجازت دیتا ہے۔
کوڈ کو بکنگ ڈاٹ کام سے ڈیٹا کو کھرچنے سے پہلے ، آپ کو ضروری ازگر لائبریریوں کو انسٹال کرنے کی ضرورت ہوگی۔ یہاں آپ مطلوبہ انحصار انسٹال کرسکتے ہیں:
ضروری لائبریریوں کو انسٹال کرنے کے ل ، آپ pip استعمال کرسکتے ہیں:
pip install requests lxml
یہ واحد بیرونی لائبریریاں ہیں جن کی آپ کو ضرورت ہے ، اور باقی (JSON ، CSV) ازگر کے ساتھ پہلے سے نصب آتے ہیں۔
جب بکنگ ڈاٹ کام سے ڈیٹا کو کھرچتے ہو تو ، ویب پیج کی ساخت اور آپ جس طرح کا ڈیٹا نکالنا چاہتے ہیں اس کو سمجھنا ضروری ہے۔ بکنگ ڈاٹ کام پر ہر ہوٹل کے صفحے میں JSON-LD کی شکل میں سرایت شدہ ساختی اعداد و شمار شامل ہیں ، یہ ایک ایسا فارمیٹ ہے جو نام ، مقام اور قیمتوں جیسے تفصیلات کو آسانی سے نکالنے کی اجازت دیتا ہے۔ ہم اس ڈیٹا کو ختم کرتے رہیں گے۔
چونکہ بکنگ ڈاٹ کام ایک متحرک سائٹ ہے اور خودکار اقدامات سے نمٹنے کے لئے اقدامات کو نافذ کرتی ہے ، لہذا ہم بلاک ہونے کے خطرے کے بغیر ہموار کھرچنے کو یقینی بنانے کے لئے مناسب HTTP ہیڈر اور پراکسی استعمال کریں گے۔
ہیڈرز برائوزر میں صارف کے سیشن کی نقالی کرتے ہیں اور بکنگ ڈاٹ کام کے اینٹی سکریپنگ سسٹم کے ذریعہ پتہ لگانے کو روکتے ہیں۔ مناسب طریقے سے تشکیل شدہ ہیڈروں کے بغیر ، سرور آسانی سے خودکار اسکرپٹس کی شناخت کرسکتا ہے ، جس کی وجہ سے آئی پی بلاک کرنے یا کیپچا چیلنجوں کا باعث بن سکتا ہے۔
بکنگ ڈاٹ کام کے اینٹی سکریپنگ میکانزم کے ذریعہ مسدود ہونے سے بچنے کے ل we ، ہم ویب سائٹ کو براؤزنگ کرنے والے جائز صارف کی نقالی کرنے کے لئے کسٹم ہیڈر استعمال کریں گے۔ یہاں ہے کہ آپ مناسب ہیڈر کے ساتھ HTTP درخواست بھیج سکتے ہیں:
import requests
from lxml.html import fromstring
urls_list = ["https links"]
for url in urls_list:
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',
'priority': 'u=0, i',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'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/130.0.0.0 Safari/537.36',
}
response = requests.get(url, headers=headers)
پراکسیوں کا استعمال ضروری ہے جب بکنگ ڈاٹ کام جیسی سائٹوں کو کھرچتے ہو ، جو سخت درخواست کی شرح کی حد کا اطلاق کرتے ہیں یا IP پتے کو ٹریک کرتے ہیں۔ پراکسی بلاکس کو روکنے ، مختلف IP پتوں میں درخواستوں کا بوجھ تقسیم کرنے میں مدد کرتی ہے۔ اس مقصد کے ل free ، صارف نام اور پاس ورڈ یا IP ایڈریس کے ذریعہ توثیق کے ساتھ مفت پراکسی اور ادا شدہ پراکسی خدمات استعمال کی جاسکتی ہیں۔ ہماری مثال میں ، ہم مؤخر الذکر آپشن استعمال کرتے ہیں۔
proxies = {
'http': '',
'https': ''
}
response = requests.get(url, headers=headers, proxies=proxies)
درخواست بھیجنے کے بعد ، ہم ایل ایکس ایم ایل کا استعمال کرتے ہوئے HTML مواد کو پارس کرتے ہیں تاکہ ایمبیڈڈ JSON-LD کا ڈیٹا تلاش کیا جاسکے جس میں ہوٹل کی تفصیلات موجود ہیں۔ یہ قدم ویب پیج سے ساختی ڈیٹا نکالتا ہے جس میں ہوٹل کے نام ، قیمتیں ، مقامات اور بہت کچھ شامل ہے۔
parser = fromstring(response.text)
# Extract embedded JSON data
embeded_jsons = parser.xpath('//script[@type="application/ld+json"]/text()')
json_data = json.loads(embeded_jsons[0])
ایک بار جب ہمارے پاس JSON کا تجزیہ کیا جاتا ہے تو ، ہم متعلقہ فیلڈز جیسے ہوٹل کا نام ، پتہ ، درجہ بندی اور قیمتوں کا تعین کرسکتے ہیں۔ ذیل میں JSON سے ہوٹل کی معلومات نکالنے کا کوڈ ہے:
name = json_data['name']
location = json_data['hasMap']
priceRange = json_data['priceRange']
description = json_data['description']
url = json_data['url']
ratingValue = json_data['aggregateRating']['ratingValue']
reviewCount = json_data['aggregateRating']['reviewCount']
type_ = json_data['@type']
postalCode = json_data['address']['postalCode']
addressLocality = json_data['address']['addressLocality']
addressCountry = json_data['address']['addressCountry']
addressRegion = json_data['address']['addressRegion']
streetAddress = json_data['address']['streetAddress']
image_url = json_data['image']
room_types = parser.xpath("//a[contains(@href, '#RD')]/span/text()")
# Append the data to the all_data list
all_data.append({
"Name": name,
"Location": location,
"Price Range": priceRange,
"Rating": ratingValue,
"Review Count": reviewCount,
"Type": type_,
"Postal Code": postalCode,
"Address Locality": addressLocality,
"Country": addressCountry,
"Region": addressRegion,
"Street Address": streetAddress,
"URL": url,
"Image URL": image_url,
"Room Types": room_types
})
ایک بار جب ڈیٹا نکالا جاتا ہے تو ، ہم اسے مزید تجزیہ کے لئے CSV فائل میں محفوظ کرسکتے ہیں:
# After all URLs are processed, write the data into a CSV file
with open('booking_data.csv', 'w', newline='') as csvfile:
fieldnames = ["Name", "Location", "Price Range", "Rating", "Review Count", "Type", "Postal Code",
"Address Locality", "Country", "Region", "Street Address", "URL", "Image URL", "Room Types"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# Write the header
writer.writeheader()
# Write the rows of data
writer.writerows(all_data)
تمام حصوں کو یکجا کرنے والا مکمل کوڈ یہ ہے:
import requests
from lxml.html import fromstring
import json
import csv
# List of hotel URLs to scrape
urls_list = [
"Https link",
"Https link"
]
# Initialize an empty list to hold all the scraped data
all_data = []
proxies = {
'http': ''
}
# Loop through each URL to scrape data
for url in urls_list:
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',
'priority': 'u=0, i',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'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/130.0.0.0 Safari/537.36',
}
# Sending the request to the website
response = requests.get(url, headers=headers, proxies=proxies)
# Parsing the HTML content
parser = fromstring(response.text)
# Extract embedded JSON data
embeded_jsons = parser.xpath('//script[@type="application/ld+json"]/text()')
json_data = json.loads(embeded_jsons[0])
# Extract all hotel details from JSON
name = json_data['name']
location = json_data['hasMap']
priceRange = json_data['priceRange']
description = json_data['description']
url = json_data['url']
ratingValue = json_data['aggregateRating']['ratingValue']
reviewCount = json_data['aggregateRating']['reviewCount']
type_ = json_data['@type']
postalCode = json_data['address']['postalCode']
addressLocality = json_data['address']['addressLocality']
addressCountry = json_data['address']['addressCountry']
addressRegion = json_data['address']['addressRegion']
streetAddress = json_data['address']['streetAddress']
image_url = json_data['image']
room_types = parser.xpath("//a[contains(@href, '#RD')]/span/text()")
# Append the data to the all_data list
all_data.append({
"Name": name,
"Location": location,
"Price Range": priceRange,
"Rating": ratingValue,
"Review Count": reviewCount,
"Type": type_,
"Postal Code": postalCode,
"Address Locality": addressLocality,
"Country": addressCountry,
"Region": addressRegion,
"Street Address": streetAddress,
"URL": url,
"Image URL": image_url,
"Room Types": room_types
})
# After all URLs are processed, write the data into a CSV file
with open('booking_data.csv', 'w', newline='') as csvfile:
fieldnames = ["Name", "Location", "Price Range", "Rating", "Review Count", "Type", "Postal Code",
"Address Locality", "Country", "Region", "Street Address", "URL", "Image URL", "Room Types"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# Write the header
writer.writeheader()
# Write the rows of data
writer.writerows(all_data)
print("Data successfully saved to booking_data.csv")
اس مضمون میں بتایا گیا ہے کہ کس طرح ازگر کا استعمال کرتے ہوئے بکنگ ڈاٹ کام سے ہوٹل کے ڈیٹا کو کھرچنا ہے۔ ہم نے اینٹی سکریپنگ اقدامات کو نظرانداز کرنے کے لئے مناسب HTTP ہیڈر اور پراکسی استعمال کرنے کی اہمیت پر زور دیا۔ مزید تجزیہ کے لئے نکالا ہوا ڈیٹا CSV فائل میں محفوظ کیا جاسکتا ہے۔ جب ویب سائٹوں کو کھرچتے ہو تو ، خلاف ورزی سے بچنے کے لئے ہمیشہ خدمت کی شرائط کی جانچ کریں۔
تبصرے: 0