گوگل پروازوں کے لئے گائیڈ کے ساتھ رہنمائی کریں ڈیٹا سکریپنگ کے ساتھ

تبصرے: 0

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

اپنے ماحول کو ترتیب دیں

سکریپنگ کے عمل میں غوطہ لگانے سے پہلے ، یقینی بنائیں کہ آپ کے پاس ضروری ازگر کی لائبریریاں نصب ہیں:

pip install playwright
Pip install lxml

پلے رائٹ کو استعمال کرنے کے ل you ، آپ کو براؤزر بائنریز بھی انسٹال کرنے کی ضرورت ہے:

playwright install chromium

قدم بہ قدم سکریپنگ عمل

ہم گوگل فلائٹ سرچ نتائج کے صفحے سے فلائٹ ڈیٹا نکالنے پر توجہ دیں گے۔

مرحلہ 1۔ ویب سائٹ کے ڈھانچے کو سمجھنا

گوگل پروازوں سے ڈیٹا کو مؤثر طریقے سے کھرچنے کے ل you ، آپ کو ویب سائٹ کے HTML ڈھانچے سے اپنے آپ کو واقف کرنا ہوگا۔ یہاں آپ عناصر کا معائنہ کرنے اور کھرچنے کے لئے ضروری ایکس پاتھ اظہار کو بازیافت کرنے کے لئے کروم ڈیوٹولز کا استعمال کیسے کرسکتے ہیں:

  1. گوگل فلائٹ پیج پر دائیں کلک کرکے اور "معائنہ" کا انتخاب کرکے کروم ڈیوٹولز کھولیں ، یا شارٹ کٹ سی ٹی آر ایل+شفٹ+آئی (ونڈوز/لینکس) یا سی ایم ڈی+آپشن+آئی (میک) کا استعمال کریں۔
  2. صفحے کے مختلف حصوں پر منڈلا کر عناصر کا معائنہ کریں۔ اس سے ڈیوٹولز میں ایچ ٹی ایم ایل ڈھانچے کو اجاگر کیا جائے گا۔ ان کی صفات کو دیکھنے کے لئے مخصوص عناصر پر کلک کریں ، جو درست ایکسپاتھ تاثرات پیدا کرنے کے لئے اہم ہیں۔
  3. عناصر پینل میں مطلوبہ عنصر پر دائیں کلک کرکے ، "کاپی" کا انتخاب کرتے ہوئے ، اور پھر "کاپی ایکسپاتھ" کا انتخاب کرتے ہوئے ایکس پاتھ کے اظہار کو بازیافت کریں۔ یہ آپ کے کلیپ بورڈ میں براہ راست XPath کے اظہار کی کاپی کرتا ہے ، جو آپ کے سکریپنگ اسکرپٹ میں استعمال کے لئے تیار ہے۔

استعمال شدہ ایکس پاتھ اظہار کی فہرست:

From Location: //input[@aria-label="Where from?"]/@value
To Location: //input[@aria-label="Where to?"]/@value
Departure Date: //input[@placeholder="Departure"]/@value
Return Date: //input[@placeholder="Return"]/@value

نوٹ: یہ ایکس پاتھ متعدد عناصر کو لوٹاتا ہے ، ہر ایک انفرادی پرواز کے مطابق ہوتا ہے۔

Flight Elements: //li[@class="pIav2d"]
Airway: .//div[@class="sSHqwe tPgKwe ogfYpf"]/span/text()
Details: .//span[@class="mv1WYe"]/@aria-label
Departure Time: .//span[@aria-describedby="gEvJbfc1583"]/span/text()
Arrival Time: .//span[@aria-describedby="gEvJbfc1584"]/span/text()
Travel Time: .//div[@class="gvkrdb AdWm1c tPgKwe ogfYpf"]/text()
Price: .//div[@class="YMlIz FpEdX"]/span/text()

مرحلہ 2۔ HTTP کی درخواستیں بھیجنا اور پیج مواد کو ڈرامہ نگار کے ساتھ نکالنا

ہم ویب پیج کے ساتھ بات چیت کرنے اور اس کے مواد کو نکالنے کے لئے پلے رائٹ کا استعمال کرتے ہیں۔ یہ نقطہ نظر متحرک مواد کو سنبھالنے میں مدد کرتا ہے جو جاوا اسکرپٹ لوڈ ہوسکتا ہے۔

ڈرامہ نگار کا استعمال جاوا اسکرپٹ کے ذریعہ بھری ہوئی متحرک مواد کو سنبھالنے میں مدد کرتا ہے۔ یہ ایک ہیڈ لیس براؤزر لانچ کرتا ہے ، یو آر ایل پر تشریف لے جاتا ہے ، اور صفحہ کا مواد نکالتا ہے۔

from playwright.sync_api import sync_playwright

# URL for the Google Flights search page
url = "https link"

def get_page_content(url):
    """Fetches the HTML content of the given URL using Playwright."""
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)  # Launch browser in headless mode
        context = browser.new_context()  # Create a new browser context
        page = context.new_page()  # Open a new page
        page.goto(url)  # Navigate to the specified URL
        content = page.content()  # Get the page content
        browser.close()  # Close the browser
    return content

# Fetch the page content
page_content = get_page_content(url)

مرحلہ 3۔ ایکسپاتھ کا استعمال کرتے ہوئے عام تفصیلات نکالنا

اگلا ، ہم LXML کا استعمال کرتے ہوئے جواب کے HTML مواد کو عام پرواز کی تفصیلات جیسے روانگی اور واپسی کی تاریخوں کو نکالنے کے لئے تجزیہ کرتے ہیں۔

from lxml import html

# Creating the parser
tree = html.fromstring(page_content)

# Extracting common flight details using XPath
from_location = tree.xpath('//input[@aria-label="Where from?"]/@value')[0]  # Get the 'from' location
to_location = tree.xpath('//input[@aria-label="Where to?"]/@value')[0]  # Get the 'to' location
departure_date = tree.xpath('//input[@placeholder="Departure"]/@value')[0]  # Get the departure date
return_date = tree.xpath('//input[@placeholder="Return"]/@value')[0]  # Get the return date

مرحلہ 4. LXML کا استعمال کرتے ہوئے مخصوص پرواز کا ڈیٹا نکالنا

اس کے بعد ہم شناخت شدہ ایکس پاتھ اظہار کی بنیاد پر مخصوص پرواز کی معلومات نکالنے کے لئے HTML مواد کی تجزیہ کرتے ہیں۔

# Initialize an empty list to store flight details
flights = []

# Extract flight elements from the parsed HTML using XPath
flight_elements = tree.xpath('//li[@class="pIav2d"]')

# Loop through each flight element and extract details
for flight in flight_elements:
    # Extract the airline name
    airway = flight.xpath('.//div[@class="sSHqwe tPgKwe ogfYpf"]/span/text()')[0].strip()
    
    # Extract flight details such as layovers
    details = flight.xpath('.//span[@class="mv1WYe"]/@aria-label')[0]
    
    # Extract the departure time
    departure = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[0].strip()
    
    # Extract the arrival time
    arrival = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[1].strip()
    
    # Extract the total travel time
    travel_time = flight.xpath('.//div[@class="gvkrdb AdWm1c tPgKwe ogfYpf"]/text()')[0].strip()
    
    # Extract the price of the flight
    price = flight.xpath('.//div[@class="U3gSDe"]/div/div[2]/span/text()')[0].strip()

    # Append the extracted details to the flights list as a dictionary
    flights.append({
        'Airway': airway,
        'Details': details,
        'Departure': departure,
        'Arrival': arrival,
        'Travel Time': travel_time,
        'Price': price,
        'From': from_location,
        'To': to_location,
        'Departure Date': departure_date,
        'Return Date': return_date
    })

مرحلہ 5. ڈیٹا کو سی ایس وی میں محفوظ کرنا

آخر میں ، ہم مزید تجزیہ کے لئے نکالے گئے ڈیٹا کو CSV فائل میں محفوظ کرنے کے لئے ازگر کے بلٹ میں CSV ماڈیول کا استعمال کرتے ہیں۔

import csv

# Define CSV file path
csv_file = 'google_flights.csv'

# Define CSV fieldnames
fieldnames = ['Airway', 'Details', 'Departure', 'Arrival', 'Travel Time', 'Price', 'From', 'To', 'Departure Date', 'Return Date']

# Writing data to CSV file
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    for flight in flights:
        writer.writerow(flight)

print(f"Data saved to {csv_file}")

ہر چیز کو ایک ساتھ رکھنا

from playwright.sync_api import sync_playwright
from lxml import html
import csv

# URL for the Google Flights search page
url = "https link"

def get_page_content(url):
    """Fetches the HTML content of the given URL using Playwright."""
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)  # Launch browser in headful mode
        context = browser.new_context()  # Create a new browser context
        page = context.new_page()  # Open a new page
        page.goto(url)  # Navigate to the specified URL
        page.wait_for_timeout(10000)  # Wait for 10 seconds to ensure the page loads completely
        content = page.content()  # Get the page content
        browser.close()  # Close the browser
    return content

# Fetch the page content
page_content = get_page_content(url)

# Parse the HTML content using lxml
tree = html.fromstring(page_content)

# Extracting flight search details
from_location = tree.xpath('//input[@aria-label="Where from?"]/@value')[0]
to_location = tree.xpath('//input[@aria-label="Where to?"]/@value')[0]
departure_date = tree.xpath('//input[@placeholder="Departure"]/@value')[0]
return_date = tree.xpath('//input[@placeholder="Return"]/@value')[0]

# Initialize a list to store flight details
flights = []

# Extract flight elements from the parsed HTML
flight_elements = tree.xpath('//li[@class="pIav2d"]')
for flight in flight_elements:
    airway = flight.xpath('.//div[@class="sSHqwe tPgKwe ogfYpf"]/span/text()')[0].strip()
    details = flight.xpath('.//span[@class="mv1WYe"]/@aria-label')[0]
    departure = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[0].strip()
    arrival = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[1].strip()
    travel_time = flight.xpath('.//div[@class="gvkrdb AdWm1c tPgKwe ogfYpf"]/text()')[0].strip()
    price = flight.xpath('.//div[@class="U3gSDe"]/div/div[2]/span/text()')[0].strip()

    # Append flight details to the list
    flights.append({
        'Airway': airway,
        'Details': details,
        'Departure': departure,
        'Arrival': arrival,
        'Travel Time': travel_time,
        'Price': price,
        'From': from_location,
        'To': to_location,
        'Departure Date': departure_date,
        'Return Date': return_date
    })

# Define the CSV file path
csv_file = 'google_flights.csv'

# Define CSV fieldnames
fieldnames = ['Airway', 'Details', 'Departure', 'Arrival', 'Travel Time', 'Price', 'From', 'To', 'Departure Date', 'Return Date']

# Writing the extracted flight details to a CSV file
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()  # Write the header row
    for flight in flights:
        writer.writerow(flight)  # Write each flight's details

print(f"Data saved to {csv_file}")

اعداد و شمار کو ختم کرتے وقت پتہ لگانے کے خطرے کو کم کرنے کے ل requests ، درخواستوں کے مابین تاخیر کو شامل کرنے اور پراکسیوں کو استعمال کرنے کا مشورہ دیا جاتا ہے۔ تاخیر کو نافذ کرنے سے انسانی تعامل کی نقل کرنے میں مدد ملتی ہے ، جس سے ویب سائٹوں کو خودکار سکریپنگ سرگرمیوں کا پتہ لگانا مشکل ہوجاتا ہے۔ پراکسی انتخاب کے لئے ، رہائشی متحرک پراکسیوں کی سفارش کی جاتی ہے کیونکہ وہ اعلی اعتماد کی سطح کی پیش کش کرتے ہیں اور ان کی متحرک نوعیت کی وجہ سے مسدود ہونے کا امکان کم ہوتا ہے۔ متبادل کے طور پر ، آپ جامد ISP پراکسیوں کا ایک تالاب استعمال کرسکتے ہیں ، جو آپ کے ڈیٹا نکالنے کے عمل کی وشوسنییتا کو بڑھاتے ہوئے مستحکم اور تیز کنکشن فراہم کرتے ہیں۔ یہ حکمت عملی حفاظتی اقدامات سے بچنے میں مدد کرتی ہے جو ویب سائٹیں کھرچنے والی بوٹس کی شناخت اور بلاک کرنے کے لئے استعمال کرتی ہیں۔

تبصرے:

0 تبصرے