गाइड टू गूगल फ्लाइट्स डेटा स्क्रैपिंग के साथ स्क्रैपिंग

टिप्पणियाँ: 0

जब यात्रा योजना, प्रतियोगिता विश्लेषण या अनुसंधान उद्देश्यों की बात आती है, तो Google उड़ानों से उड़ान से संबंधित जानकारी को स्क्रैप करने से महत्वपूर्ण अंतर्दृष्टि मिल सकती है। यहाँ एक चरण-दर-चरण ट्यूटोरियल है कि कैसे पायथन, नाटककार और LXML पुस्तकालयों का उपयोग करके उड़ान की जानकारी को परिमार्जन किया जाए।

अपना पर्यावरण स्थापित करना

स्क्रैपिंग प्रक्रिया में गोता लगाने से पहले, सुनिश्चित करें कि आपके पास आवश्यक पायथन लाइब्रेरी स्थापित हैं:

pip install playwright
Pip install lxml

नाटककार का उपयोग करने के लिए, आपको ब्राउज़र बायनेरिज़ भी स्थापित करने की आवश्यकता है:

playwright install chromium

चरण-दर-चरण स्क्रैपिंग प्रक्रिया

हम Google फ्लाइट्स सर्च रिजल्ट पेज से फ्लाइट डेटा निकालने पर ध्यान केंद्रित करेंगे।

चरण 1। वेबसाइट की संरचना को समझना

Google उड़ानों से डेटा को प्रभावी ढंग से मानने के लिए, आपको वेबसाइट की HTML संरचना से खुद को परिचित करना होगा। यहां बताया गया है कि आप तत्वों का निरीक्षण करने और स्क्रैपिंग के लिए आवश्यक XPath अभिव्यक्तियों को पुनः प्राप्त करने के लिए Chrome Devtools का उपयोग कैसे कर सकते हैं:

  1. Google फ्लाइट्स पेज पर राइट-क्लिक करके और "निरीक्षण" का चयन करके Chrome Devtools खोलें, या शॉर्टकट Ctrl+Shift+I (Windows/Linux) या CMD+विकल्प+I (Mac) का उपयोग करें।
  2. पृष्ठ के विभिन्न हिस्सों पर मंडराकर तत्वों का निरीक्षण करें। यह Devtools में HTML संरचना को उजागर करेगा। उनकी विशेषताओं को देखने के लिए विशिष्ट तत्वों पर क्लिक करें, जो सटीक XPath अभिव्यक्तियाँ बनाने के लिए महत्वपूर्ण हैं।
  3. एलिमेंट्स पैनल में वांछित तत्व पर राइट-क्लिक करके XPath अभिव्यक्तियों को पुनः प्राप्त करें, "कॉपी" का चयन करें, और फिर "कॉपी XPath" चुनें। यह आपके क्लिपबोर्ड पर सीधे XPath अभिव्यक्ति को कॉपी करता है, जो आपके स्क्रैपिंग स्क्रिप्ट में उपयोग के लिए तैयार है।

उपयोग किए गए 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

नोट: यह XPath कई तत्वों को लौटाता है, प्रत्येक एक व्यक्तिगत उड़ान के अनुरूप है।

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 अनुरोध भेजना और नाटककार के साथ पृष्ठ सामग्री निकालना

हम वेब पेज के साथ बातचीत करने और इसकी सामग्री निकालने के लिए नाटककार का उपयोग करते हैं। यह दृष्टिकोण गतिशील सामग्री को संभालने में मदद करता है जो जावास्क्रिप्ट लोड हो सकता है।

नाटककार का उपयोग करने से जावास्क्रिप्ट द्वारा लोड की गई गतिशील सामग्री को संभालने में मदद मिलती है। यह एक हेडलेस ब्राउज़र लॉन्च करता है, URL को नेविगेट करता है, और पृष्ठ सामग्री को निकालता है।

from playwright.sync_api import sync_playwright

# Google उड़ानों खोज पृष्ठ के लिए URL
url = "https link"

def get_page_content(url):
    """नाटककार का उपयोग करके दिए गए URL की HTML सामग्री प्राप्त करता है।"""
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)  # हेडलेस मोड में ब्राउज़र लॉन्च करें
        context = browser.new_context()  # एक नया ब्राउज़र संदर्भ बनाएं
        page = context.new_page()  # एक नया पृष्ठ खोलें
        page.goto(url)  # निर्दिष्ट URL पर नेविगेट करें
        content = page.content()  # पृष्ठ सामग्री प्राप्त करें
        browser.close()  # ब्राउज़र बंद करें
    return content

# पृष्ठ सामग्री प्राप्त करें
page_content = get_page_content(url)

चरण 3। XPath

का उपयोग करके सामान्य विवरण निकालना

इसके बाद, हम सामान्य उड़ान विवरण जैसे प्रस्थान और रिटर्न डेट्स को निकालने के लिए LXML का उपयोग करके प्रतिक्रिया की HTML सामग्री को पार्स करते हैं।

from lxml import html

# पार्सर बनाना
tree = html.fromstring(page_content)

# XPATH का उपयोग करके सामान्य उड़ान विवरण निकालना
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]  # वापसी की तारीख प्राप्त करें

चरण 4। LXML का उपयोग करके विशिष्ट उड़ान डेटा निकालना

फिर हम पहचान किए गए XPath अभिव्यक्तियों के आधार पर विशिष्ट उड़ान जानकारी निकालने के लिए HTML सामग्री को पार्स करते हैं।

# उड़ान विवरण संग्रहीत करने के लिए एक खाली सूची को प्रारंभ करें
flights = []

# XPATH का उपयोग करके पार्स 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()

    # एक शब्दकोश के रूप में उड़ानों की सूची में निकाले गए विवरणों को जोड़ें
    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 को डेटा सहेजना

अंत में, हम आगे के विश्लेषण के लिए सीएसवी फ़ाइल में निकाले गए डेटा को सहेजने के लिए पायथन के अंतर्निहित सीएसवी मॉड्यूल का उपयोग करते हैं।

import csv

# CSV फ़ाइल पथ को परिभाषित करें
csv_file = 'google_flights.csv'

# CSV फील्डनाम को परिभाषित करें
fieldnames = ['Airway', 'Details', 'Departure', 'Arrival', 'Travel Time', 'Price', 'From', 'To', 'Departure Date', 'Return Date']

# CSV फ़ाइल में डेटा लिखना
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

# Google उड़ानों खोज पृष्ठ के लिए URL
url = "https link"

def get_page_content(url):
    """नाटककार का उपयोग करके दिए गए URL की HTML सामग्री प्राप्त करता है।"""
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)  # हेडफुल मोड में ब्राउज़र लॉन्च करें
        context = browser.new_context()  # एक नया ब्राउज़र संदर्भ बनाएं
        page = context.new_page()  # एक नया पृष्ठ खोलें
        page.goto(url)  # निर्दिष्ट URL पर नेविगेट करें
        page.wait_for_timeout(10000)  # पेज लोड पूरी तरह से सुनिश्चित करने के लिए 10 सेकंड की प्रतीक्षा करें
        content = page.content()  # पृष्ठ सामग्री प्राप्त करें
        browser.close()  # ब्राउज़र बंद करें
    return content

# पृष्ठ सामग्री प्राप्त करें
page_content = get_page_content(url)

# LXML का उपयोग करके HTML सामग्री को पार्स करें
tree = html.fromstring(page_content)

# उड़ान खोज विवरण निकालना
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]

# उड़ान विवरण संग्रहीत करने के लिए एक सूची शुरू करें
flights = []

# पार्सड 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()

    # सूची में उड़ान विवरण जोड़ें
    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_file = 'google_flights.csv'

# CSV फील्डनाम को परिभाषित करें
fieldnames = ['Airway', 'Details', 'Departure', 'Arrival', 'Travel Time', 'Price', 'From', 'To', 'Departure Date', 'Return Date']

# एक CSV फ़ाइल में निकाले गए उड़ान विवरण लिखना
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}")

डेटा को स्क्रैप करते समय पता लगाने के जोखिम को कम करने के लिए, अनुरोधों के बीच देरी को शामिल करना और प्रॉक्सी का उपयोग करना उचित है। देरी को लागू करने से मानव संपर्क की नकल करने में मदद मिलती है, जिससे वेबसाइटों के लिए स्वचालित स्क्रैपिंग गतिविधियों का पता लगाने में कठिन हो जाता है। प्रॉक्सी चयन के लिए, आवासीय गतिशील प्रॉक्सी की सिफारिश की जाती है क्योंकि वे एक उच्च विश्वास स्तर प्रदान करते हैं और उनके गतिशील प्रकृति के कारण अवरुद्ध होने की संभावना कम होती है। वैकल्पिक रूप से, आप स्थिर आईएसपी प्रॉक्सी के एक पूल का उपयोग कर सकते हैं, जो एक स्थिर और तेज कनेक्शन प्रदान करते हैं, जो आपके डेटा निष्कर्षण प्रक्रिया की विश्वसनीयता को बढ़ाता है। ये रणनीतियाँ सुरक्षात्मक उपायों को दूर करने में मदद करती हैं जो वेबसाइटें स्क्रैपिंग बॉट की पहचान करने और ब्लॉक करने के लिए उपयोग करती हैं।

टिप्पणियाँ:

0 टिप्पणियाँ