Treoir maidir le Sonraí Google Flights Scraping le Python

Tuairimí: 0

Nuair a bhaineann sé le pleanáil taistil, le hanailís iomaíochta nó le críocha taighde, d'fhéadfadh léargas suntasach a bheith ar fhaisnéis a bhaineann le heitilt ó Google Flights. Seo rang teagaisc céim ar chéim ar conas faisnéis eitilte a scrape ag baint úsáide as leabharlanna Python, drámadóra agus LXML.

Do thimpeallacht a chur ar bun

Sula dtéann tú isteach sa phróiseas scríobtha, cinntigh go bhfuil na leabharlanna Python riachtanacha suiteáilte agat:

pip install playwright
Pip install lxml

Chun drámadóir a úsáid, ní mór duit freisin na binaries brabhsálaí a shuiteáil:

playwright install chromium

Próiseas scríobtha céim ar chéim

Díreoimid ar shonraí eitilte a bhaint as leathanach Torthaí Cuardaigh Google Flights.

Céim 1. Tuiscint a fháil ar struchtúr an láithreáin ghréasáin

Chun sonraí ó Google Flights a scríobadh go héifeachtach, ní mór duit tú féin a chur ar an eolas faoi struchtúr HTML an láithreáin ghréasáin. Seo an chaoi ar féidir leat chrome devtools a úsáid chun eilimintí a iniúchadh agus na habairtí riachtanacha XPath a fháil chun scríobadh:

  1. Oscail Chrome DevTools trí chliceáil ar dheis ar leathanach Google Flights agus "Iniúchadh" a roghnú, nó bain úsáid as an Ctrl+Shift+I (Windows/Linux) nó CMD+Rogha+I (MAC).
  2. Iniúchadh a dhéanamh ar ghnéithe trí chodanna éagsúla den leathanach a hovering. Cuirfidh sé seo béim ar an struchtúr HTML sna Devtools. Cliceáil ar na heilimintí sonracha chun a gcuid tréithe a fheiceáil, atá ríthábhachtach chun abairtí cruinne XPath a chruthú.
  3. Déan na habairtí xpath a aisghabháil trí chliceáil ar dheis ar an ngné inmhianaithe sa phainéal Eilimintí, ag roghnú "cóip", agus ansin ag roghnú "Copy Xpath". Cóipeálann sé seo an slonn XPath go díreach chuig do ghearrthaisce, réidh le húsáid i do script scríobtha.

Liosta na n -abairtí XPath a úsáideadh:

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

Tabhair faoi deara: Filleann an XPath seo ilghnéithe, gach ceann acu ag teacht le heitilt aonair.

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()

Céim 2. Iarratais HTTP a sheoladh agus ábhar leathanaigh a bhaint le drámadóir

Bainimid úsáid as drámadóir chun idirghníomhú leis an leathanach gréasáin agus a ábhar a bhaint. Cuidíonn an cur chuige seo le hábhar dinimiciúil a láimhseáil a d'fhéadfadh JavaScript a luchtú.

Cabhraíonn úsáid drámadóra le hábhar dinimiciúil atá luchtaithe ag JavaScript a láimhseáil. Seolann sé brabhsálaí gan dídean, téann sé chuig an URL, agus baintear ábhar an leathanaigh as.

from playwright.sync_api import sync_playwright

# URL don Leathanach Cuardaigh Google Flights
url = "https link"

def get_page_content(url):
    """Féachann sé ar ábhar HTML an URL a thugtar ag baint úsáide as drámadóir."""
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)  # Brabhsálaí a sheoladh i mód gan dídean
        context = browser.new_context()  # Comhthéacs Brabhsálaí Nua a chruthú
        page = context.new_page()  # Leathanach nua a oscailt
        page.goto(url)  # Téigh go dtí an URL sonraithe
        content = page.content()  # Faigh ábhar an leathanaigh
        browser.close()  # Dún an brabhsálaí
    return content

# Faigh ábhar an leathanaigh
page_content = get_page_content(url)

Céim 3. Sonraí coitianta a bhaint ag baint úsáide as XPath

Ansin, déanaimid an t -ábhar HTML den fhreagra a pharsáil ag úsáid LXML chun sonraí eitilte coitianta a bhaint amach mar dhátaí imeachta agus fillte.

from lxml import html

# Ag cruthú an pharsálaí
tree = html.fromstring(page_content)

# Sonraí eitilte coitianta a bhaint ag baint úsáide as xpath
from_location = tree.xpath('//input[@aria-label="Where from?"]/@value')[0]  # Faigh an suíomh 'Ó'
to_location = tree.xpath('//input[@aria-label="Where to?"]/@value')[0]  # Faigh an suíomh 'go'
departure_date = tree.xpath('//input[@placeholder="Departure"]/@value')[0]  # Faigh an dáta imeachta
return_date = tree.xpath('//input[@placeholder="Return"]/@value')[0]  # Faigh an dáta fillte

Céim 4. Sonraí eitilte sonracha a bhaint ag baint úsáide as LXML

Ansin déanaimid an t -ábhar HTML a pharsáil chun faisnéis eitilte ar leith a bhaint amach bunaithe ar na habairtí XPath aitheanta.

# Tús a chur le liosta folamh chun sonraí eitilte a stóráil
flights = []

# Eilimintí eitilte a bhaint as an HTML parsáilte ag úsáid xpath
flight_elements = tree.xpath('//li[@class="pIav2d"]')

# Lúb trí gach eilimint eitilte agus sonraí sliocht
for flight in flight_elements:
    # Sliocht ainm na haerlíne
    airway = flight.xpath('.//div[@class="sSHqwe tPgKwe ogfYpf"]/span/text()')[0].strip()
    
    # Sliocht Sonraí Eitilte mar Layovers
    details = flight.xpath('.//span[@class="mv1WYe"]/@aria-label')[0]
    
    # An t -am imeachta a bhaint amach
    departure = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[0].strip()
    
    # Sliocht an t -am teachta
    arrival = flight.xpath('.//span[@jscontroller="cNtv4b"]/span/text()')[1].strip()
    
    # Sliocht an t -am taistil iomlán
    travel_time = flight.xpath('.//div[@class="gvkrdb AdWm1c tPgKwe ogfYpf"]/text()')[0].strip()
    
    # Sliocht praghas na heitilte
    price = flight.xpath('.//div[@class="U3gSDe"]/div/div[2]/span/text()')[0].strip()

    # Cuir na sonraí eastósctha ar an liosta eitiltí mar fhoclóir
    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
    })

Céim 5. Sonraí a shábháil ar CSV

Mar fhocal scoir, bainimid úsáid as modúl CSV tógtha Python chun na sonraí eastósctha a shábháil i gcomhad CSV le haghaidh tuilleadh anailíse.

import csv

# Sainmhínigh cosán comhad CSV
csv_file = 'google_flights.csv'

# Sainmhínigh ainmneacha allamuigh CSV
fieldnames = ['Airway', 'Details', 'Departure', 'Arrival', 'Travel Time', 'Price', 'From', 'To', 'Departure Date', 'Return Date']

# Sonraí a scríobh chuig comhad 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}")

Gach rud a chur le chéile

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

# URL don Leathanach Cuardaigh Google Flights
url = "https link"

def get_page_content(url):
    """Féachann sé ar ábhar HTML an URL a thugtar ag baint úsáide as drámadóir."""
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)  # Brabhsálaí a sheoladh i mód ceannródaíoch
        context = browser.new_context()  # Comhthéacs Brabhsálaí Nua a chruthú
        page = context.new_page()  # Leathanach nua a oscailt
        page.goto(url)  # Téigh go dtí an URL sonraithe
        page.wait_for_timeout(10000)  # Fan ar feadh 10 soicind chun a chinntiú go n -ualaí an leathanach go hiomlán
        content = page.content()  # Faigh ábhar an leathanaigh
        browser.close()  # Dún an brabhsálaí
    return content

#Faigh ábhar an leathanaigh
page_content = get_page_content(url)

# Parse an t -ábhar HTML ag úsáid LXML
tree = html.fromstring(page_content)

# Sonraí cuardaigh eitilte a bhaint
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]

# Tús a chur le liosta chun sonraí eitilte a stóráil
flights = []

# Eilimintí eitilte a bhaint as an html parsáilte
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()

    # Cuir sonraí eitilte ar an liosta
    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
    })

# Sainmhínigh an cosán comhaid CSV
csv_file = 'google_flights.csv'

#Sainmhínigh ainmneacha allamuigh CSV
fieldnames = ['Airway', 'Details', 'Departure', 'Arrival', 'Travel Time', 'Price', 'From', 'To', 'Departure Date', 'Return Date']

# Scríobh na sonraí eitilte eastósctha chuig comhad CSV
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()  # Scríobh an tsraith ceanntásca
    for flight in flights:
        writer.writerow(flight)  # Scríobh sonraí gach eitilte

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

Chun an baol braite a laghdú agus sonraí á scríobadh, tá sé inmholta moilleanna a ionchorprú idir iarratais agus seachvótálaithe a úsáid. Cuidíonn cur i bhfeidhm moilleanna le hidirghníomhaíocht an duine a aithris, rud a chiallaíonn go bhfuil sé níos deacra do shuíomhanna gréasáin gníomhaíochtaí scríobtha uathoibrithe a bhrath. Maidir le roghnú seachfhreastalaí, moltar seachfhreastalaithe dinimiciúla cónaithe toisc go dtugann siad leibhéal ard iontaobhais agus is lú an seans go gcuirfear bac orthu mar gheall ar a nádúr dinimiciúil. Mar mhalairt air sin, is féidir leat úsáid a bhaint as linn de sheachvótálaithe ISP statach, a sholáthraíonn nasc cobhsaí agus tapa, ag cur le hiontaofacht do phróisis eastósctha sonraí. Cabhraíonn na straitéisí seo le bearta cosanta a sheachaint a úsáideann láithreáin ghréasáin chun róbónna scríobtha a aithint agus a bhlocáil.

Tuairimí:

0 tuairimí