ازگر کا استعمال کرتے ہوئے بکنگ ڈاٹ کام کو کھرچنے کا طریقہ

تبصرے: 0

اس مضمون میں ، ہم یہ ظاہر کریں گے کہ بُکنگ ڈاٹ کام کی ویب سائٹ سے ازگر کے ساتھ ڈیٹا اکٹھا کرنے کا طریقہ۔ ہم معلومات حاصل کریں گے ، لیکن اس تک محدود نہیں ، ہوٹل کے نام ، درجہ بندی ، قیمتیں ، مقام کے پتے اور ان کی تفصیل شامل ہیں۔ فراہم کردہ کوڈ آپ کو HTML مواد کی تجزیہ کرکے اور ایمبیڈڈ JSON ڈیٹا کو نکال کر ہوٹل کے صفحات سے ڈیٹا بازیافت کرنے کی اجازت دیتا ہے۔

مطلوبہ لائبریریوں کو انسٹال کرنا

کوڈ کو بکنگ ڈاٹ کام سے ڈیٹا کو کھرچنے سے پہلے ، آپ کو ضروری ازگر لائبریریوں کو انسٹال کرنے کی ضرورت ہوگی۔ یہاں آپ مطلوبہ انحصار انسٹال کرسکتے ہیں:

  1. Requests لائبریری: اس کا استعمال ویب سائٹ پر HTTP درخواستیں بھیجنے اور صفحات کے HTML مواد کو لانے کے لئے کیا جاتا ہے۔
  2. LXML لائبریری: یہ HTML مواد کو پارس کرنے اور XPath کا استعمال کرتے ہوئے ڈیٹا نکالنے کے لئے استعمال ہوتا ہے۔
  3. JSON: ڈیٹا کو سنبھالنے کے لئے بلٹ میں ازگر ماڈیول استعمال کیا جاتا ہے۔
  4. CSV: فائل میں سکریپڈ ڈیٹا لکھنے کے لئے استعمال ہونے والا بلٹ ان ازگر ماڈیول۔

ضروری لائبریریوں کو انسٹال کرنے کے ل ، آپ pip استعمال کرسکتے ہیں:


pip install requests lxml

یہ واحد بیرونی لائبریریاں ہیں جن کی آپ کو ضرورت ہے ، اور باقی (JSON ، CSV) ازگر کے ساتھ پہلے سے نصب آتے ہیں۔

یو آر ایل اور ڈیٹا ڈھانچے کو سمجھنا

جب بکنگ ڈاٹ کام سے ڈیٹا کو کھرچتے ہو تو ، ویب پیج کی ساخت اور آپ جس طرح کا ڈیٹا نکالنا چاہتے ہیں اس کو سمجھنا ضروری ہے۔ بکنگ ڈاٹ کام پر ہر ہوٹل کے صفحے میں JSON-LD کی شکل میں سرایت شدہ ساختی اعداد و شمار شامل ہیں ، یہ ایک ایسا فارمیٹ ہے جو نام ، مقام اور قیمتوں جیسے تفصیلات کو آسانی سے نکالنے کی اجازت دیتا ہے۔ ہم اس ڈیٹا کو ختم کرتے رہیں گے۔

مرحلہ وار سکریپنگ عمل

چونکہ بکنگ ڈاٹ کام ایک متحرک سائٹ ہے اور خودکار اقدامات سے نمٹنے کے لئے اقدامات کو نافذ کرتی ہے ، لہذا ہم بلاک ہونے کے خطرے کے بغیر ہموار کھرچنے کو یقینی بنانے کے لئے مناسب HTTP ہیڈر اور پراکسی استعمال کریں گے۔

ہیڈر کے ساتھ 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 ڈیٹا کو نکالنا

درخواست بھیجنے کے بعد ، ہم ایل ایکس ایم ایل کا استعمال کرتے ہوئے 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 میں محفوظ کرنا

ایک بار جب ڈیٹا نکالا جاتا ہے تو ، ہم اسے مزید تجزیہ کے لئے 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 تبصرے