แกแขแแขแแแก แแแขแแ แ, แ แแแแแก แแแ แแแแแกแแช แแฆแแก แแแฅแแแงแแแแ, แแแแแแก, แ แแ แแแกแ แแแแแแแ แแแกแแฃแแ แแ แแแ แกแแ แแแแ แแก แแแแแแแแ แแแแแ Python-แจแ Selenium-แแก แแแแแงแแแแแแ, แ แแแแแแช แแซแแแก แแแแแแแแแแแก แคแแกแแแก. แแแแแแแแแก แซแแแแแกแแก แแแแแแงแแแแแ แแแฅแแแแ แแแ แแฆแแแ (+- 3 แแฆแ แแแแแแแแฃแ แแแ แแฆแแแแแ แจแแแแ แแแแ). Scraper แแแแฎแแแก แซแแแแแก แจแแแแแแแก Excel แคแแแแจแ แแ แแแแแแแแก แแ แแแ แก, แแแแช แซแแแแแก แแ แแชแแกแจแ แฉแแแขแแ แ, แแแคแแกแขแแก แแแก แแแแ แแแแแแแ แจแแฏแแแแแแ. แแ แแ แแแฅแขแแก แแแแแแแ แแแแฎแแแ แแก แแแแแแฃแ แแแก แกแแฃแแแแแกแ แแแ แแแแแแแแก แแแแแแจแ.
แแฃ แแแกแแแแก แแแแแแแกแแก แแแแก แแแแแ แแฃแแแ แแ แซแแแแ, แจแแฎแแแแ
แ แแก แแแซแแแ?
แแฅแแแ แแแแแกแฃแคแแแ แจแแแแซแแแแ แแแแแแงแแแแ แแฅ แแฆแฌแแ แแแ แกแแกแขแแแ, แ แแแแ แช แแกแฃแ แ. แแแแแแแแแ, แแแแแแแงแแแ แจแแแแ-แแแแ แแก แขแฃแ แแแแกแ แแ แแจแแแแแฃแ แฅแแแแฅแจแ แแแแแแแแแก แแแกแแซแแแแแ. แแฃ แกแแ แแแแฃแแแ แคแแฅแ แแแ แแแแแแแแแแ แแแแแแแแแก แแแแแแจแ, แจแแแแซแแแแ แกแแ แแแขแแก แแแจแแแแ แกแแ แแแ แแ (แแแ แขแแแ
แจแแชแแแแแ แขแแ แแคแแแ แฏแแ แแแ แแแแแแ, แแแแ แแ แแคแแฅแ แแ, แ แแ แจแแกแแซแแแแแแแ
แซแแแแแกแแก, แ แแแแ แช แฃแแแ แแฆแแแแจแแแ, แแแแแแงแแแแแ โแแแฅแแแแ แแแ แแฆแโ; แกแแ แแแขแ แแแฃแแแแก แจแแแแแแแแแแแก, แ แแแแแแแช แแแชแแแฃแแแ แแแชแแแฃแแ แแแ แแฆแแแแแแ แกแแแ แแฆแแก แแแแแแแแแแแจแ. แแแฃแฎแแแแแแ แแแแกแ, แ แแ แกแแ แแแขแแก แแแจแแแแแกแแก แแก แแซแแแก แจแแแแแแแแแแแก แแฎแแแแ แแ แแ แแแแแ แแฃแแแแแ, แแแแแแแ แแแกแ แจแแชแแแ แแกแ, แ แแ แแแก แจแแฃแซแแแ แจแแแแ แแแแก แแแแแชแแแแแ แคแ แแแแก แ แแแแแแแแ แแแแแ แแฃแแแแแแ. แแแกแ แแแฎแแแ แแแแ แแฅแแแ แจแแแแซแแแแ แแแซแแแแแ แแ แแกแฌแแ แ แขแแ แแคแแแแช แแ, แแกแแแ แแฆแแแฉแแแแแ แจแแแซแแแแ แซแแแแแ แกแแแแขแแ แแกแ แแงแแก.
แ แแขแแ แแญแแ แแแแแ แกแฎแแ แแแ แกแแ แแแแ แ?
แ แแแแกแแช แแแ แแแแแ แแแแแฌแงแ แแแ แกแแ แแแแแแ, แแฃแแฌแ แคแแแแ แ แแ แแแฅแแแ, แแก แแแแกแแแฃแแ แแแแ แแ แแแแแขแแ แแกแแแแ. แแแแแแแ แแแขแ แแ แแแฅแขแ แแแแแแแแแแแแ แแ แแแแแแแ แแแแแ แแแแแแแ แแแแก, แคแแแแแกแฃแ แ แแแแแแแแก แแ, แจแแกแแซแแแ, แขแแฅแกแขแแแแก แแแแชแแฃแ แ แจแแคแแ แแแแแแก แแแแแแแแก แกแคแแ แแจแ. แแแแ แแ แแฆแแแฉแแแ, แ แแ แซแแแแแ แกแแแแขแแ แแกแ แแงแ แแแแก แแแ แแแแแ, แแฃ แ แแแแ แฃแแแ แจแแฅแแแแ แแ แแแ แแแ, แ แแแแแแช แแแ แแแแแก แแแแแชแแแแแก แแแแกแแแขแแแแแแ. แแ แแแแแก แ แแ แฉแแแฃแฆแ แแแแแ, แแแแฎแแแ, แ แแ แแแ แกแแ แแแ แแ แแก แแแขแแ แแแขแแก โแซแ แแแโ.
แจแแแซแแแแ แคแแฅแ แแแ, แ แแ แแก แซแแแแแ แแแแแแ แแแแชแฎแแแแแแ. แแแแ แแ แฉแแแแแแแ, แ แแ Google-แแ แแแแฌแงแ แแแ แกแแ แแแแ แแ, แ แแแแแแช แแแ แ แแแแฏแแ แจแแฅแแแ แฏแแแแก แแ แแแแแแแก แแแแแงแแแแแแ. Google-แแก แ แแแแขแแแ แแแแแแแแแแ แแแขแแ แแแขแก แแ แชแแแแแแแแแ แแแก แแแแฎแแแ แแแแแแก แกแแฃแแแแแกแ แแแกแฃแฎแแแ แแแกแชแแ แแแ แแแแฎแแแแแ. แแแ แกแแ แแแก แแฅแแก แแแฃแแแแแแแแ แแแแแงแแแแแ แแ แแแจแแแแช แแ, แแฃ แแฅแแแ แแแแแขแแ แแกแแแฃแแ แฎแแ แ แกแฎแแ แ แแแแ แแแแแชแแแแ แแแชแแแแ แแแแจแ, แแแแญแแ แแแแแ แกแแ แแแแแแแก แแแ แแแแฃแแ แฃแแแ แแแ, แ แแแ แแแแฆแแ แแแคแแ แแแชแแ, แ แแแแแก แแแแแแแแช แแญแแ แแแแแ.
แแ แแแแแแ แ แแแแแแแแ แขแแฅแแแแ, แ แแแแแแช แแฅ แแแแแแงแแแแแ แแจแแแแแแ แจแ
แฒแแงแแแ แก แแแแแแฃแ แแแ?!
แแ แแแแงแแคแแแแแแก แกแแแแฃแ แจแ แแแกแแฃแ แแแ แขแแ แแ แกแแแแแแ แฃแแแแแแ แแแแฎแแแแ, แฎแจแแ แแ แจแแแแซแแแแ แแแแกแแแแแ แแแแแแแแ แแแกแฃแฎแ, แ แแแแแกแแช แแแ แแฎแแแแก แ แแแแแแแแ แแแแแแ แแ แแแแแแแแแก แแแแแแฃแ แแแแแแ, แแแกแแช แแก แแแฃแกแแแก. แแแแ แ แฉแแแแแแแ แแแแแแแแฎแแแแ, แ แแ แแแแแแฃแ แแแ แจแแกแแแแจแแแแ แแแแ แแฎแแ แแฃแแขแฃแ แฃแ แแแ แแแแจแ แฉแแซแแ แแแกแ แแ แแฅแแแแ แฐแแ แแแแแขแแก แแแคแแ แแแแแแกแแแแก. แแฃแแชแ, แแฃ แแแแแแก แฐแแแแฎแแแ, แฃแงแแแ แก แแฃ แแ แ แแแแแแแแแแแแแก แซแแแแ, แแแ แฌแแฃแแแแฃแแ แแแ , แแแกแฃแฎแ แแ แช แแกแ แแแแแแแแ แแฅแแแแ. แคแแฅแขแแแ แแแแ, แแแแแแ แแฅ แแแแฎแแแ แแแ.
แแแ แแแแ แแแแชแแแ, แ แแแแแแช แฃแแแ แแแแแแฌแงแแแขแแ แแแแแแแแแแแแแ แแแคแแ แแแชแแแก แแแซแแแแแก แกแแกแขแแแแก แจแแฅแแแแก แแแแแ, แแฅแแแแ แจแแกแแคแแ แแกแ แแแแขแคแแ แแแก แจแแ แฉแแแ, แกแแแแแแแช แแแแฆแแแ แแแคแแ แแแชแแแก. แแ แแ แแแแแแแก แแแแแแ แแแ แฉแแแแแแก แแแแแแ แแ แแงแ, แแแแ แแ แกแแแแแแแ แแแแแแแก แกแแ แแแกแ แแแแ แฉแแ. แแ แแชแแแ Momondo-แก, Skyscanner-แแก, Expedia-แก แแ แ แแแแแแแแ แกแฎแแ แกแแ แแแกแ, แแแแ แแ แแ แ แแกแฃแ แกแแแแ แ แแแแขแแแแก แแแชแแแก แแแฅแแแแแแแแ แจแแฃแฆแฌแแแแแ แแงแ. แ แแแแแแแแ แแชแแแแแแแก แจแแแแแ, แ แแแแแก แแ แแกแแช แแแแแฌแแ แแแแแแแแแแ แจแฃแฅแแแจแแแแแ, แคแแฎแแ แแแกแแแ แฃแแแแ แแแแแกแแกแแแแแแแ แแ แแแแแกแแแแแแแแแ, แแชแแแแแแแ แแแแแ แฌแแฃแแแแแแ แกแแกแขแแแแแ, แ แแ แแแแแแแแ แแแงแแแ, แแแแแแฌแงแแแขแ, แ แแ แแแแแแ แงแแแแแแ แจแแกแแคแแ แแกแ แแงแ แฉแแแแแแก, แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแฃแแแแช แซแแแแแ แแแแ แ แแแแ แแ แแงแแก แแแขแแแ แแฃแแ. แแแแแ แแ แแจแ แแ แแแแฌแงแแแ แจแแแแฌแแแแแแแช. แแ แแแแแฎแแ แฎแ, แ แแ แแแขแ แแแแแแแแแแแ แแแแฎแแแแแแ แกแแแขแแ 4-แแแ 6 แกแแแแแแแ แแแขแแ แแแแแ แแ แงแแแแแคแแ แ แแแ แแแ แแฃแจแแแแแ. แแ แแแแแ แ, แกแแ แแฃแแแแแ แฌแแ แแแแฅแแแแแ Kayak-แแแ แแฃแจแแแแแกแแก, แแแแ แแ แแฃ แแกแแแ แแแแฌแงแแแแ แแฅแแแแก แจแแฌแฃแฎแแแแก แฉแแแแแแ, แแแจแแ แแฅแแแ แแ แฎแแแแ แฃแแแ แแแฃแแแแแแแแ แแแ แแ แจแแแแแ แแแฃแจแแแ แแแขแ, แแ แแแแแแแแ แ แแแแแแแแ แกแแแแก แแ แจแแแแฌแแแแแแ แฃแแแ แจแแฌแงแแแก. แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ, แแฅแแแ แจแแแแซแแแแ แแแ แขแแแแ แแแแ แแแ แแแแ แกแฎแแ แแแแขแคแแ แแแกแแแแก แแ แแฃ แแแแก แแแแแแแแแ, แจแแแแซแแแแ แจแแแขแงแแแแแแ แแแแแแขแแ แแแจแ.
แแฃ แแฅแแแ แแฎแแ แแฌแงแแแ แแแ แกแแ แแแแแแแ แแ แแ แแชแแ แ แแขแแ แแแ แซแแแก แแแแแแ แ แแแแกแแแขแก แแก, แแแจแแ แกแแแแ แแแแฌแงแแแ แแฅแแแแก แแแ แแแ แแ แแแฅแขแก แแ แกแคแแ แแจแ, แแแแแแแแ แกแแแฃแแแ แ แแแแแก แกแแแแแ แแ แแแแซแแแ Google-แจแ แกแแขแงแแแแ โแแแ แกแแ แแแแแแแก แแขแแแแขแโ . แแฅแแแแ แแฅแกแแแ แแแแแขแแแ แจแแแซแแแแ แแแกแ แฃแแแแก แแแแแ แแแ แ, แแแแ แ แคแแฅแ แแแ, แแฃ แฃแแฃแแฃแ แแ แแแแแแแแแ แแแ แกแแ แแแก.
แแแชแแแแแแ
แแฅ แแ แแก แแแแแแ แแแแแฎแแแแ แแแแก แจแแกแแฎแแ, แแฃ แ แ แแแฎแแแแ แฉแแแแก แแแ แกแแ แแแแ แแแแจแ:
- แกแแญแแ แ แแแแแแแแแแแแแก แแแแแ แขแ.
- Google Chrome แฉแแแแ แแแก แแแฎแกแแ.
- แแแแแแซแแฎแแ แคแฃแแฅแชแแ, แ แแแแแแช แแฌแงแแแก แแแขแก, แแแแแกแชแแแก แแแก แฅแแแแฅแแแกแ แแ แแแ แแฆแแแก, แ แแแแแแแช แแแแแงแแแแแฃแแ แแฅแแแแ แแแแแแแแแก แซแแแแแกแแก.
- แแก แคแฃแแฅแชแแ แแฆแแแก แซแแแแแก แแแ แแแ แจแแแแแแแก, แแแแแแแแฃแแแ แกแแฃแแแแแกแแก แแแฎแแแแแ แแ แแญแแ แก แฆแแแแแก แแแขแ แจแแแแแแก แฉแแกแแขแแแ แแแ.
- แกแฎแแ แคแฃแแฅแชแแ แแแ แแแแแก แแแแแชแแแแแก แแแแแ แแแแ แแแแแ แแ แแแ แฃแแแแก แแแแแชแแแแ แฉแแ แฉแแก.
- แฌแแแ แแ แ แแแแแฏแ แจแแกแ แฃแแแแฃแแแ แแแแแแแก แคแแกแแก (แแแคแ) แแ แคแ แแแแก แกแแฉแฅแแ แแก แแแฎแแแแแ (แงแแแแแแ แกแฌแ แแคแ) แขแแแแแแก แแแฎแแ แแกแฎแแแแก แแแแแงแแแแแแ.
- แกแแ แแแขแแก แแแแฎแแแ แแแแแก แแแแแแแแแ แแ.แฌแแ แแแ, แ แแแแแแช แจแแแชแแแก แแแแแแแแแก แคแแกแแแแก แจแแฏแแแแแแก (แงแแแแแแ แแแคแ แแแแแแแแ แแ แกแแจแฃแแแ แคแแกแ) แแ แแแแแชแแแแ แฉแแ แฉแ แกแแแ แแแแแแฆแแแจแแฃแแ แแแแแแแขแแ แแก แแแฎแแแแแ แแแแแแแแฃแแ แแแคแแ แแแชแแแ แแแแฎแแแ Excel แคแแแแแก แกแแฎแแ.
- แงแแแแ แแแแแแฆแแแจแแฃแแ แฅแแแแแแ แฎแแ แชแแแแแแแ แชแแแแจแ แแแแกแแแฆแแ แฃแแ แแ แแแก แจแแแแแ.
แฃแแแ แแฆแแแแจแแแก, แ แแ แกแแแแแแก แงแแแแ แแ แแแฅแขแ แแฌแงแแแ แแแ แแ แแแแแ แแ. แแ แแแงแแแแ
แแแแแแแแแกแฌแแแแ, แ แแ แฉแแแก แแกแขแแ แแแจแ แแ แแ แแชแแแแแ แแแแฎแกแแ แแฎแแแ แฐแแ แแแแแขแแแ แแแแแแแแแแแแแ แแแแ แแแ แแแแแแแแก แกแแแแแแแแแ. แแกแแแ แจแแแแแแแแแแแแก แซแแแแแก แแแแ แแ แฃแคแ แ แแแฌแแแแแ แแแแแแแแ แแ แกแแแแแก. แแ แฃแแ แแแแ แแแแแ แแ แแแกแแแแก แแแแแฎแแแแก แจแแแแแแแแ แแ แแ แแแแแแแก แแแแแญแ แแก แแแ แขแแแ, แแแแ แแ แแ แแฅแขแแแฃแแ แแแ.
แแฅ แแ แแก แแแแ, แ แแแแแแแช แแแแแ แแแกแแฃแแ แแ.
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)
แแแแแก แแแกแแฌแงแแกแจแ แจแแแแซแแแแ แแแฎแแ แแแแแขแแก แแแแแ แขแแก แแ แซแแแแแแแ, แ แแแแแแแช แแแแแแงแแแแแ แแแแแ แฉแแแแ แแ แแแฅแขแแก แแแแแแแแแแแจแ. แฒแกแ, randint
แแแแแแงแแแแแ แแแขแแก แแแกแแซแแแแแแแ แจแแแแฎแแแแแแ แ แแแแแแแแแก แฌแแแแแแก แแแแแแแแแแแจแ แแฎแแแ แกแแซแแแแ แแแแ แแชแแแก แแแฌแงแแแแแแ. แฉแแแฃแแแแ แแ, แแ แช แแ แ แแแขแก แแ แจแแฃแซแแแ แแแแก แแแ แแจแ. แแฃ แแแแแ แแแชแแแฃแ แแแแก แแแฃแจแแแ, แแแแฎแกแแแแ Chrome-แแก แคแแแฏแแ แ, แ แแแแแกแแช แแแขแ แแแแแแงแแแแแก แกแแแขแแแแแ แกแแแฃแจแแแ.
แแแแแ แแแแแแแแแ แแแขแแ แ แแฅแกแแแ แแแแแขแ แแ แแแแฎแกแแแ kayak.com แแแแแแแ แแ แชแแแแ แคแแแฏแแ แแจแ. แฉแแแ แแแ แฉแแแ แฅแแแแฅแก, แกแแแแแแแช แแแแแ แแแ แคแ แแแแก แแ แฅแแแแฅแก, แกแแแแช แแแแแแ แแแฎแแแแ แ, แแกแแแ แคแ แแแแก แแแ แแฆแแแก. แแแ แแฆแแแแก แแ แฉแแแแกแแก แแแ แฌแแฃแแแแ, แ แแ แแแแแงแแแแแฃแแแ +-3 แแฆแแก แแแแแแแแแ. แแ แแแแฌแแ แ แแแแ แแแแก แแแแแแแแกแฌแแแแแแ, แแฃ แ แแก แแฌแแ แแแแแก แกแแแขแ แแกแแแ แแแแฎแแแแแแแก แกแแแแกแฃแฎแแ. แแฃ, แแแแแแแแแ, แแฅแแแ แแญแแ แแแแแ แแแแแแแแแก แแแซแแแแ แแฎแแแแ แแแแแแแแฃแแ แแแ แแฆแแแแกแแแแก, แแแจแแ แแแแแ แแแแแแแแ แแแแกแ, แ แแ แแแแแฌแแแ แแแขแแก แแแแแก แจแแชแแแ. แ แแชแ แแแแแ แแกแแฃแแ แแ, แจแแกแแแแแแก แแแแแแ แขแแแแแก แแแซแแแ, แแแแ แแ แแฃ แแแแแแฃแแ แฎแแ แ, แจแแแแขแงแแแแแแ.
แแฎแแ แแแแญแแ แแ แซแแแแแก แฆแแแแแก แแ แแแแแฎแแแแ แแแฃแแก แแแกแแแแ แแแแแก แแแแจแ. แแก แฃแแแ แแงแแก แแแฃแแแก แแกแแแแกแ, แ แแแแแกแแช แแ แแแงแแแแ แฅแแแแแ แแแชแแแฃแ แแแแแแแแจแ, แกแแแแช แชแแแแแ แแแแแแ แแ แแแฃแแแ kayak
, แ แแแแแแช แแแแฎแแแก URL-แก แแ แแแแแแงแแแแแ แแแแแแ get
แแแ แแ แแแแแ แ. แซแแแแแก แฆแแแแแแ แแแญแแ แแก แจแแแแแ, แจแแแแแแแ แฃแแแ แแแแแฉแแแแก แแแแ แแแ.
แ แแชแ แแ แซแแแแแแก แแแงแแแแแแ get
แ แแแแแแแแ แฌแฃแแจแ แแ แแ แแแขแฏแแ แแ แกแแแฏแแ , แแแฎแแแแก แแแกแ แฃแแแแ แแแแแแแฌแแแแ reCaptcha-แก แแแแแงแแแแแแ. แแฅแแแ แจแแแแซแแแแ แแแแแ แแ แแก แจแแแแฌแแแแ แฎแแแแ แแ แแแแแ แซแแแแ แแฅแกแแแ แแแแแขแแแ, แกแแแแ แกแแกแขแแแ แแ แแแแแฌแงแแแขแก แแฎแแแ แจแแแแฌแแแแแก แแแจแแแแแก. แ แแแแกแแช แกแแ แแแขแ แแแแแแชแแแ, แฉแแแแ, แ แแ แแแ แแแแ แกแแซแแแแ แกแแกแแ แงแแแแแแแแก แจแแฃแคแแ แฎแแแแแ แแแแแแแแ แแแแแ, แแกแ แ แแ, แแฃ แแแแแก แแฅแกแแแ แแแแแขแ แแแแแแแแ, แแฎแแแแ แแแ แแแแฃแแแ แฃแแแ แจแแแแแฌแแแ แฎแแแแ แแ แแแฃแจแแแ แแแแ, แกแแซแแแแ แกแแกแแแแก แจแแ แแก แแแแ แแแขแแ แแแแแก แแแแแงแแแแแแ. แแ, แแฃ แแแแแ แแแคแแฅแ แแแแแ, แแแแแแแแ แกแแแแ แแฃแแแ, แ แแ แแแแแแแแก แแแกแญแแ แแแก แแแคแแ แแแชแแ แแแแแแแแแก แคแแกแแแแก แจแแกแแฎแแ, แ แแแแแแแช แแแฆแแแฃแแแ แซแแแแแก แแแแ แแชแแแแก แจแแ แแก 10 แฌแฃแแแแแ แแแขแแ แแแแแ.
แแแแ แแแแ แแฃแจแแแแ XPath-แแก แแแแแงแแแแแแ
แแกแ แ แแ, แฉแแแ แแแแฎแกแแแแ แคแแแฏแแ แ แแ แฉแแแขแแแ แแแ แกแแแขแ. แคแแกแแแแก แแ แกแฎแแ แแแคแแ แแแชแแแก แแแกแแฆแแแแ, แฉแแแ แฃแแแ แแแแแแแงแแแแ XPath แขแแฅแแแแแแแ แแ CSS แกแแแแฅแขแแ แแแ. แแ แแแแแแฌแงแแแขแ XPath-แแ แแแ แฉแแแ แแ แแ แแแแ แซแแแ CSS แกแแแแฅแขแแ แแแแก แแแแแงแแแแแแก แกแแญแแ แแแแ, แแแแ แแ แกแแแกแแแแ แจแแกแแซแแแแแแแ แแ แแแแ แแฃแจแแแแ. XPath-แแก แแแแแงแแแแแแ แแแแ แแแก แแ แแแแแ แแแแแแแชแแ แจแแแซแแแแ แ แแฃแแ แแงแแก แแ แแแจแแแแช แแ, แแฃ แแงแแแแแ แแ แขแแฅแแแแแก, แ แแแแแจแแช แแ แแฆแแฌแแ แ
แแกแ แ แแ, แแแแแแ แซแแแแ แแแขแแ แแฃแจแแแแ. แแแแแ แแแแแแแงแแแแ แแ แแแ แแแแก แจแแกแแซแแแแแแแแแ แงแแแแแแ แแแคแ แแแแแแแแแก แจแแกแแ แฉแแแแ. แจแแแแแ แกแฃแ แแแแ XPath แแแแ แฉแแแแก แแแแ แแแแแจแแฃแแแ แฌแแแแแ. แแแแแก แกแแแแฎแแแแ, แแฅแแแ แฃแแแ แแแแฌแแแแฃแแแ แแแฃแกแแก แแแ แฏแแแแ แฆแแแแแแ แแฅแแแแแแแก แกแแแแขแแ แแกแ แแแแ แแแก แแแแแแแขแแ แแ แแแ แฉแแแ แแ แซแแแแแ Inspect แแแแแฃแแแ, แ แแแแแแช แแแแแฉแแแแแ. แแ แแ แซแแแแแแก แแแแแซแแฎแแแ แจแแกแแซแแแแแแแ แแแแ แแแก แกแฎแแแแแกแฎแแ แแแแแแแขแแแแกแแแแก, แ แแแแแแ แแแแ แแแแแฉแแแแแ แแ แแแแแจแแฃแแ แแฅแแแแ แแแแแก แแแงแฃแ แแแแแจแ.
แแแแ แแแก แแแแแก แแแฎแแ
แแแแกแแแแแก, แ แแ แแแแแแ แฉแแแ แแกแฏแแแแแแก แแแแแกแขแฃแ แแแ แแแแแแแ แกแแแแฅแขแแ แแแแก แแแแแ แแแแก แฃแแ แงแแคแแแ แแฎแแ แแแแแก แจแแกแแฎแแ, แงแฃแ แแแฆแแแ แแแแฅแชแแแ แจแแแแแ แแแฎแแกแแแแแแแแแก.
แแ แ แแก แแแแฆแแแ แแแแแก แแแแแ แแแแกแแก:
//*[@id="wtKI-price_aTab"]/div[1]/div/div/div[1]/div/span/span
แแแแกแแแแแก, แ แแ แแแแแแแแ แแ แแกแแแแกแ แ แแ, แแฅแแแ แฃแแแ แแแแฌแแแแฃแแแ แแแฃแกแแก แแแ แฏแแแแ แฆแแแแแแ แแแแแก แแแแงแแคแแแแแแแ, แ แแแแแแช แแแแแขแแ แแกแแแ แแ แแแแแฃแแแ แแแ แฉแแแ แแ แซแแแแแ Copy > Copy XPath.
แแ, แ แ แแแแแแแงแแแ แงแแแแแแ แแแคแ แฆแแแแแแก แแแแกแแแฆแแ แแกแแแแก:
cheap_results = โ//a[@data-code = "price"]โ
แแแแแแแแ แแ แแ แซแแแแแ > แแแแแแแแ แแ XPath
แแจแแแ แแ, แ แแ แแแแ แ แแแ แแแแขแ แแแแ แแ แฃแคแ แ แแแ แขแแแแ. แแแแแงแแแแแแกแแก แแก แแซแแแก แแแแแแแขแก a, แ แแแแแกแแช แแฅแแก แแขแ แแแฃแขแ data-code
, แขแแแแ price
. แแแ แแแแ แแแ แแแแขแแก แแแแแงแแแแแแกแแก แฎแแแแ แแแแแแแขแแก แซแแแแ id
แ แแแแแแช แฃแแ แแก wtKI-price_aTab
แแ XPath แแแแแแแขแแก แแแ แแกแ แแแแแแงแฃแ แแแ /div[1]/div/div/div[1]/div/span/span
. XPath-แแก แแกแแแแกแ แจแแแแแฎแแ แแแแ แแก แจแแแกแ แฃแแแแก, แแแแ แแ แแฎแแแแ แแ แแฎแแ. แแแแก แแฅแแ แแฎแแแแ แจแแแแซแแแ id
แจแแแชแแแแแ แแแแ แแแก แจแแแแแแ แฉแแขแแแ แแแแกแแก. แกแแแแแแแแแแก แแแแแแแแแแ แแแ wtKI
แแชแแแแแ แแแแแแแฃแ แแ แงแแแแ แฏแแ แแ แแแแ แแแก แฉแแขแแแ แแแแกแแก, แแแแขแแ แแแแ, แ แแแแแแช แแแก แแงแแแแแก, แแแแแฃแกแแแแแแ แ แแฅแแแแ แจแแแแแแ แแแแ แแแก แแแแแขแแแ แแแแก แจแแแแแ. แแกแ แ แแ, แแแ แแแแฃแแ แแ แ แแแฃแแแแ XPath-แแก แแแกแแแแแแ. แแก แชแแแแ แแแ แแแ แแแแแแแแแแแแ.
แแฃแแชแ, แฃแแแ แแฆแแแแจแแแก, แ แแ XPath แกแแแแฅแขแแ แแแแก แแแแแ แแแ แจแแแซแแแแ แกแแกแแ แแแแแ แแงแแก แกแแแแแแ แแแ แขแแ แกแแแขแแแแแ แแฃแจแแแแแกแแก แแ แแฃ แแแแจแ แแแแคแแ แขแฃแแแ แแ แซแแแแ แแแแก, แแแแจแ แชแฃแแ แแ แแคแแ แแ.
แแฎแแ แแแแแ แแแคแแฅแ แแ แแแแแ, แแฃ แ แ แฃแแแ แแแแแแแแแ, แแฃ แแฅแแแ แแญแแ แแแแแ แซแแแแแก แงแแแแ แจแแแแแแก แแแฆแแแ แ แแแแแแแแ แกแขแ แแฅแแแจแ, แกแแแก แจแแแแแ. แฒซแแแแแ แแแ แขแแแ. แแแแแแฃแแ แจแแแแแ แแ แแก แแแแกแแก แแฅแแแ แแแแแฅแขแแก แจแแแแแ resultWrapper
. แงแแแแ แจแแแแแแก แฉแแขแแแ แแแ แจแแแซแแแแ แแแแฎแแ แชแแแแแแก แฅแแแแแ แแแชแแแฃแแแก แแกแแแแกแ แแแ แงแฃแแแ.
แฃแแแ แแฆแแแแจแแแก, แ แแ แแฃ แแแแแแฆแแแจแแฃแแก แแแกแแแ, แแแจแแ แแแ แขแแแแ แฃแแแ แแแแแแ แแแแแก แฃแแแขแแกแ แแแฌแแแ, แ แแแแแกแแช แฉแแแ แแแแแแแแแแแแแ. แแ แแแแแก แแแจแแแแแกแแก แฉแแแ แแฌแแแแแแ แแแแก, แ แแช แแแญแแ แแแแ (แคแแฅแขแแแ แแแแ, แแแแแแแขแก, แ แแแแแจแแช แจแแคแฃแแฃแแแ แจแแแแแ) แ แแแแ แกแแฎแแก แแแแแแแก แแแแกแแแฆแแ แแก แแแฅแแแแแแแก (XPath) แแแแแงแแแแแแ. แแก แแแแแแแ แแแแกแแแแก, แ แแ แแแแแฆแแ แแแแแแแขแแก แขแแฅแกแขแ แแ แแแแแแแแกแแ แแก แแแแแฅแขแจแ, แกแแแแแแแช แแแแแชแแแแแแก แฌแแแแแฎแแแ แจแแกแแซแแแแแแ (แแแ แแแแแ แแแแแงแแแแแฃแแแ flight_containers
, แจแแแแแ - flights_list
).
แแแฉแแแแแแแ แแแ แแแแ แกแแแ แฎแแแ แแ แฉแแแ แแแแแแ แแฎแแแแแ แงแแแแแคแแ แก, แ แแช แแแญแแ แแแแ. แแฃแแชแ, แแแคแแ แแแชแแแก แแแแแแแแแก แฃแคแ แ แกแแแแขแแ แแกแ แแแแแ แแแแฅแแก. แฉแแแ แฃแแแ แแแแฆแแ แแแแแชแแแแแ แแแแแแฃแแ แแแแแแแขแแแแ แชแแ-แชแแแแ.
แแแฃแจแแแ!
แคแฃแแฅแชแแแก แฉแแฌแแ แแก แฃแแแ แขแแแแกแ แแแแ แแแแแขแแแแแ แจแแแแแแแแก แฉแแขแแแ แแแ, แแกแ แ แแ, แฉแแแ แแแแแฌแงแแแ. แแกแฃแ แก แแแฅแกแแแแแฃแ แแ แแแแแแ แแ แคแ แแแแแแก แ แแแแแแแแ, แ แแแแแแแแช แแ แแแ แแแ แแฆแแแก แแแคแแ แแแชแแแก, แกแแ แแแกแจแ แแญแแแก แแแฉแแแแก แแแ แแจแ, แ แแแแแแช แแฌแแแแก แจแแแแฌแแแแแก, แแแแขแแ แแแแ แแแก แฉแแแแแแแกแแก แแ แแฎแแ แแแญแแ แฆแแแแแแ แแแขแ แจแแแแแแแแก แฉแแขแแแ แแแแก. แแ แแแแจแ แงแฃแ แแแฆแแแ แฃแแแ แแแแฅแชแแแ แแแแแก try
, แ แแแแแแช แแแแแแแขแ แแแแขแแ, แ แแ แแแแฏแแ แฆแแแแแ แแ แแขแแแ แแแแ แกแฌแแ แแ. แแฃ แแฅแแแแช แจแแฎแแแแแแ แแแแก, แแแแแแแแแขแแ แแ แแ แคแฃแแฅแชแแแก แแแ แแแ แคแฃแแฅแชแแแก แแแแจแ start_kayak
, แ แแแแแกแแช แฅแแแแแ แแแแแแฎแแแแแ.
# ะะฐะณััะทะบะฐ ะฑะพะปััะตะณะพ ะบะพะปะธัะตััะฒะฐ ัะตะทัะปััะฐัะพะฒ ะดะปั ัะพะณะพ, ััะพะฑั ะผะฐะบัะธะผะธะทะธัะพะฒะฐัั ะพะฑััะผ ัะพะฑะธัะฐะตะผัั
ะดะฐะฝะฝัั
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
แแฎแแ, แแ แคแฃแแฅแชแแแก แฎแแแแ แซแแแแ แแแแแแแแก แจแแแแแ (แฎแแแแแฎแแ แแ แจแแแแซแแแ แแแแแแแขแ), แฉแแแ แแแแ แแแ แ แแแแแแแชแฎแแแแ แคแฃแแฅแชแแ, แ แแแแแแช แแแแ แแก แแแคแฎแแฎแแแก.
แแ แฃแแแ แจแแแแแ แแแ แฃแแแขแแกแแแ, แ แแช แกแแญแแ แแ แจแแแแแ แคแฃแแฅแชแแแจแ, แ แแแแแกแแช แแฌแแแแแ page_scrape
. แแแแฏแแ แแแแ แฃแแแแฃแแ แแแแแแแก แแแแแชแแแแแ แแแแ แแแแแแแฃแแแ, แแแแขแแ แแ แแแงแแแแ แแแ แขแแ แแแแแแก แแแก แแแแแกแแงแแคแแ. แแแแแแแแแ, แ แแชแ แแแ แแแแแ แแแงแแแแ แชแแแแแแแก section_a_list
ะธ section_b_list
. แฉแแแแ แคแฃแแฅแชแแ แแแ แฃแแแแก แแแแแชแแแแ แฉแแ แฉแแก flights_df
, แแก แกแแจแฃแแแแแแก แแแแซแแแแก แแแแแแงแแ แแแแแชแแแแแแก แแแฎแแ แแกแฎแแแแก แกแฎแแแแแกแฎแแ แแแแแแแ แแแฆแแแฃแแ แจแแแแแแแ แแ แแแแแแแแแแแ แแแแแแ แแแแแแ แแกแแแ.
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
แจแแแแชแแแ แแแแแกแแฎแแแแแแแ แชแแแแแแแ แแกแ, แ แแ แแแแ แแแกแแแแแ แงแแคแแแแงแ. แแแฎแกแแแแแ, แ แแ แชแแแแแแแ แแฌแงแแแ a
แแแแแฃแแแแแแ แแแแก แแแ แแแ แกแแคแแฎแฃแ แก แแ b
- แแแแ แแแแ. แแแแแ แแแแแแแแแ แจแแแแแ แคแฃแแฅแชแแแแ.
แแแแฎแแแ แ แแแฅแแแแแแแแ
แแฎแแ แแแแฅแแก แคแฃแแฅแชแแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแแซแแแแก แฉแแขแแแ แแแ แแแแแขแแแแแ แซแแแแแก แจแแแแแแแ แแ แคแฃแแฅแชแแ แแ แจแแแแแแแแก แแแกแแแฃแจแแแแแแแ. แแก แกแขแแขแแ แจแแแซแแแแแแ แแฅ แแแกแ แฃแแแแฃแแแงแ, แ แแแแแ แแก แแ แ แคแฃแแฅแชแแ แฃแแ แฃแแแแแงแแคแก แงแแแแแคแแ แก, แ แแช แแญแแ แแแแแ แแแแ แแแแแก แแแคแชแฅแแแแกแแแแก, แ แแแแแแ แแแฎแกแแแช แแแแแ แจแแแแซแแแแ. แแแแ แแ แฉแแแ แฏแแ แแ แแแแแแฎแแแแ แแแแแ แแแแฎแแแฃแแ แแแแฎแแแ แ แแแฅแแแแแแแแ. แแแแแแแแแ, แแก แแ แแก แแแคแแกแขแแก แแแแแแแแแก แแแแ แแ แกแฎแแ แ แแ. แแก แงแแแแแคแแ แ แจแแแแซแแแแ แแฎแแแแ แคแฃแแฅแชแแแจแ start_kayak
, แ แแแแแกแแช แแฎแแ แแแแแแฎแแแแแ.
แแก แคแฃแแฅแชแแ แแแแแฎแแแก แแแคแแ แแแชแแแก แฅแแแแฅแแแแกแ แแ แแแ แแฆแแแแก แจแแกแแฎแแ. แแ แแแคแแ แแแชแแแก แแแแแงแแแแแแ, แแก แฅแแแแก แแแฃแแก แชแแแแแจแ kayak
, แ แแแแแแช แแแแแแงแแแแแ แแ แแแแ แแแ แแแแแกแแงแแแแแ, แ แแแแแแช แจแแแชแแแก แซแแแแแก แจแแแแแแแก, แ แแแแแแแช แแแแแแแแฃแแแ แแแแฎแแแแแก แกแแฃแแแแแกแ แจแแกแแขแงแแแกแแก แแแฎแแแแแ. แแแ แแแแ แกแแ แแแแแแแก แกแแกแแแก แจแแแแแ, แฉแแแ แแแแฃแจแแแแแ แคแแกแแแแ แแแแ แแแก แแแแ แชแฎแ แแแจแ. แแแ แซแแ, แฉแแแ แแแแแแแ แแแแแแแก แแแแแแแแฃแ แคแแกแก แแ แกแแจแฃแแแ แคแแกแก. แแก แงแแแแแคแแ แ, แกแแแขแแก แแแแ แแแชแแแฃแ แแ แแแแแแแแ แแ แแแ, แแแแฅแขแ แแแฃแแ แคแแกแขแแ แแแแแแแแแแแ. แแแแ แแแ, แจแแกแแแแแแกแ แชแฎแ แแแ แฃแแแ แแงแแก แแแแ แแแ แชแฎแแแ แแฃแแฎแแจแ. แแ แชแฎแ แแแแแ แแฃแจแแแแแ, แกแฎแแแแ แจแแ แแก, แจแแแซแแแแ แแแแแแฌแแแแก แจแแชแแแแ แแฃแกแขแ แแแ แแฆแแแแก แแแแแงแแแแแแ แซแแแแแกแแก, แ แแแแแ แแ แจแแแแฎแแแแแจแ แชแฎแ แแแ แแ แแ แแก แแแฉแแแแแแ แแแแ แแแ.
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.....')
แแ แแแแแแชแแแ แแก แกแแ แแแขแ Outlook แแแแแ แแจแแก แแแแแงแแแแแแ (hotmail.com). แแ แแ แแแแแแแชแแแ, แ แแ แกแฌแแ แแ แแแฃแจแแแก Gmail-แแก แแแแแ แแจแแแ, แแ.แคแแกแขแแก แแก แกแแกแขแแแ แกแแแแแแ แแแแฃแแแ แฃแแแ, แแแแ แแ แแ แกแแแแแก แแ แแแแแ แจแแกแแซแแ แแแ แแแแขแ. แแฃ แแงแแแแแ Hotmail แแแแแ แแจแก, แแแจแแ แแแแกแแแแแก, แ แแ แงแแแแแคแแ แ แแแฃแจแแแก, แแฅแแแ แฃแแ แแแแ แฃแแแ แจแแแงแแแแแ แแฅแแแแ แแแแแชแแแแแ แแแแจแ.
แแฃ แแกแฃแ แ แแแแแแ, แ แ แแแแแแแ แแแแแก แแแแแ แแขแฃแ แแแแงแแคแแแแแแแจแ แแ แคแฃแแฅแชแแแกแแแแก, แจแแแแซแแแแ แแแแแแแแ แแ แแกแแแ แแ แแฅแกแแแ แแแแแขแ แแแแแแแแ. แแแแแก แแฅแกแแแ แแแแแขแ แแ แแแแแ แแ แแแแ แแแกแ แญแแจแแแ แแขแแ แแแกแแแแแแ.
แแแ แกแแกแขแแแ
แแฎแแ, แ แแแแกแแช แฉแแแ แแแแแแแแแ แงแแแแแคแแ แ, แ แแแแช แแแกแแฃแแ แแ, แจแแแแแซแแแ แจแแแฅแแแแ แแแ แขแแแ แชแแแแ, แ แแแแแแช แแแฃแฌแแแแแก แฉแแแแก แคแฃแแฅแชแแแแก. แกแแ แแแขแ แแแแฎแแแ แแแแแกแแแ แแแฎแแแก แแแแแชแแแแแก แฅแแแแฅแแแแกแ แแ แแแ แแฆแแแแก แจแแกแแฎแแ. แกแแ แแแขแแก แแฃแแแแแ แแแแแขแแแ แแแแ แขแแกแขแแ แแแแกแแก, แแแแแแแแ แกแแแแ แแฃแแแ, แ แแ แแแแแแแแ แแ แแแแแชแแแแแแก แฎแแแแ แจแแงแแแแ แงแแแแ แฏแแ แแ, แแแแขแแ แจแแกแแแแแแกแ แกแขแ แแฅแแแแแ, แขแแกแขแแ แแแแก แฎแแแแ แซแแแแแแแก แแแแแแแแแแแจแ, แจแแแซแแแแ แแแแแแขแแ แแแฃแแ แแงแแก แแแ แฅแแแแแ แแแชแแแฃแแแแแก แแแแแแขแแ แแแแก แแแฃแฅแแแแแ, แ แแแแแแจแแช แกแแญแแ แแ แแแแแชแแแแแ. แกแแ แแแขแ แแ แแก แแงแแ แ แแแแแ แแแฃแแ.
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.....')
แแกแ แแแแแแงแฃแ แแแ แกแแ แแแขแแก แกแแขแแกแขแ แแแจแแแแ.
แกแแ แแแขแแก แกแแขแแกแขแ แแแจแแแแ
แจแแแแแแแ
แแฃ แแฅแแแแ แแแแฆแฌแแแ, แแแแแชแแแ! แแฎแแ แแฅแแแ แแแฅแแ แกแแแฃแจแแ แแแ แกแแ แแแแ แ, แแฃแแชแ แแ แฃแแแ แแฎแแแแ แแแกแ แแแฃแแฏแแแแกแแแแก แแแแ แแแแก. แแแแแแแแแ, แแก แจแแแซแแแแ แแงแแก แแแขแแแ แแ แแแฃแแ Twilio-แกแแแ แแกแ, แ แแ แแแคแแกแขแแก แแแชแแแแ แแแแแแแแก แขแแฅแกแขแฃแ แจแแขแงแแแแแแแแแก. แจแแแแซแแแแ แแแแแแงแแแแ VPN แแ แกแฎแแ แ แแ, แ แแ แแ แแแ แแฃแแแ แแแแฆแแ แจแแแแแแแ แ แแแแแแแแ แกแแ แแแ แแแแ. แแกแแแ แแแ แแแแฃแแแ แฉแแแแแ แแ แแแแแแ แกแแแขแแก แแแแฎแแแ แแแแแก แจแแแแฌแแแแแกแแแ แแแแแแจแแ แแแแ, แแ แแก แแฃ แแ แ แแก แแแแแแแแ, แแแแ แแ แแก แแ แแแแแแแช แจแแแซแแแแ แแแแแแ แแแก. แแแแแกแแแแ แจแแแแฎแแแแแจแ, แแฎแแ แแฅแแแ แแแฅแแ แแแแ, แ แแแแแแช แจแแแแซแแแแ แแแแคแแ แแแแแ แแฃ แแกแฃแ แ. แแแแแแแแแ, แแแ แฌแแฃแแแแ, แ แแ Excel แคแแแแ แแแแแแแแแ แแแแฎแแแ แแแแแก แแแคแแกแขแแก แแแแแ แแแก แกแแฎแแ.
แแแแแแแแฎแแแจแ แแแแแฌแแแแแแ แจแแฃแซแแแแ แแฎแแแแ แแแ แแแแกแขแ แแ แแแฃแ แแแแฎแแแ แแแแแแก.
แแงแแแแแ แแแ แกแแ แแแแแแแก แขแแฅแแแแแแแแแก?
-
แแแแฎ
-
แแ แแ แแก
แแแกแชแ แฎแแ 8 แแแแฎแแแ แแแแแแ. 1 แแแแฎแแแ แแแแแแ แแแแ แจแแแแแแ.
แฌแงแแ แ: www.habr.com