Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere

Ko te kaituhi o te tuhinga, ko te whakamaoritanga e whakaputahia ana e matou i tenei ra, e kii ana ko tana whainga ko te korero mo te whakawhanaketanga o te miihini tukutuku i Python ma te whakamahi i te Selenium, e rapu ana i nga utu tiiti rererangi. Ina rapu tikiti, ka whakamahia nga ra ngawari (+- 3 nga ra e pa ana ki nga ra kua tohua). Ka tiakina e te kaikiri nga hua rapu ki roto i te konae Excel ka tukuna he imeera ki te tangata nana i whakahaere te rapu me te whakarāpopototanga o nga mea i kitea e ratou. Ko te whainga o tenei kaupapa he awhina i nga kaimori haere ki te rapu utu pai.

Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere

Mena, i a koe e mohio ana ki nga korero, ka ngaro koe, tirohia tenei tuhinga.

He aha ta tatou e rapu ai?

E waatea ana koe ki te whakamahi i te punaha i whakaahuatia i konei i runga i to hiahia. Hei tauira, i whakamahia e ahau ki te rapu haerenga wiki me nga tikiti ki taku kainga. Mena kei te tino hiahia koe ki te rapu tikiti whai hua, ka taea e koe te whakahaere i te tuhinga i runga i te tūmau (maamaa tūmau, mo te 130 rubles i te marama, he tino pai mo tenei) me te whakarite kia rere kotahi, e rua ranei ia ra. Ka tukuna atu nga hua rapu ki a koe ma te imeera. I tua atu, ka tūtohu ahau ki te whakarite i nga mea katoa kia tiakina e te tuhinga he konae Excel me nga hua rapu i roto i te kōpaki Dropbox, ka taea e koe te tiro i aua konae mai i nga waahi katoa me nga wa katoa.

Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere
Kare ano au i kite i nga reeti me nga hapa, engari ki taku whakaaro ka taea

I te wa e rapu ana, kua whakahuahia ake nei, ka whakamahia he "ra ngawari"; ka kitea e te tuhinga nga tuku kei roto i nga ra e toru mai i nga ra kua tohua. Ahakoa i te wa e whakahaere ana i te tuhinga, ka rapua e ia nga tuku i roto i te huarahi kotahi, he ngawari ki te whakarereke kia taea ai e ia te kohi raraunga mo te maha o nga huarahi rererangi. Ma tana awhina, ka taea e koe te rapu i nga reeti pohehe; he mea tino pai enei kitenga.

He aha koe ka hiahia ai ki tetahi atu kaikoi tukutuku?

I taku tiimata tuatahi ki te tarai i te paetukutuku, he pono kaore au i tino aro atu ki tera. I hiahia ahau ki te mahi i etahi atu kaupapa i roto i te wahanga o te whakatauira matapae, te wetewete putea, a, tera pea, i te waahi o te wetewete i te tae kare-a-roto o nga tuhinga. Engari i puta mai he tino pai ki te whakaaro me pehea te hanga kaupapa e kohi raraunga mai i nga paetukutuku. I a au e ruku ana ki tenei kaupapa, ka mohio ahau ko te weriweri tukutuku te "miihini" o te Ipurangi.

Ka whakaaro pea koe he korero maia rawa tenei. Engari whakaarohia i timata a Google me te kaituhi tukutuku i hangaia e Larry Page ma te whakamahi i te Java me te Python. Kei te tirotiro haere nga karetao Google i te Ipurangi, e ngana ana ki te tuku ki ana kaiwhakamahi nga whakautu pai ki a raatau patai. He maha nga whakamahinga o te wetewete tukutuku, ahakoa kei te pirangi koe ki tetahi atu mea i roto i te Raraunga Raraunga, ka hiahia koe ki etahi pukenga ki te tango i nga raraunga e hiahia ana koe ki te tātari.

I kitea e ahau etahi o nga tikanga i whakamahia i konei i roto i te whakamiharo te pukapuka e pā ana ki te wetewete tukutuku, i riro mai i a au. He maha nga tauira ngawari me nga whakaaro mo te whakamahinga o nga mea i akohia e koe. I tua atu, he upoko tino pai mo te karo i nga arowhai reCaptcha. I puta mai he korero ki ahau, na te mea kaore au i mohio he taputapu motuhake me nga ratonga katoa mo te whakaoti rapanga penei.

He pai ki a koe te haere?!

Ki te patai ngawari me te kore kino i tukuna i te taitara o tenei waahanga, ka rongo koe i te whakautu pai, me etahi korero e rua mai i nga haerenga o te tangata i pataia. Ko te nuinga o tatou e whakaae ana he huarahi pai te haere ki te ruku i a koe ki nga taiao ahurea hou me te whakawhanui i o tirohanga. Heoi, ki te patai koe ki tetahi mehemea e pai ana ratou ki te rapu tikiti rererangi, ka tino mohio ahau kaore e tino pai te whakautu. Ko te mea pono, ka awhina mai a Python ki konei.

Ko te mahi tuatahi hei whakaoti i te huarahi ki te hanga i tetahi punaha rapu korero i runga i nga tikiti rererangi ko te kowhiri i tetahi papaahi tika hei tango korero. Ko te whakaoti i tenei raruraru ehara i te mea ngawari ki ahau, engari i te mutunga i whiriwhiria e ahau te ratonga Kayak. I whakamatau ahau i nga ratonga a Momondo, Skyscanner, Expedia, me etahi atu, engari ko nga tikanga tiaki karetao i runga i enei rauemi kaore e taea te uru. I muri i nga whakamatautau maha, i te wa e pa ana ahau ki nga rama waka, nga huarahi hikoi me nga paihikara, e ngana ana ki te whakapae i nga punaha he tangata ahau, ka whakatau ahau he pai rawa atu a Kayak mo au, ahakoa te mea ahakoa he maha rawa nga wharangi kua utaina. i roto i te wa poto, ka timata ano nga arowhai. I taea e au te tuku tono a te karetao ki te waahi i nga wa 4 ki te 6 haora, a he pai nga mea katoa. Mai i ia wa, ka ara ake nga uaua i te wa e mahi ana me Kayak, engari mena ka tiimata koe ki te tarai i a koe me nga arowhai, katahi koe ka mahi ma te ringa ka whakarewahia te karetao, tatari ranei mo etahi haora ka mutu nga arowhai. Mena e tika ana, ka taea e koe te whakarereke i te waehere mo tetahi atu turanga, a, ki te pera koe, ka taea e koe te whakaatu i roto i nga korero.

Mena kei te timata koe ki te tarai i te paetukutuku me te kore e mohio he aha etahi o nga paetukutuku e tohe ana ki a ia, na i mua i to tiimata i to kaupapa tuatahi i tenei waahi, me pai koe ki te rapu i a Google mo nga kupu "whakatikatika tukutuku" . Ka mutu pea o whakamatautau ki to whakaaro mena ka mahi poauau koe ki te tarai paetukutuku.

Getting Started

Anei he tirohanga whanui mo nga mea ka puta i roto i ta maatau waehere scraper paetukutuku:

  • Kawemai i nga whare pukapuka e hiahiatia ana.
  • Te whakatuwhera i te ripa Google Chrome.
  • Karangahia he mahi ka tiimata te karetao, ka tukuna nga taone me nga ra ka whakamahia i te rapu tikiti.
  • Ko tenei mahi ka tango i nga hua rapu tuatahi, ka tohua ma te pai, ka paato i te paatene hei uta atu i nga hua.
  • Ko tetahi atu mahi ka kohi raraunga mai i te wharangi katoa ka whakahoki i te anga raraunga.
  • Ko nga waahanga e rua o mua ka mahia ma te whakamahi i nga momo tohatoha ma te utu tikiti (iti) me te tere tere (tere).
  • Ka tukuna he īmēra ki te kaiwhakamahi o te hōtuhi kei roto he whakarāpopototanga o ngā utu tīkiti (tikiti iti rawa me te utu toharite), ā, ka tiakina he anga raraunga me nga korero kua tohua e nga tohu e toru kua whakahuahia ake nei hei konae Excel.
  • Ko nga mahi katoa i runga ake ka mahia i roto i te huringa i muri i te waa kua tohua.

Me tohu ko nga kaupapa Selenium katoa ka timata me te taraiwa tukutuku. Ka whakamahi ahau Chromedriver, Ka mahi tahi ahau me Google Chrome, engari tera ano etahi atu whiringa. He rongonui ano a PhantomJS me Firefox. I muri i te tango i te taraiwa, me tuu e koe ki roto i te kōpaki e tika ana, ka oti te whakarite mo tana whakamahinga. Ko nga rarangi tuatahi o ta maatau tuhinga ka whakatuwhera i te ripa Chrome hou.

Kia maumahara kei roto i taku korero kaore au e ngana ana ki te whakatuwhera i nga waahi hou mo te rapu utu nui mo nga tikiti rererangi. He maha atu nga tikanga mo te rapu mo enei tuku. Kei te hiahia noa ahau ki te tuku ki nga kaipanui o tenei rauemi he huarahi ngawari engari whaihua hei whakaoti i tenei raru.

Anei te waehere i korerohia e matou i runga ake nei.

from time import sleep, strftime
from random import randint
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import smtplib
from email.mime.multipart import MIMEMultipart

# Используйте тут ваш путь к chromedriver!
chromedriver_path = 'C:/{YOUR PATH HERE}/chromedriver_win32/chromedriver.exe'

driver = webdriver.Chrome(executable_path=chromedriver_path) # Этой командой открывается окно Chrome
sleep(2)

I te timatanga o te waehere ka taea e koe te kite i nga whakahau kawemai kete e whakamahia ana puta noa i to maatau kaupapa. Na, randint whakamahia ki te hanga i te karetao "moe" mo te tau matapōkere o hēkona i mua i te tīmata i te mahi rapu hou. I te nuinga o te waa, kaore e taea e tetahi karetao te mahi me te kore tenei. Mena ka whakahaerehia e koe te waehere i runga ake nei, ka tuwhera he matapihi Chrome, ka whakamahia e te bot ki te mahi me nga waahi.

Me mahi he whakamatautau iti ka whakatuwhera i te paetukutuku kayak.com ki tetahi matapihi motuhake. Ka tohua e matou te taone e rere atu ai matou, me te taone e hiahia ana matou ki te haere, me nga ra rere. I te wa e whiriwhiri ana i nga ra, me mohio kei te whakamahia te awhe o +-3 ra. I tuhia e ahau te waehere me te whakaaro ki nga mea e mahia ana e te pae hei whakautu ki aua tono. Mena, hei tauira, me rapu koe mo nga tikiti mo nga ra kua tohua, katahi ka nui te tupono ka whakarereke koe i te waehere bot. Ina korero ahau mo te waehere, ka hoatu e au nga whakamarama e tika ana, engari ki te raruraru koe, me mohio mai.

Inaianei paatohia te paatene rapu ka titiro ki te hono i te pae wāhitau. Kia rite ki te hononga e whakamahia ana e ahau i roto i te tauira i raro nei e kii ana te taurangi kayak, e pupuri ana i te URL, ka whakamahia te tikanga get taraiwa tukutuku. I muri i te panui i te paatene rapu, ka puta nga hua ki te whaarangi.

Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere
I taku whakamahi i te whakahau get neke atu i te rua, e toru nga wa i roto i etahi meneti, ka tonohia ahau ki te whakaoti i te manatoko ma te whakamahi i te reCaptcha. Ka taea e koe te tuku a-ringa i tenei haki ka haere tonu ki te whakamatau kia whakatauhia e te punaha ki te whakahaere haki hou. I taku whakamatautau i te tuhinga, te ahua nei i pai te haere o te waahi rapu tuatahi, na mena ka pirangi koe ki te whakamatau i te waehere, me tirotiro-a-ringa noa koe me te tuku i te waehere kia rere, ma te whakamahi i nga waa roa i waenga i nga waahi rapu. A, ki te whakaaro koe, kaore pea te tangata e hiahia ki nga korero mo nga utu tikiti kua riro mai i nga meneti 10 i waenga i nga mahi rapu.

Te mahi me te wharangi ma te whakamahi XPath

Na, ka whakatuwherahia e matou he matapihi ka utaina te waahi. Ki te tiki utu me etahi atu korero, me whakamahi tatou i te hangarau XPath, nga kaiwhiri CSS ranei. I whakatau ahau ki te piri ki a XPath kaore au i mohio ki te whakamahi i nga kaiwhiriwhiri CSS, engari ka taea te mahi pera. Ko te whakatere huri noa i tetahi wharangi ma te XPath he uaua, ahakoa ka whakamahi koe i nga tikanga i whakaahuatia e au tenei Tuhinga, i uru ki te kape i nga tohu tohu mai i te waehere wharangi, i mohio ahau ehara tenei i te huarahi tino pai ki te uru atu ki nga waahanga e tika ana. Ma te ara, i roto tenei Ko te pukapuka he tino whakamaarama mo te mahi me nga wharangi ma te whakamahi i nga kaiwhiriwhiri XPath me CSS. Koinei te ahua o te tikanga taraiwa tukutuku e pa ana.

Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere
Na, me mahi tonu tatou i runga i te karetao. Me whakamahi tatou i nga kaha o te hotaka ki te kowhiri i nga tikiti iti rawa atu. I te ahua e whai ake nei, ko te waehere whiriwhiri XPath kua tohua ki te whero. Hei tiro i te waehere, me paato-matau koe ki te huānga wharangi e pirangi ana koe ka kowhiri i te whakahau Tirotiro mai i te tahua ka puta. Ka taea te karangahia tenei whakahau mo nga huānga wharangi rereke, ka whakaatuhia te waehere ka whakaatuhia ki te kaitirotiro waehere.

Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere
Tirohia te waehere wharangi

Kia kitea te whakapumautanga o aku whakaaro mo nga huakore o te kape i nga kaiwhiriwhiri mai i te waehere, me aro ki nga ahuatanga e whai ake nei.

Koinei te mea ka whiwhi koe ina kape koe i te waehere:

//*[@id="wtKI-price_aTab"]/div[1]/div/div/div[1]/div/span/span

Hei kape i tetahi mea penei, me paato-matau koe ki te waahanga o te waehere e pirangi ana koe ka kowhiria te Copy> Copy XPath whakahau mai i te tahua ka puta.

Anei te mea i whakamahia e au ki te tautuhi i te paatene Tino Utu:

cheap_results = ‘//a[@data-code = "price"]’

Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere
Tārua Whakahau > Tārua XPath

E tino kitea ana ko te waahanga tuarua he maamaa ake te ahua. Ina whakamahia, ka rapua he huānga a kei a ia te huanga data-code, rite price. Ina whakamahi i te whiringa tuatahi, ka rapua te huānga id e rite ana ki wtKI-price_aTab, me te ahua o te ara XPath ki te huānga /div[1]/div/div/div[1]/div/span/span. Ko te patai XPath penei ki tetahi wharangi ka mahi, engari kotahi anake. Ka taea e au te korero i tenei wa tonu id ka huri i te wa ka utaina te wharangi. Te raupapa pūāhua wtKI ka huri hihiri i nga wa katoa ka utaina te wharangi, no reira ka kore te waehere e whakamahi ana i muri i te utaina ano o te wharangi. Na, tangohia etahi wa ki te mohio ki a XPath. Ka pai tenei matauranga ki a koe.

Engari, me mahara ko te kape i nga kaiwhiriwhiri XPath ka whai hua i te wa e mahi ana me nga waahi ngawari noa, a ki te pai koe ki tenei, kaore he he.

Inaianei me whakaaro me aha mena ka hiahia koe ki te tiki i nga hua rapu katoa i roto i nga rarangi maha, i roto i te rarangi. Tino ngawari. Ko ia hua kei roto i tetahi mea me tetahi akomanga resultWrapper. Ko te uta i nga hua katoa ka taea te mahi i roto i te kohanga rite ki tera e whakaatuhia ana i raro nei.

Me tohu mena ka mohio koe ki nga korero o runga ake nei, me maarama koe ki te nuinga o nga waehere ka tirohia e matou. I te wa e haere ana tenei waehere, ka uru atu ki nga mea e hiahiatia ana (ko te mea, ko te huānga e takai ai te hua) ma te whakamahi i etahi momo tikanga tohu ara (XPath). Ka mahia tenei kia whiwhi ai i nga tuhinga o te huānga me te tuu ki roto i tetahi ahanoa ka taea te panui raraunga (i whakamahia tuatahi flight_containers, ka- flights_list).

Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere
Ko nga rarangi tuatahi e toru e whakaatuhia ana ka tino kitea e matou nga mea katoa e hiahiatia ana e matou. Heoi ano, he pai ake a matou huarahi ki te tiki korero. Me tango takitahi nga raraunga mai ia huānga.

Haere ki te mahi!

Ko te huarahi ngawari ki te tuhi i tetahi mahi ko te uta i etahi atu hua, na reira ka timata tatou. Kei te pirangi ahau ki te whakanui ake i te maha o nga rererangi ka whiwhi korero te hotaka, me te kore e whakapae i te ratonga e arahi ana ki te tirotiro, na reira ka paato ahau i te paatene Uta atu nga hua i ia wa ka whakaatuhia te wharangi. I roto i tenei waehere, me aro koe ki te poraka try, i tapirihia e au na te mea i etahi wa kaore te paatene e uta tika. Mena ka tutaki ano koe ki tenei, korerohia nga waea ki tenei mahi i roto i te waehere mahi start_kayak, ka tirohia e tatou i raro nei.

# Загрузка большего количества результатов для того, чтобы максимизировать объём собираемых данных
def load_more():
    try:
        more_results = '//a[@class = "moreButton"]'
        driver.find_element_by_xpath(more_results).click()
        # Вывод этих заметок в ходе работы программы помогает мне быстро выяснить то, чем она занята
        print('sleeping.....')
        sleep(randint(45,60))
    except:
        pass

Inaianei, i muri i te roanga o te wetewete i tenei mahi (i etahi wa ka kahakina atu ahau), kua reri matou ki te whakapuaki i tetahi mahi ka waruhia te wharangi.

Kua kohia e ahau te nuinga o nga mea e hiahiatia ana i roto i te mahi e whai ake nei e kiia nei page_scrape. I etahi wa ka whakakotahihia nga raraunga ara kua hoki mai, no reira ka whakamahi ahau i tetahi tikanga ngawari hei wehe. Hei tauira, ina whakamahi au i nga taurangi mo te wa tuatahi section_a_list и section_b_list. Ko ta maatau mahi he whakahoki anga raraunga flights_df, ma tenei ka taea e tatou te wehe i nga hua ka puta mai i nga tikanga tohatoha raraunga rereke katahi ka whakakotahihia.

def page_scrape():
    """This function takes care of the scraping part"""
    
    xp_sections = '//*[@class="section duration"]'
    sections = driver.find_elements_by_xpath(xp_sections)
    sections_list = [value.text for value in sections]
    section_a_list = sections_list[::2] # так мы разделяем информацию о двух полётах
    section_b_list = sections_list[1::2]
    
    # Если вы наткнулись на reCaptcha, вам может понадобиться что-то предпринять.
    # О том, что что-то пошло не так, вы узнаете исходя из того, что вышеприведённые списки пусты
    # это выражение if позволяет завершить работу программы или сделать ещё что-нибудь
    # тут можно приостановить работу, что позволит вам пройти проверку и продолжить скрапинг
    # я использую тут SystemExit так как хочу протестировать всё с самого начала
    if section_a_list == []:
        raise SystemExit
    
    # Я буду использовать букву A для уходящих рейсов и B для прибывающих
    a_duration = []
    a_section_names = []
    for n in section_a_list:
        # Получаем время
        a_section_names.append(''.join(n.split()[2:5]))
        a_duration.append(''.join(n.split()[0:2]))
    b_duration = []
    b_section_names = []
    for n in section_b_list:
        # Получаем время
        b_section_names.append(''.join(n.split()[2:5]))
        b_duration.append(''.join(n.split()[0:2]))

    xp_dates = '//div[@class="section date"]'
    dates = driver.find_elements_by_xpath(xp_dates)
    dates_list = [value.text for value in dates]
    a_date_list = dates_list[::2]
    b_date_list = dates_list[1::2]
    # Получаем день недели
    a_day = [value.split()[0] for value in a_date_list]
    a_weekday = [value.split()[1] for value in a_date_list]
    b_day = [value.split()[0] for value in b_date_list]
    b_weekday = [value.split()[1] for value in b_date_list]
    
    # Получаем цены
    xp_prices = '//a[@class="booking-link"]/span[@class="price option-text"]'
    prices = driver.find_elements_by_xpath(xp_prices)
    prices_list = [price.text.replace('$','') for price in prices if price.text != '']
    prices_list = list(map(int, prices_list))

    # stops - это большой список, в котором первый фрагмент пути находится по чётному индексу, а второй - по нечётному
    xp_stops = '//div[@class="section stops"]/div[1]'
    stops = driver.find_elements_by_xpath(xp_stops)
    stops_list = [stop.text[0].replace('n','0') for stop in stops]
    a_stop_list = stops_list[::2]
    b_stop_list = stops_list[1::2]

    xp_stops_cities = '//div[@class="section stops"]/div[2]'
    stops_cities = driver.find_elements_by_xpath(xp_stops_cities)
    stops_cities_list = [stop.text for stop in stops_cities]
    a_stop_name_list = stops_cities_list[::2]
    b_stop_name_list = stops_cities_list[1::2]
    
    # сведения о компании-перевозчике, время отправления и прибытия для обоих рейсов
    xp_schedule = '//div[@class="section times"]'
    schedules = driver.find_elements_by_xpath(xp_schedule)
    hours_list = []
    carrier_list = []
    for schedule in schedules:
        hours_list.append(schedule.text.split('n')[0])
        carrier_list.append(schedule.text.split('n')[1])
    # разделяем сведения о времени и о перевозчиках между рейсами a и b
    a_hours = hours_list[::2]
    a_carrier = carrier_list[1::2]
    b_hours = hours_list[::2]
    b_carrier = carrier_list[1::2]

    
    cols = (['Out Day', 'Out Time', 'Out Weekday', 'Out Airline', 'Out Cities', 'Out Duration', 'Out Stops', 'Out Stop Cities',
            'Return Day', 'Return Time', 'Return Weekday', 'Return Airline', 'Return Cities', 'Return Duration', 'Return Stops', 'Return Stop Cities',
            'Price'])

    flights_df = pd.DataFrame({'Out Day': a_day,
                               'Out Weekday': a_weekday,
                               'Out Duration': a_duration,
                               'Out Cities': a_section_names,
                               'Return Day': b_day,
                               'Return Weekday': b_weekday,
                               'Return Duration': b_duration,
                               'Return Cities': b_section_names,
                               'Out Stops': a_stop_list,
                               'Out Stop Cities': a_stop_name_list,
                               'Return Stops': b_stop_list,
                               'Return Stop Cities': b_stop_name_list,
                               'Out Time': a_hours,
                               'Out Airline': a_carrier,
                               'Return Time': b_hours,
                               'Return Airline': b_carrier,                           
                               'Price': prices_list})[cols]
    
    flights_df['timestamp'] = strftime("%Y%m%d-%H%M") # время сбора данных
    return flights_df

I ngana ahau ki te whakaingoa i nga taurangi kia marama ai te waehere. Kia mahara ko nga taurangi ka timata ki te a no te wahanga tuatahi o te ara, a b - ki te tuarua. Me haere tatou ki te mahi e whai ake nei.

Nga tikanga tautoko

Inaianei kei a matou he mahi e taea ai e matou te uta atu etahi atu hua rapu me tetahi mahi hei tukatuka i aua hua. Ka mutu pea tenei tuhinga i konei, i te mea ko enei mahi e rua e whakarato ana i nga mea katoa e hiahia ana koe ki te tarai i nga wharangi ka taea e koe te whakatuwhera i a koe ano. Engari kaore ano kia whakaarohia e matou etahi o nga tikanga awhina kua korerohia i runga ake nei. Hei tauira, koinei te waehere mo te tuku imeera me etahi atu mea. Ka kitea tenei katoa i roto i te mahi start_kayak, ka whakaarohia e tatou inaianei.

Me whai korero tenei mahi mo nga taone me nga ra. Ma te whakamahi i enei korero, ka hanga he hononga ki tetahi taurangi kayak, e whakamahia ana hei kawe i a koe ki tetahi wharangi kei roto nga hua rapu kua tohua ma te taurite pai ki te patai. I muri i te wahanga tuatahi, ka mahi tahi matou me nga utu kei te ripanga kei runga ake o te wharangi. Ara, ka kitea e matou te utu tiiti iti me te utu toharite. Ko enei katoa, me te matapae i tukuna e te pae, ka tukuna ma te imeera. I runga i te wharangi, me noho te ripanga e rite ana ki te kokonga maui o runga. Ma te mahi me tenei tepu, ma te ara, ka puta he hapa i te wa e rapu ana ma te whakamahi i nga ra tika, na te mea kaore i te whakaatuhia te ripanga ki te wharangi.

def start_kayak(city_from, city_to, date_start, date_end):
    """City codes - it's the IATA codes!
    Date format -  YYYY-MM-DD"""
    
    kayak = ('https://www.kayak.com/flights/' + city_from + '-' + city_to +
             '/' + date_start + '-flexible/' + date_end + '-flexible?sort=bestflight_a')
    driver.get(kayak)
    sleep(randint(8,10))
    
    # иногда появляется всплывающее окно, для проверки на это и его закрытия можно воспользоваться блоком try
    try:
        xp_popup_close = '//button[contains(@id,"dialog-close") and contains(@class,"Button-No-Standard-Style close ")]'
        driver.find_elements_by_xpath(xp_popup_close)[5].click()
    except Exception as e:
        pass
    sleep(randint(60,95))
    print('loading more.....')
    
#     load_more()
    
    print('starting first scrape.....')
    df_flights_best = page_scrape()
    df_flights_best['sort'] = 'best'
    sleep(randint(60,80))
    
    # Возьмём самую низкую цену из таблицы, расположенной в верхней части страницы
    matrix = driver.find_elements_by_xpath('//*[contains(@id,"FlexMatrixCell")]')
    matrix_prices = [price.text.replace('$','') for price in matrix]
    matrix_prices = list(map(int, matrix_prices))
    matrix_min = min(matrix_prices)
    matrix_avg = sum(matrix_prices)/len(matrix_prices)
    
    print('switching to cheapest results.....')
    cheap_results = '//a[@data-code = "price"]'
    driver.find_element_by_xpath(cheap_results).click()
    sleep(randint(60,90))
    print('loading more.....')
    
#     load_more()
    
    print('starting second scrape.....')
    df_flights_cheap = page_scrape()
    df_flights_cheap['sort'] = 'cheap'
    sleep(randint(60,80))
    
    print('switching to quickest results.....')
    quick_results = '//a[@data-code = "duration"]'
    driver.find_element_by_xpath(quick_results).click()  
    sleep(randint(60,90))
    print('loading more.....')
    
#     load_more()
    
    print('starting third scrape.....')
    df_flights_fast = page_scrape()
    df_flights_fast['sort'] = 'fast'
    sleep(randint(60,80))
    
    # Сохранение нового фрейма в Excel-файл, имя которого отражает города и даты
    final_df = df_flights_cheap.append(df_flights_best).append(df_flights_fast)
    final_df.to_excel('search_backups//{}_flights_{}-{}_from_{}_to_{}.xlsx'.format(strftime("%Y%m%d-%H%M"),
                                                                                   city_from, city_to, 
                                                                                   date_start, date_end), index=False)
    print('saved df.....')
    
    # Можно следить за тем, как прогноз, выдаваемый сайтом, соотносится с реальностью
    xp_loading = '//div[contains(@id,"advice")]'
    loading = driver.find_element_by_xpath(xp_loading).text
    xp_prediction = '//span[@class="info-text"]'
    prediction = driver.find_element_by_xpath(xp_prediction).text
    print(loading+'n'+prediction)
    
    # иногда в переменной loading оказывается эта строка, которая, позже, вызывает проблемы с отправкой письма
    # если это прозошло - меняем её на "Not Sure"
    weird = '¯_(ツ)_/¯'
    if loading == weird:
        loading = 'Not sure'
    
    username = '[email protected]'
    password = 'YOUR PASSWORD'

    server = smtplib.SMTP('smtp.outlook.com', 587)
    server.ehlo()
    server.starttls()
    server.login(username, password)
    msg = ('Subject: Flight Scrapernn
Cheapest Flight: {}nAverage Price: {}nnRecommendation: {}nnEnd of message'.format(matrix_min, matrix_avg, (loading+'n'+prediction)))
    message = MIMEMultipart()
    message['From'] = '[email protected]'
    message['to'] = '[email protected]'
    server.sendmail('[email protected]', '[email protected]', msg)
    print('sent email.....')

I whakamatauria e ahau tenei tuhinga ma te whakamahi i tetahi kaute Outlook (hotmail.com). Kaore au i whakamatau kia tika te mahi me tetahi kaute Gmail, he tino rongonui tenei punaha imeera, engari he maha nga whiringa ka taea. Mena ka whakamahi koe i te putea Hotmail, na kia pai ai nga mea katoa, me whakauru noa to raraunga ki te waehere.

Mena kei te hiahia koe ki te mohio he aha nga mahi e mahia ana i roto i nga waahanga motuhake o te waehere mo tenei mahi, ka taea e koe te kape me te whakamatautau ki a raatau. Ko te whakamatautau ki te waehere anake te huarahi e tino marama ai.

Pūnaha reri

Inaianei kua mahia e matou nga mea katoa i korerohia e matou, ka taea e matou te hanga i tetahi kohanga ngawari e karanga ana i a maatau mahi. Ka tono te tuhinga i nga raraunga mai i te kaiwhakamahi mo nga taone me nga ra. I te whakamatautau me te whakaara ano i te tuhinga, kaore pea koe e hiahia ki te whakauru a ringa i enei raraunga i nga wa katoa, no reira ko nga rarangi e pa ana, mo te wa o te whakamatautau, ka taea te korero ma te kore korero i nga mea kei raro iho, kei reira nga raraunga e hiahiatia ana e te he whakawaehere pakeke.

city_from = input('From which city? ')
city_to = input('Where to? ')
date_start = input('Search around which departure date? Please use YYYY-MM-DD format only ')
date_end = input('Return when? Please use YYYY-MM-DD format only ')

# city_from = 'LIS'
# city_to = 'SIN'
# date_start = '2019-08-21'
# date_end = '2019-09-07'

for n in range(0,5):
    start_kayak(city_from, city_to, date_start, date_end)
    print('iteration {} was complete @ {}'.format(n, strftime("%Y%m%d-%H%M")))
    
    # Ждём 4 часа
    sleep(60*60*4)
    print('sleep finished.....')

Koinei te ahua o te oma whakamatautau o te tuhinga.
Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere
Te whakahaere whakamatautau o te tuhinga

Ngā putanga

Mena kua eke koe ki tenei tawhiti, tena koe! Inaianei kei a koe he kaikoi tukutuku mahi, ahakoa kua kite ahau i nga huarahi maha hei whakapai ake. Hei tauira, ka taea te whakauru ki a Twilio kia tukuna he karere kuputuhi hei utu mo nga imeera. Ka taea e koe te whakamahi i te VPN, tetahi atu mea ranei ki te whiwhi hua i te wa kotahi mai i te maha o nga tūmau. He raru ano ka puta ake i ia wa me te tirotiro i te kaiwhakamahi pae ki te kite mena he tangata ia, engari ka taea hoki te whakatau i tenei raru. Ahakoa he aha, inaianei kei a koe he turanga ka taea e koe te whakawhānui ki te hiahia koe. Hei tauira, tirohia ka tukuna he konae Excel ki te kaiwhakamahi hei apitihanga ki tetahi imeera.

Python - he kaiawhina ki te rapu tikiti rererangi iti mo te hunga e pai ana ki te haere

Ko nga kaiwhakamahi kua rehita anake ka uru ki te rangahau. Waitohu maitēnā.

Kei te whakamahi koe i nga hangarau tarai tukutuku?

  • Ae

  • No

8 nga kaiwhakamahi i pooti. 1 te kaiwhakamahi i aukati.

Source: will.com

Tāpiri i te kōrero