جب بات سفری منصوبہ بندی ، مسابقت کے تجزیہ یا تحقیقی مقاصد کی ہو تو ، گوگل پروازوں سے پرواز سے متعلق معلومات کو کھرچنے سے اہم بصیرت مل سکتی ہے۔ یہاں ایک مرحلہ وار ٹیوٹوریل ہے کہ ازگر ، ڈرامہ نگار اور ایل ایکس ایم ایل لائبریریوں کا استعمال کرتے ہوئے پرواز کی معلومات کو کھرچنے کا طریقہ۔
سکریپنگ کے عمل میں غوطہ لگانے سے پہلے ، یقینی بنائیں کہ آپ کے پاس ضروری ازگر کی لائبریریاں نصب ہیں:
pip install playwright
Pip install lxml
پلے رائٹ کو استعمال کرنے کے ل you ، آپ کو براؤزر بائنریز بھی انسٹال کرنے کی ضرورت ہے:
playwright install chromium
ہم گوگل فلائٹ سرچ نتائج کے صفحے سے فلائٹ ڈیٹا نکالنے پر توجہ دیں گے۔
گوگل پروازوں سے ڈیٹا کو مؤثر طریقے سے کھرچنے کے ل you ، آپ کو ویب سائٹ کے HTML ڈھانچے سے اپنے آپ کو واقف کرنا ہوگا۔ یہاں آپ عناصر کا معائنہ کرنے اور کھرچنے کے لئے ضروری ایکس پاتھ اظہار کو بازیافت کرنے کے لئے کروم ڈیوٹولز کا استعمال کیسے کرسکتے ہیں:
استعمال شدہ ایکس پاتھ اظہار کی فہرست:
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()
ہم ویب پیج کے ساتھ بات چیت کرنے اور اس کے مواد کو نکالنے کے لئے پلے رائٹ کا استعمال کرتے ہیں۔ یہ نقطہ نظر متحرک مواد کو سنبھالنے میں مدد کرتا ہے جو جاوا اسکرپٹ لوڈ ہوسکتا ہے۔
ڈرامہ نگار کا استعمال جاوا اسکرپٹ کے ذریعہ بھری ہوئی متحرک مواد کو سنبھالنے میں مدد کرتا ہے۔ یہ ایک ہیڈ لیس براؤزر لانچ کرتا ہے ، یو آر ایل پر تشریف لے جاتا ہے ، اور صفحہ کا مواد نکالتا ہے۔
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)
اگلا ، ہم 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
اس کے بعد ہم شناخت شدہ ایکس پاتھ اظہار کی بنیاد پر مخصوص پرواز کی معلومات نکالنے کے لئے 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
})
آخر میں ، ہم مزید تجزیہ کے لئے نکالے گئے ڈیٹا کو 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