ืืขืจ ืืืืจ ืคืื ืืขื ืึทืจืืืงื, ืื ืืืืขืจืืขืฆืื ื ืคืื ืืืึธืก ืืืจ ืึทืจืืืกืืขืื ืืืึทื ื, ืืืื ืึทื ืืืื ืฆืื ืืื ืฆื ืจืขืื ืืืขืื ืืขืจ ืึทื ืืืืืงืืื ื ืคืื ืึท ืืืขื ืกืงืจืืืคึผืขืจ ืืื ืคึผืืืืึธื ื ืืฆื ืกืขืืขื ืืื, ืืืึธืก ืืืื ืคึฟืึทืจ ืขืจืืืื ืืืืขื ืคึผืจืืืกืื. ืืืขื ืืืจ ืืืื ืคึฟืึทืจ ืืืงืืฅ, ืคืืขืงืกืึทืืึทื ืืึทืืขืก ืืขื ืขื ืืขื ืืฆื (+- 3 ืืขื ืงืึธืจืขืื ืฆื ืื ืกืคึผืขืกืืคืืขื ืืึทืืขืก). ืืขืจ ืกืงืจืืืคึผืขืจ ืกืึทืืืขืก ืื ืืืื ืจืขืืืืืึทืื ืืื ืึทื ืขืงืกืกืขื ืืขืงืข ืืื ืกืขื ืื ืึท ืืืืฆืคึผืึธืกื ืฆื ืืขื ืืขื ืืฉ ืืืึธืก ืืื ืืขืืืขื ืืขืคึฟืื ืขื. ืืขืจ ืฆืื ืคืื ืืขื ืคึผืจืืืขืงื ืืื ืฆื ืืขืืคื ืืจืึทืืืืขืจื ืืขืคึฟืื ืขื ืื ืืขืกืืขืจ ืืืื.
ืืืื, ืืฉืขืช ืืืจ ืคึฟืึทืจืฉืืืื ืืขื ืืึทืืขืจืืึทื, ืืืจ ืคืืื ืคืึทืจืคืึทืื, ืงืืง ืืื
ืืืึธืก ืืขื ืขื ืืืจ ืืขืืื ืืขื ืฆื ืงืืงื ืคึฟืึทืจ?
ืืืจ ืืขื ื ืคืจืื ืฆื ื ืืฆื ืื ืกืืกืืขื ืืืกืงืจืืืื ืืึธ ืืื ืืืจ ืืืืื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืื ืืขืืืืื ื ืขืก ืฆื ืืืื ืคึฟืึทืจ ืึธืคึผืจืืืขื ืืึธืืจืก ืืื ืืืงืืฅ ืฆื ืืืื ืืึธืืืืึทืื. ืืืื ืืืจ ืืขื ื ืขืจื ืกื ืืืขืื ืืขืจืืืืื ื ืจืขืืืขืืืืง ืืืงืืฅ, ืืืจ ืงืขื ืขื ืืืืคื ืื ืฉืจืืคื ืืืืฃ ืื ืกืขืจืืืขืจ (ืคึผืฉืื
ืืื ืืื ื ืืฉื ืืขืคืื ืขื ืืขืจืึทืคืก ืืื ืขืจืจืึธืจืก ื ืึธื, ืึธืืขืจ ืืื ืืจืึทืืื ืขืก ืืื ืืขืืืขื
ืืืขื ืืืจ ืืืื, ืืื ืฉืืื ืืขืจืืื ื, ืึท "ืคืืขืงืกืึทืืึทื ืืึทืืข" ืืื ืืขื ืืฆื; ืืขืจ ืฉืจืืคื ืืขืคืื ื ืึธืคืคืขืจืก ืืืึธืก ืืขื ืขื ืื ืืจืื ืืขื ืคืื ืื ืืขืืขืื ืืึทืืขืก. ืืึธืืฉ ืืืขื ืคืืืกื ืืืง ืื ืฉืจืืคื, ืขืก ืืืื ืคึฟืึทืจ ืึธืคืคืขืจืก ืืื ืืืืื ืืืื ืจืืืืื ื, ืขืก ืืื ืืจืื ื ืฆื ืืึธืืืคืืฆืืจื ืขืก ืึทืืื ืึทื ืขืก ืงืขื ืขื ืงืืืึทืื ืืึทืื ืืืืฃ ืขืืืขืืข ืคืื ืืื ืกืืจืืงืฆืืขืก. ืืื ืืขืจ ืืืืฃ ืืืจ ืงืขื ืขื ืืคืืื ืงืืงื ืคึฟืึทืจ ืืขืืช ืืขืจืึทืคืก; ืึทืืึท ืืขืคืื ื ืงืขื ืขื ืืืื ืืืืขืจ ืืฉืืงืึทืืืข.
ืคืืจืืืืก ืืึธื ืืืจ ืืึทืจืคึฟื ืื ืื ืืขืจ ืืืขื ืกืงืจืืืคึผืขืจ?
ืืืขื ืืื ืขืจืฉืืขืจ ืกืืึทืจืืขื ืืืขื ืกืงืจืืืคึผืื ื, ืืื ืืึธื ืขืกืืื ืืื ื ืืฉื ืืขืจ ืืืืคึผื ืืื ืืขืจืขืกืืจื ืืื ืขืก. ืืื ืืขืืืืื ืฆื ืืึธื ืืขืจ ืคึผืจืึทืืืฉืขืงืก ืืื ืื ืคืขืื ืคืื ืคึผืจืืืืงืืืื ืืึธืืขืืื ื, ืคืื ืึทื ืฆืืขื ืึทื ืึทืืืกืืก, ืืื, ืขืคืฉืขืจ, ืืื ืื ืคืขืื ืคืื ืึทื ืึทืืืืืื ื ืื ืขืืึธืฆืืึธื ืขื ืงืึทืืขืจืื ื ืคืื ืืขืงืกืื. ืึธืืขืจ ืขืก ืืื ืืขืืืขื ืืืืขืจ ืืฉืืงืึทืืืข ืฆื ืืขืคึฟืื ืขื ืืืืก ืืื ืฆื ืฉืึทืคึฟื ืึท ืคึผืจืึธืืจืึทื ืืืึธืก ืงืึทืืขืงืฅ ืืึทืื ืคืื ืืืขืืกืืืขืก. ืืืขื ืืื ืืขืืืืื ืืื ืืขื ืืขืืข, ืืื ืืืื ืืขืืขื ืึทื ืืืขื ืกืงืจืืืคึผืื ื ืืื ืืขืจ "ืืึธืืึธืจ" ืคืื ืื ืืื ืืขืจื ืขื.
ืืืจ ืงืขื ืืจืึทืืื ืึทื ืืึธืก ืืื ืืืื ืืจืืืกื ืึท ืืขืจืงืืขืจืื ื. ืึธืืขืจ ืืึทืืจืึทืืื ืึทื Google ืกืืึทืจืืขื ืืื ืึท ืืืขื ืกืงืจืืืคึผืขืจ ืึทื ืืขืจื Page ืืืฉืืคื ืืื Java ืืื Python. Google ืจืึธืืืึทืฅ ืืึธืื ืฉืืื ืืงืกืคึผืืึธืจืื ื ืื ืืื ืืขืจื ืขื, ืืจืืื ื ืฆื ืฆืืฉืืขืื ืื ื ืืฆืขืจืก ืืื ืื ืืขืกืืขืจ ืขื ืืคึฟืขืจืก ืฆื ืืืืขืจ ืคึฟืจืืื. ืืืขื ืกืงืจืืืคึผืื ื ืืื ืกืึธืฃ ื ืืฆื, ืืื ืืคืืื ืืืื ืืืจ ืืขื ื ืืื ืืขืจืขืกืืจื ืืื ืขืคึผืขืก ืึทื ืืขืจืฉ ืืื ืืึทืืึท ืืืืกื ืฉืึทืคึฟื, ืืืจ ืืืขื ืืึทืจืคึฟื ืขืืืขืืข ืกืงืจืืืคึผืื ื ืกืงืืื ืฆื ืืึทืงืืืขื ืื ืืึทืื ืืืจ ืืึทืจืคึฟื ืฆื ืึทื ืึทืืืื.
ืืื ืืขืคึฟืื ืขื ืขืืืขืืข ืคืื โโืื ืืขืงื ืืงืก ืืขื ืืฆื ืืึธ ืืื ืึท ืืืื ืืขืจืืขื
ืฆื ืืืจ ืืื ืฆื ืึทืจืืืคืึธืจื?!
ืฆื ืื ืคึผืฉืื ืืื ืืึทื ืฅ ืืืฉืขืืืขื ืงืฉืื ืืขืฉืืขืื ืืื ืืขื ืืืื ืคืื ืืขื ืึธืคึผืืืืืื ื, ืืืจ ืงืขื ืขื ืึธืคื ืืขืจื ืึท positive ืขื ืืคืขืจ, ืืืืืืื ืืืจื ืึท ืคึผืึธืจ ืคืื ืืขืฉืืืช ืคืื ืื ืืจืึทืืืึทืื ืคืื ืืขื ืืขื ืืฉ ืฆื ืืืขืืขื ืขืก ืืื ืืขืืืขื ืืขืืขืื. ืจืืึฟ ืคืื ืืื ืื ืืืึธืื ืฉืืืืขื ืึทื ืืจืึทืืืึทืืื ื ืืื ืึท ืืจืืืก ืืืขื ืฆื ืืึทื ืืื ืงืขื ืืื ืืื ื ืืึทืข ืงืืืืืจ ืื ืืืืืจืึทื ืืึทื ืฅ ืืื ืืจืึธืืึทื ืืืื ืืขืจืืืืึทื ื. ืึธืืขืจ, ืืืื ืืืจ ืคืจืขืื ืขืืขืฆืขืจ ืฆื ืืื ืืื ืืืื ืคึฟืึทืจ ืขืจืืืื ืืืงืืฅ, ืืื ืืื ืืืืขืจ ืึทื ืืขืจ ืขื ืืคืขืจ ืืืขื ื ืืฉื ืืืื ืึทืืื positive. ืืื ืคืึทืงื, ืคึผืืืืึธื ืงืืื ืฆื ืืื ืืืขืจ ืืืืฃ ืืึธ.
ืืขืจ ืขืจืฉืืขืจ ืึทืจืืขื ืืืึธืก ืืืจ ืืึทืจืคึฟื ืฆื ืกืึธืืืืข ืืืืฃ ืื ืืืขื ืฆื ืฉืึทืคึฟื ืึท ืกืืกืืขื ืคึฟืึทืจ ืืืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืืฃ ืืืคื ืืืงืืฅ ืืืขื ืืืื ืกืขืืขืงืืื ื ืึท ืคึผืึทืกืืง ืคึผืืึทืืคืึธืจืืข ืคืื โโืืืึธืก ืืืจ ืืืขืื ื ืขืืขื ืืื ืคึฟืึธืจืืึทืฆืืข. ืกืึทืืืืื ื ืืขื ืคึผืจืึธืืืขื ืืื ื ืืฉื ืืจืื ื ืคึฟืึทืจ ืืืจ, ืึธืืขืจ ืืื ืื ืกืืฃ ืืื ืืืืกืืขืจืืืืืื ืื ืงืืึทืึทืง ืืื ืกื. ืืื ืืขืคืจืืืืื ืื ืกืขืจืืืืกืขืก ืคืื Momondo, Skyscanner, Expedia ืืื ืขืืืขืืข ืื ืืขืจืข, ืึธืืขืจ ืื ืืขืงืึทื ืืืึทืื ืคืื ืจืึธืืึธื ืฉืืฅ ืืืืฃ ืื ืจืขืกืืจืกื ืืขื ืขื ืืืคึผืขื ืึทืืจืึทืืึทื. ื ืึธื ืขืืืขืืข ืคืจืืืื, ืืขืฉืึทืก ืืืึธืก ืืื ืืขืืื ืฆื ืืึทื ืืืขื ืืื ืคืึทืจืงืขืจ ืืืืฅ, ืคืืกืืืืขืจ ืงืจืึธืกืื ืื ืืื ืืืืกืืงืึทืื, ืืจืืื ื ืฆื ืืืืขืจืฆืืืื ืื ืกืืกืืขืืขื ืึทื ืืื ืืื ืืขื ืืฉ, ืืื ืืึทืฉืืึธืกื ืึทื ืงืืืึทืง ืืื ืืขืกืืขืจ ืคึผืึทืกืืง ืคึฟืึทืจ ืืืจ, ืืจืึธืฅ ืืขืจ ืคืึทืงื ืึทื ืืคืืื ืืืื ืฆื ืคืืืข ืืืขืืขืจ ืืขื ืขื ืืึธืืืื ืืื ืึท ืงืืจืฅ ืฆืืึทื, ืืื ืืฉืขืงืก ืืืื ืึธื ืืืืื. ืืื ืืขืจืืื ืฆื ืืึทืื ืื ืืึธื ืฉืืงื ืจืืงืืืขืก ืฆื ืื ืคึผืืึทืฅ ืืื ืื ืืขืจืืืึทืื ืคืื 4 ืฆื 6 ืฉืขื, ืืื ืึทืืฅ ืืขืืจืืขื ืคืืึทื. ืคืื ืฆืืื ืฆื ืฆืืื, ืฉืืืขืจืืงืืืื ืืืืคืฉืืืื ืืืขื ืืืจ ืึทืจืืขื ืืื ืงืืึทืึทืง, ืึธืืขืจ ืืืื ืืื ืึธื ืืืืื ืฆื ืึธื ืฉืืขืงื ืืืจ ืืื ืืฉืขืงืก, ืืืจ ืืึทืจืคึฟื ืฆื ืืึทื ืืืขื ืืื ืืื ืืึทื ืืืึทืื ืืื ืืึทื ืงืึทืืขืจ ืื ืืึธื, ืึธืืขืจ ืืืึทืจืื ืึท ืืืกื ืฉืขื ืืื ืื ืืฉืขืงืก ืืึธื ืืึทืืื. ืืืื ื ืืืืืง, ืืืจ ืงืขื ืขื ืืืืื ืึทืืึทืคึผื ืื ืงืึธื ืคึฟืึทืจ ืื ืื ืืขืจ ืคึผืืึทืืคืึธืจืืข, ืืื ืืืื ืืืจ ืืึธื ืืึธืก, ืืืจ ืงืขื ืขื ืืึทืจืืื ืขืก ืืื ืื ืืึทืืขืจืงืื ืืขื.
ืืืื ืืืจ 'ืจืข ื ืึธืจ ืึธื ืืืื ืืื ืืืขื ืกืงืจืืืคึผืื ื ืืื ืืึธื ื ืื ืืืืกื ืืืึธืก ืขืืืขืืข ืืืขืืกืืืขืก ืืขืจืึทื ืื ืืื ืขืก, ืืขืืึธืื ืืืืืขืจ ืืืจ ืึธื ืืืืื ืืืื ืขืจืฉืืขืจ ืคึผืจืืืขืงื ืืื ืืขื ืืขืื ื, ืืึธื ืืื ืึท ืืืืืืข ืืื ืืึธื ืึท Google ืืืื ืืืืฃ ืื ืืืขืจืืขืจ "ืืืขื ืกืงืจืืืคึผืื ื ืขืืืงืขื" . ืืืื ืืงืกืคึผืขืจืึทืืึทื ืฅ ืงืขื ืกืืฃ ืืืืขืจ ืืื ืืืจ ืืจืึทืืื ืืืื ืืืจ ืืึธื ื ืื ืืืืืื ืืืขื ืกืงืจืืืคึผืื ื.
ืืขืืื ื ืกืืึทืจืืขื
ืืึธ ืก ืึท ืืขื ืขืจืึทื ืืืืขืจืืืืง ืคืื ืืืึธืก ืืืขื ืคึผืึทืกืืจื ืืื ืืื ืืืขืจ ืืืขื ืกืงืจืืืคึผืขืจ ืงืึธื:
- ืึทืจืืึทื ืคืืจ ืื ืคืืจืืื ืื ืืืืืจืขืจืื.
- ืขืคื ืึท Google ืงืจืึธืื ืงืืืืื.
- ืจืืฃ ืึท ืคึฟืื ืงืฆืืข ืืืึธืก ืกืืึทืจืฅ ืื ืืึธื, ืคืึธืจื ืขืก ืื ืฉืืขื ืืื ืืึทืืขืก ืืืึธืก ืืืขื ืืืื ืืขืืืืื ื ืืืขื ืืืจ ืืืื ืคึฟืึทืจ ืืืงืืฅ.
- ืื ืคึฟืื ืงืฆืืข ื ืขืื ืื ืขืจืฉืืขืจ ืืืื ืจืขืืืืืึทืื, ืกืึธืจืืืจื ืืืื ืืขืกืืขืจ, ืืื ืืื ืึท ืงื ืขืคึผื ืฆื ืืึธืื ืืขืจ ืจืขืืืืืึทืื.
- ืื ืื ืืขืจ ืคึฟืื ืงืฆืืข ืงืึทืืขืงืฅ ืืึทืื ืคืื ืื ืืื ืฆืข ืืืึทื ืืื ืงืขืจื ืึท ืืึทืื ืจืึทื.
- ืื ืฆืืืื ืคืจืืขืจืืืงืข ืกืืขืคึผืก ืืขื ืขื ืืืจืืืขืงืึธืื ืืื ืกืึธืจืืื ื ืืืืคึผืก ืืืื ืืืืขื ืคึผืจืืึทื (ืืืืืง) ืืื ืืืจื ืคืื ืืืืงืืึทื (ืคืึทืกืืึทืกื).
- ืึท ืืืืฆืคึผืึธืกื ืืื ืึท ืงืืฆืขืจ ืคืื ืืืืขื ืคึผืจืืืกืื (ืืฉืืคึผืึทืกื ืืืงืืฅ ืืื ืืืจืืฉื ืืืืขื ืคึผืจืืึทื) ืืื ืืขืฉืืงื ืฆื ืื ืฉืจืืคื ืืึทื ืืฆืขืจ, ืืื ืึท ืืึทืื ืจืึทื ืืื ืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืืกืืขืฉืืขืื ืืืจื ืื ืืจืื ืึทืคืึธืจืืขื ืฉืึทื ื ืืขืืจืืงืก ืืื ืืขืจืืืขืืืขื ืืื ืึทื ืขืงืกืกืขื ืืขืงืข.
- ืึทืืข ืื ืืืืื ืึทืงืฉืึทื ื ืืขื ืขื ืืืจืืืขืงืึธืื ืืื ืึท ืฆืืงื ื ืึธื ืึท ืืขืืขืื ืฆืืื.
ืขืก ืืึธื ืืืื ืื ืืขืืืืื ืึทื ืืขืืขืจ ืกืขืืขื ืืื ืคึผืจืืืขืงื ืกืืึทืจืฅ ืืื ืึท ืืืขื ืฉืึธืคืขืจ. ืืื ื ืืฅ
ืืึทืืื ืืื ืืืื ืื ื ืึทื ืืื ืืืื ืืขืจืฆืืืืื ื ืืื ืืื ื ืืฉื ืืจืืื ื ืฆื ืขืคืขื ืขื ื ืืึทืข ืืขืจืืืืึทื ื ืฆื ืืขืคึฟืื ืขื ืืจืืืก ืืืื ืืืืฃ ืืืคื ืืืงืืฅ. ืขืก ืืขื ืขื ืคืื ืืขืจ ืึทืืืึทื ืกืืจืืข ืืขืืืึธืืก ืคืื ืืืื ืคึฟืึทืจ ืึทืืึท ืึธืคืคืขืจืก. ืืื ื ืึธืจ ืืืืื ืฆื ืคืึธืจืฉืืึธืื ืืืืขื ืขืจ ืคืื ืืขื ืืึทืืขืจืืึทื ืึท ืคึผืฉืื ืึธืืขืจ ืคึผืจืึทืงืืืฉ ืืืขื ืฆื ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื.
ืืึธ ืืื ืื ืงืึธื ืืืึธืก ืืืจ ืืขืจืขืื ืืืขืื ืืืืื.
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
ืืขืืืืื ื ืฆื ืืึทืื ืืขื ืืึธื "ืฉืืึธืคื" ืคึฟืึทืจ ืึท ืืจืึทืค - ื ืืืขืจ ืคืื ืกืขืงืื ืืขืก ืืืืืขืจ ืืืจ ืึธื ืืืืื ืึท ื ืืึทืข ืืืื ืึธืคึผืขืจืึทืฆืืข. ืืกืืึทืืื, ืงืืื ืืืื ืืึธื ืงืขื ืขื ืืึธื ืึธื ืืขื. ืืืื ืืืจ ืืืืคื ืื ืืืืื ืงืึธื, ืึท ืงืจืึธืื ืคึฟืขื ืฆืืขืจ ืืืขื ืขืคืขื ืขื, ืืืึธืก ืื ืืึธื ืืืขื ื ืืฆื ืฆื ืึทืจืืขืื ืืื ืืืืืืขื.
ืืึธืืืจ ืืึธื ืึท ืืืกื ืขืงืกืคึผืขืจืืืขื ื ืืื ืขืคืขื ืขื ืื kayak.com ืืืขืืืืืื ืืื ืึท ืืึทืืื ืืขืจ ืคึฟืขื ืฆืืขืจ. ืืืจ ืืืขืื ืืืืกืงืืืึทืื ืื ืฉืืึธื ืคืื ืืืึธืก ืืืจ ืืขื ืขื ืืขืืื ืืขื ืฆื ืคืืืขื, ืืื ืื ืฉืืึธื ืืืจ ืืืืื ืฆื ืืึทืงืืืขื ืฆื, ืืื ืืขืืื ื ืืื ืื ืคืื ืืึทืืขืก. ืืืขื ืืฉืืืื ื ืืึทืืขืก, ืืึทืื ืืืืขืจ ืึทื ืื ืงืืื ืคืื +-3 ืืขื ืืื ืืขื ืืฆื. ืืื ืืขืฉืจืืื ืืขื ืงืึธื ืืื ืืฉืืื ืืืึธืก ืื ืคึผืืึทืฅ ืืจืืื ืืื ืขื ืืคืขืจ ืฆื ืึทืืึท ืจืืงืืืขืก. ืืืื, ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืจ ืืึทืจืคึฟื ืฆื ืืืื ืคึฟืึทืจ ืืืงืืฅ ืืืืื ืคึฟืึทืจ ืกืคึผืขืกืืคืืขื ืืึทืืขืก, ืขืก ืืื ืึท ืืืื ืืึทืฉืืึธืขืก ืึทื ืืืจ ืืืขื ืืึธืื ืฆื ืืึธืืืคืืฆืืจื ืื ืืึธื ืงืึธื. ืืืขื ืืื ืจืขืื ืืืขืื ืืขื ืงืึธื, ืืื ืฆืืฉืืขืื ืฆืื ืขืืขื ืืขืจืงืืขืจืื ืืขื, ืึธืืขืจ ืืืื ืืืจ ืคืืื ืฆืขืืืฉื, ืืึธืื ืืืจ ืืืืกื.
ืืืฆื ืืื ืืืืฃ ืื ืืืื ืงื ืขืคึผื ืืื ืงืืง ืืื ืื ืืื ืง ืืื ืื ืึทืืจืขืก ืืึทืจ. ืขืก ืืึธื ืืืื ืขื ืืขื ืฆื ืื ืืื ืง ืืื ื ืืฆื ืืื ืืขื ืืืึทืฉืคึผืื ืืื ืื ืืื ืื ืืืึทืืขืืืืืง ืืื ืืขืจืงืืขืจื kayak
, ืืืึธืก ืกืืึธืจื ืื URL, ืืื ืืขืจ ืืืคึฟื ืืื ืืขื ืืฆื get
ืืืขื ืฉืึธืคืขืจ. ื ืึธื ืืขืื ืึท ืงืืืง ืืขื ืืืื ืงื ืขืคึผื, ืจืขืืืืืึทืื ืืึธื ืืืื ืืขืืืืื ืืืืฃ ืื ืืืึทื.
ืืืขื ืืื ืืขืืืืื ื ืืขื ืืึทืคึฟืขื get
ืืขืจ ืืื ืฆืืืื ืึธืืขืจ ืืจืื ืืึธื ืืื ืึท ืืืกื ืืื ืื, ืืื ืืื ืืขืืืขื ืืขืืขืื ืฆื ืคืึทืจืขื ืืืงื ืืืขืจืึทืคืึทืงืืืฉืึทื ืืื ืจืขืงืึทืคึผืืืฉืึท. ืืืจ ืงืขื ืขื ืคืึธืจื ืืขื ืืฉืขืง ืืึทื ืืืึทืื ืืื ืคืึธืจืืขืฆื ืขืงืกืคึผืขืจืืืขื ืืื ื ืืื ืื ืกืืกืืขื ืืืกืืืื ืฆื ืืืืคื ืึท ื ืืึท ืืฉืขืง. ืืืขื ืืื ืืขืกืืขื ืืขื ืฉืจืืคื, ืขืก ืืขืืืขื ืืื ืืขืจ ืขืจืฉืืขืจ ืืืื ืกืขืกืืข ืืื ืฉืืขื ืืืง ืืืึทื, ืึทืืื ืืืื ืืืจ ืืืืื ืฆื ืขืงืกืคึผืขืจืืืขื ื ืืื ืืขื ืงืึธื, ืืืจ ืืืึธืื ื ืึธืจ ืืึธืื ืฆื ืคึผืืจืืึทืืืงืื ืืึทื ืืืึทืื ืงืึธื ืืจืึธืืืจื ืืื ืืึธืื ืื ืงืึธื ืืืืคื ืืื ืืึทื ื ืื ืืขืจืืืึทืื ืฆืืืืฉื ืืืื ืกืขืฉืึทื ื. ืืื ืืืื ืืืจ ืืจืึทืืื ืืืขืื ืืื, ืึท ืืขื ืืฉ ืืื ืึทื ืืืืงืื ืฆื ืืึทืจืคึฟื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืืืืขื ืคึผืจืืืกืึทื ืืืงืืืขื ืืื 10 ืืื ืื ืื ืืขืจืืืึทืื ืฆืืืืฉื ืืืื ืึทืคึผืขืจืืืฉืึทื ื.
ืืจืืขืื ืืื ืึท ืืืึทื ื ืืฆื XPath
ืึทืืื, ืืืจ ืืขืขืคื ื ืึท ืคึฟืขื ืฆืืขืจ ืืื ืืึธืืืื ืืขื ืคึผืืึทืฅ. ืฆื ืืึทืงืืืขื ืคึผืจืืืกืื ื ืืื ืื ืืขืจืข ืืื ืคึฟืึธืจืืึทืฆืืข, ืืืจ ืืึทืจืคึฟื ืฆื ื ืืฆื XPath ืืขืื ืึธืืึธืืืข ืึธืืขืจ CSS ืกืขืืขืงืืึธืจืก. ืืื ืืึทืฉืืึธืกื ืฆื ืฉืืขืงื ืืื XPath ืืื ืืื ื ืืฉื ืคืืื ืื ื ืืื ืฆื ื ืืฆื CSS ืกืขืืขืงืืึธืจืก, ืึธืืขืจ ืขืก ืืื ืืึทื ืฅ ืืขืืืขื ืฆื ืึทืจืืขืื ืึทืืื. ื ืึทืืืืืึทืฆืืข ืึทืจืื ืึท ืืืึทื ืืื XPath ืงืขื ืขื ืืืื ืืจืืงื, ืืื ืืคืืื ืืืื ืืืจ ื ืืฆื ืื ืืขืงื ืืงืก ืืืึธืก ืืื ืืืกืงืจืืืื ืืื
ืึทืืื, ืืึธืื ืืื ืื ืคืึธืจืืขืฆื ืืจืืขืื ืืืืฃ ืื ืืึธื. ืืึธืืืจ ื ืืฆื ืื ืงืืืคึผืึทืืืืึทืืื ืคืื ืืขื ืคึผืจืึธืืจืึทื ืฆื ืืืืกืงืืืึทืื ืื ืืฉืืคึผืึทืกื ืืืงืืฅ. ืืื ืื ืคืืืืขื ืืข ืืืื, ืื XPath ืกืขืืขืงืืึธืจ ืงืึธื ืืื ืืืืืืืืื ืืื ืจืืื. ืืื ืกืืจ ืฆื ืืขื ืืขื ืงืึธื, ืืืจ ืืึทืจืคึฟื ืฆื ืจืขืื ืืื ืืืืฃ ืื ืืืึทื ืขืืขืืขื ื ืืืจ ืืขื ื ืืื ืืขืจืขืกืืจื ืืื ืืื ืกืขืืขืงืืืจื ืืขื ืืืจืืงืืง ืืึทืคึฟืขื ืคืื ืื ืืขื ืื ืืืึธืก ืืื ืืขืืืืื. ืืขืจ ืืึทืคึฟืขื ืงืขื ืขื ืืืื ืืขืจืืคึฟื ืคึฟืึทืจ ืคืึทืจืฉืืืขื ืข ืืืึทื ืขืืขืืขื ืื, ืื ืงืึธื ืคืื ืืืึธืก ืืืขื ืืืื ืืขืืืืื ืืื ืืืืืืืืื ืืื ืื ืงืึธื ืฆืืงืืงืขืจ.
ืืขื ืืืึทื ืงืึธื
ืึผืื ืฆื ืืขืคึฟืื ืขื ืืึทืฉืืขืืืงืื ื ืคืื ืืืื ืจืืืึทื ืื ื ืืืขืื ืื ืืืกืึทืืืืึทื ืืืืืฉืื ืคืื ืงืึทืคึผืืื ื ืกืขืืขืงืืึธืจืก ืคึฟืื ืงืึธื, ืืึทืฆืึธืื ืืคืืขืจืงืืึทืืงืืึทื ืฆื ืื ืคืืืืขื ืืข ืคึฟืขืึดืงืืืื.
ืืึธืก ืืื ืืืึธืก ืืืจ ืืึทืงืืืขื ืืืขื ืืืจ ื ืึธืืืึทืื ืื ืงืึธื:
//*[@id="wtKI-price_aTab"]/div[1]/div/div/div[1]/div/span/span
ืฆื ืฆืืืืขื ืขื ืขืคึผืขืก ืืื ืืึธืก, ืืืจ ืืึทืจืคึฟื ืฆื ืจืขืื ืืื ืืืืฃ ืื ืึธืคึผืืืืืื ื ืคืื ืงืึธื ืืืึธืก ืืืจ ืืขื ื ืืื ืืขืจืขืกืืจื ืืื ืืื ืกืขืืขืงืืืจื ืืขื ืืึทืคึฟืขื Copy> Copy XPath ืคึฟืื ืื ืืขื ืื ืืืึธืก ืืื ืืขืืืืื.
ืืึธ ืก ืืืึธืก ืืื ืืขืืืืื ื ืฆื ืืขืคืื ืืจื ืื ืืฉืืคึผืึทืกื ืงื ืขืคึผื:
cheap_results = โ//a[@data-code = "price"]โ
ืงืึธืคึผื ืืึทืคึฟืขื > ืงืึธืคึผื XPath
ืขืก ืืื ืืึทื ืฅ ืงืืึธืจ ืืื ืืขืจ ืืึธื ืึทื ืื ืจืืข ืึธืคึผืฆืืข ืงืืงื ืคืื ืกืืืคึผืืขืจ. ืืืขื ืืขืืืืื ื, ืขืก ืืืื ืคึฟืึทืจ ืึทื ืขืืขืืขื ื ืึท ืืืึธืก ืืื ืื ืึทืืจืืืืื 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
, ืืืึธืก ืืื ืืขื ืืฆื ืฆื ื ืขืืขื ืืืจ ืฆื ืึท ืืืึทื ืืืึธืก ืืืขื ืึทื ืืืึทืืื ืืืื ืจืขืืืืืึทืื ืืืืกืืขืฉืืขืื ืืืื ืืืืขืจ ืืขืกืืขืจ ืืืืึทืื ืฆื ืื ืึธื ืคึฟืจืขื. ื ืึธื ืืขืจ ืขืจืฉืืขืจ ืกืงืจืืืคึผืื ื ืกืขืกืืข, ืืืจ ืืืขืื ืึทืจืืขืื ืืื ืื ืคึผืจืืืกืื ืืื ืื ืืืฉ ืืื ืื ืฉืคึผืืฅ ืคืื ืื ืืืึทื. ื ืืืืื, ืืืจ ืืืขืื ืืขืคึฟืื ืขื ืื ืืื ืืืื ืืืืขื ืคึผืจืืึทื ืืื ืื ืืืจืืฉื ืืืืขื ืคึผืจืืึทื. ืึทืืข ืืขื, ืฆืืืึทืืขื ืืื ืื ืคึผืจืึธืื ืึธื ืืจืืืก ืืืจื ืื ืคึผืืึทืฅ, ืืืขื ืืืื ืืขืฉืืงื ืืืจื E- ืืจืืื. ืืืืฃ ืืขื ืืืึทื, ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืืืฉ ืืึธื ืืืื ืืื ืืขืจ ืืืืืขืจืฉืืขืจ ืืื ืงืก ืืืื ืงื. ืืจืืขืื ืืื ืืขื ืืืฉ, ืืืจื ืืขื ืืืขื, ืงืขื ืคืึทืจืฉืึทืคื ืึท ืืขืืช ืืืขื ืืืจ ืืืื ืืื ืคึผืื ืืืขื ืืึทืืขืก, ืืืืึทื ืืื ืืขื ืคืึทื ืื ืืืฉ ืืื ื ืืฉื ืืขืืืืื ืืืืฃ ืืขื ืืืึทื.
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.....')
ืืื ืืขืกืืขื ืืขื ืฉืจืืคื ื ืืฆื ืึท ืึทืืืืืง ืืฉืืื (hotmail.com). ืืื ืืึธืื ื ืืฉื ืืขืกืืขื ืขืก ืฆื ืึทืจืืขืื ืจืืืืืง ืืื ืึท Gmail ืืฉืืื, ืืขื E- ืืจืืื ืกืืกืืขื ืืื ืืึทื ืฅ ืคืึธืืงืก, ืึธืืขืจ ืขืก ืืขื ืขื ืคืืืข ืืขืืืขื ืึธืคึผืฆืืขืก. ืืืื ืืืจ ื ืืฆื ืึท 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 ืึทืืื ืึทื ืขืก ืกืขื ืื ืืขืงืกื ืึทืจืืืงืืขื ืึทื ืฉืืึธื ืคืื ืืืืืื. ืืืจ ืงืขื ืขื ื ืืฆื ืึท ืืืคึผื ืึธืืขืจ ืขืคึผืขืก ืึทื ืืขืจืฉ ืฆื ืืึทืงืืืขื ืจืขืืืืืึทืื ืคืื ืขืืืขืืข ืกืขืจืืืขืจืก ืกืืืืึทืืืืื ืืึทืกืื. ืขืก ืืื ืืืื ืึท ืคึผืืจืืึทืืืงืื ืขืจืืืืื ื ืคึผืจืึธืืืขื ืืื ืงืึธื ืืจืึธืืืจื ืืขื ืคึผืืึทืฅ ืืึทื ืืฆืขืจ ืฆื ืืขื ืืืื ืขืจ ืืื ืึท ืืขื ืืฉ, ืึธืืขืจ ืืขื ืคึผืจืึธืืืขื ืงืขื ืขื ืืืื ืืืื ืกืึทืืืื. ืืื ืงืืื ืคืึทื, ืืืฆื ืืืจ ืืึธืื ืึท ืืึทืืข ืึทื ืืืจ ืงืขื ืขื ืืงืกืคึผืึทื ื ืืืื ืืืจ ืืืืื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืึทืื ืืืืขืจ ืึทื ืึทื ืขืงืกืกืขื ืืขืงืข ืืื ืืขืฉืืงื ืฆื ืืขืจ ืืึทื ืืฆืขืจ ืืื ืึท ืึทืืึทืืฉืืึทื ื ืฆื ืึทื E- ืืจืืื.
ืืืืื ืจืขืืืกืืจืืจื ื ืืฆืขืจืก ืงืขื ืขื ืึธื ืืืื ื ืขืืขื ืืื ืื ืืืขืจืืืืง.
ืฆื ืืืจ ื ืืฆื ืืืขื ืกืงืจืืืคึผืื ื ืืขืงื ืึทืืึทืืืฉืื?
-
ืืึธ
-
ืงืืื
8 ืืื ืืฆืขืจ ืืืื ืืขืฉืืืื. 1 ืืื ืืฆืขืจ ืืื ืืื ืืคืืขืืืืื.
ืืงืืจ: www.habr.com