ΠΠ²ΡΠΎΡΡΡ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°, ΡΠΈΠΉΡΠΎ ΠΏΡΠ΅Π²ΠΎΠ΄ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΌΠ΅ Π΄Π½Π΅Ρ, ΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΠ΅Π»ΡΠ° ΠΉ Π΅ Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π± ΡΠΊΡΠ΅ΠΏΠ΅Ρ Π² Python, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Selenium, ΠΊΠΎΠΉΡΠΎ ΡΡΡΡΠΈ ΡΠ΅Π½ΠΈ Π½Π° ΡΠ°ΠΌΠΎΠ»Π΅ΡΠ½ΠΈ Π±ΠΈΠ»Π΅ΡΠΈ. ΠΡΠΈ ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π±ΠΈΠ»Π΅ΡΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π³ΡΠ²ΠΊΠ°Π²ΠΈ Π΄Π°ΡΠΈ (+- 3 Π΄Π½ΠΈ ΡΠΏΡΡΠΌΠΎ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡΠ΅ Π΄Π°ΡΠΈ). Π‘ΠΊΡΠ΅ΠΏΠ΅ΡΡΡ Π·Π°ΠΏΠ°Π·Π²Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ Π²ΡΠ² ΡΠ°ΠΉΠ» Π½Π° Excel ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π½Π° Π»ΠΈΡΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΈΠ·Π²ΡΡΡΠΈΠ»ΠΎ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ, ΠΈΠΌΠ΅ΠΉΠ» Ρ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π°ΠΌΠ΅ΡΠΈΠ». Π¦Π΅Π»ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π½Π° ΠΏΡΡΠ½ΠΈΡΠΈΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΡΡ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΠ΅ ΡΠ΄Π΅Π»ΠΊΠΈ.
ΠΠΊΠΎ, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°, ΡΠ΅ ΡΡΠ²ΡΡΠ²Π°ΡΠ΅ ΠΈΠ·Π³ΡΠ±Π΅Π½ΠΈ, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅
ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΡΡΠΈΠΌ?
ΠΠΈΠ΅ ΡΡΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π° ΡΡΠΊ, ΠΊΠ°ΠΊΡΠΎ ΠΆΠ΅Π»Π°Π΅ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
Π³ΠΎ, Π·Π° Π΄Π° ΡΡΡΡΡ ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΊΠΈ ΠΏΡΠ΅Π· ΡΠΈΠΊΠ΅Π½Π΄Π° ΠΈ Π±ΠΈΠ»Π΅ΡΠΈ Π΄ΠΎ ΡΠΎΠ΄Π½ΠΈΡ ΠΌΠΈ Π³ΡΠ°Π΄. ΠΠΊΠΎ ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅Π»ΠΈΠ²ΡΠΈ Π±ΠΈΠ»Π΅ΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° (ΠΏΡΠΎΡΡΠΎ
ΠΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΡΠΌ Π½Π°ΠΌΠ΅ΡΠΈΠ» ΡΠ°ΡΠΈΡΠΈ Ρ Π³ΡΠ΅ΡΠΊΠΈ, Π½ΠΎ ΠΌΠΈΡΠ»Ρ, ΡΠ΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ
ΠΡΠΈ ΡΡΡΡΠ΅Π½Π΅, ΠΊΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ ΠΌΠ΅, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° βΠ³ΡΠ²ΠΊΠ°Π²Π° Π΄Π°ΡΠ°β, ΡΠΊΡΠΈΠΏΡΡΡ Π½Π°ΠΌΠΈΡΠ° ΠΎΡΠ΅ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΡΠΈ Π΄Π½ΠΈ ΠΎΡ Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ Π΄Π°ΡΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠ° ΡΠΎΠΉ ΡΡΡΡΠΈ ΠΎΡΠ΅ΡΡΠΈ ΡΠ°ΠΌΠΎ Π² Π΅Π΄Π½Π° ΠΏΠΎΡΠΎΠΊΠ°, Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°ΡΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ±ΠΈΡΠ° Π΄Π°Π½Π½ΠΈ Π·Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π° ΠΏΠΎΠ»Π΅ΡΠ°. Π‘ Π½Π΅Π³ΠΎΠ²Π° ΠΏΠΎΠΌΠΎΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΡΠΈ Π΄Π° ΡΡΡΡΠΈΡΠ΅ Π³ΡΠ΅ΡΠ½ΠΈ ΡΠ°ΡΠΈΡΠΈ; ΡΠ°ΠΊΠΈΠ²Π° Π½Π°Ρ ΠΎΠ΄ΠΊΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ.
ΠΠ°ΡΠΎ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΄ΡΡΠ³ ΡΠ΅Π± ΡΠΊΡΠ΅ΠΏΠ΅Ρ?
ΠΠΎΠ³Π°ΡΠΎ Π·Π° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌ Ρ ΡΠ΅Π± ΡΠΊΡΠ°ΠΏΠΈΠ½Π³, ΡΠ΅ΡΡΠ½ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°Ρ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΠΎΡ ΡΠΎΠ²Π°. ΠΡΠΊΠ°Ρ Π΄Π° ΠΏΡΠ°Π²Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ³Π½ΠΎΠ·Π½ΠΎΡΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°Π½Π΅, ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΠΈΡ Π°Π½Π°Π»ΠΈΠ· ΠΈ Π΅Π²Π΅Π½ΡΡΠ°Π»Π½ΠΎ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° Π΅ΠΌΠΎΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΠΎ ΠΎΡΠ²Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²Π΅ΡΠ΅. ΠΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΡΠ΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΡΡΠ±ΠΈΡΠ° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅. ΠΠΎΠΊΠ°ΡΠΎ Π½Π°Π²Π»ΠΈΠ·Π°Ρ Π² ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ°, ΡΠ°Π·Π±ΡΠ°Ρ , ΡΠ΅ ΡΠ΅Π± ΡΠΊΡΠ°ΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π΅ βΠ΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΡΡβ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ.
ΠΠΎΠΆΠ΅ Π±ΠΈ ΡΠΌΡΡΠ°ΡΠ΅, ΡΠ΅ ΡΠΎΠ²Π° Π΅ ΡΠ²ΡΡΠ΄Π΅ ΡΠΌΠ΅Π»ΠΎ ΡΠ²ΡΡΠ΄Π΅Π½ΠΈΠ΅. ΠΠΎ ΠΏΠΎΠΌΠΈΡΠ»Π΅ΡΠ΅, ΡΠ΅ Google Π·Π°ΠΏΠΎΡΠ½Π° Ρ ΡΠ΅Π± ΡΠΊΡΠ΅ΠΏΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΠΠ°ΡΠΈ ΠΠ΅ΠΉΠ΄ΠΆ ΡΡΠ·Π΄Π°Π΄Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Java ΠΈ Python. Π ΠΎΠ±ΠΎΡΠΈΡΠ΅ Π½Π° Google ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΠΎΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π²ΡΠΏΡΠΎΡΠΈ. Π£Π΅Π± ΡΠΊΡΠ΅ΠΉΠΏΠΈΠ½Π³ΡΡ ΠΈΠΌΠ° Π±Π΅Π·ΠΊΡΠ°ΠΉΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π΄ΠΎΡΠΈ Π°ΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΎΡ Π½Π΅ΡΠΎ Π΄ΡΡΠ³ΠΎ Π² Data Science, ΡΠ΅ Π²ΠΈ ΡΡΡΠ±Π²Π°Ρ Π½ΡΠΊΠΎΠΈ ΡΠΌΠ΅Π½ΠΈΡ Π·Π° ΡΠΊΡΠ°ΠΏΠΈΠ½Π³, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅.
ΠΠ°ΠΌΠ΅ΡΠΈΡ
Π½ΡΠΊΠΎΠΈ ΠΎΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΡΡΠΊ ΡΠ΅Ρ
Π½ΠΈΠΊΠΈ Π·Π° ΡΡΠ΄Π΅ΡΠ½ΠΈ
ΠΠ±ΠΈΡΠ°ΡΠ΅ Π»ΠΈ Π΄Π° ΠΏΡΡΡΠ²Π°ΡΠ΅?!
ΠΠ° ΠΏΡΠΎΡΡΠΈΡ ΠΈ Π΄ΠΎΡΡΠ° Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π΅Π½ Π²ΡΠΏΡΠΎΡ, ΠΏΠΎΡΡΠ°Π²Π΅Π½ Π² Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π», ΡΠ΅ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π΅Π½ ΠΎΡΠ³ΠΎΠ²ΠΎΡ, ΠΏΡΠΈΠ΄ΡΡΠΆΠ΅Π½ ΠΎΡ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΡΡΠΎΡΠΈΠΈ ΠΎΡ ΠΏΡΡΡΠ²Π°Π½ΠΈΡΡΠ° Π½Π° ΡΠΎΠ²Π΅ΠΊΠ°, Π½Π° ΠΊΠΎΠ³ΠΎΡΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ Π½Π°Ρ Π±ΠΈΡ Π° ΡΠ΅ ΡΡΠ³Π»Π°ΡΠΈΠ»ΠΈ, ΡΠ΅ ΠΏΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π΅ ΡΡΠ΄Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΠΏΠΈΡΠ΅ Π² Π½ΠΎΠ²Π° ΠΊΡΠ»ΡΡΡΠ½Π° ΡΡΠ΅Π΄Π° ΠΈ Π΄Π° ΡΠ°Π·ΡΠΈΡΠΈΡΠ΅ Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠΈΡΠ΅ ΡΠΈ. ΠΠΎ Π°ΠΊΠΎ ΠΏΠΎΠΏΠΈΡΠ°ΡΠ΅ Π½ΡΠΊΠΎΠ³ΠΎ Π΄Π°Π»ΠΈ ΠΎΠ±ΠΈΡΠ° Π΄Π° ΡΡΡΡΠΈ ΡΠ°ΠΌΠΎΠ»Π΅ΡΠ½ΠΈ Π±ΠΈΠ»Π΅ΡΠΈ, ΡΠΈΠ³ΡΡΠ΅Π½ ΡΡΠΌ, ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ Π½ΡΠΌΠ° Π΄Π° Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π΅Π½. Π ΠΈΠ½ΡΠ΅ΡΠ΅Ρ Π½Π° ΠΈΡΡΠΈΠ½Π°ΡΠ° Python Π½ΠΈ ΠΈΠ΄Π²Π° Π½Π° ΠΏΠΎΠΌΠΎΡ ΡΡΠΊ.
ΠΡΡΠ²Π°ΡΠ° Π·Π°Π΄Π°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΠΈΠΌ ΠΏΠΎ ΠΏΡΡΡ ΠΊΡΠΌ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΡΡΡΡΠ΅Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ°ΠΌΠΎΠ»Π΅ΡΠ½ΠΈ Π±ΠΈΠ»Π΅ΡΠΈ, ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·Π±ΠΎΡΡΡ Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, ΠΎΡ ΠΊΠΎΡΡΠΎ ΡΠ΅ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π Π΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π΅ ΠΌΠΈ Π±Π΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ, Π½ΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΈΠ·Π±ΡΠ°Ρ ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΠ°ΡΠΊ. ΠΠΏΠΈΡΠ°Ρ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π½Π° Momondo, Skyscanner, Expedia ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΡΠ³ΠΈ, Π½ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈΡΠ΅ Π·Π° Π·Π°ΡΠΈΡΠ° Π½Π° ΡΠΎΠ±ΠΎΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π·ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π±ΡΡ Π° Π½Π΅ΠΏΡΠΎΠ½ΠΈΡΠ°Π΅ΠΌΠΈ. Π‘Π»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠΏΠΈΡΠ°, ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²Ρ ΡΡΡ ΡΠ²Π΅ΡΠΎΡΠ°ΡΠΈ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π½ΠΈ ΠΏΡΠ΅Ρ ΠΎΠ΄ΠΈ ΠΈ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ΠΈ, ΠΎΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ ΡΠ΅ Π΄Π° ΡΠ±Π΅Π΄Ρ ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅, ΡΠ΅ ΡΡΠΌ ΡΠΎΠ²Π΅ΠΊ, ΡΠ΅ΡΠΈΡ , ΡΠ΅ Kayak Π΅ Π½Π°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡΡ Π·Π° ΠΌΠ΅Π½, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π΄ΠΎΡΠΈ Π°ΠΊΠΎ ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π°Ρ ΡΠ²ΡΡΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°Π½ΠΈΡΠΈ Π² ΠΊΡΠ°ΡΠΊΠΈ ΡΡΠΎΠΊΠΎΠ²Π΅, Π·Π°ΠΏΠΎΡΠ²Π°Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. Π£ΡΠΏΡΡ Π΄Π° Π½Π°ΠΊΠ°ΡΠ°ΠΌ Π±ΠΎΡΠ° Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΠ°ΠΉΡΠ° Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ ΠΎΡ 4 Π΄ΠΎ 6 ΡΠ°ΡΠ° ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΎΠ±ΡΠ΅. ΠΡ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Kayak, Π½ΠΎ Π°ΠΊΠΎ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° Π²ΠΈ Π΄ΠΎΡΠ°ΠΆΠ΄Π°Ρ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΠΎΠ³Π°Π²Π° ΡΡΡΠ±Π²Π° ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΠ΅ Ρ ΡΡΡ ΡΡΡΠ½ΠΎ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π±ΠΎΡΠ°, ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ°ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠΏΡΠ°Ρ. ΠΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π°Π΄Π°ΠΏΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ΄Π° Π·Π° Π΄ΡΡΠ³Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΈ Π°ΠΊΠΎ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠΎΠ±ΡΠΈΡΠ΅ Π·Π° ΡΠΎΠ²Π° Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅.
ΠΠΊΠΎ ΡΠ΅ΠΏΡΡΠ²Π° Π·Π°ΠΏΠΎΡΠ²Π°ΡΠ΅ Ρ ΡΠ΅Π± ΡΠΊΡΠ°ΠΏΠΈΠ½Π³Π° ΠΈ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ Π·Π°ΡΠΎ Π½ΡΠΊΠΎΠΈ ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅ ΡΠ΅ Π±ΠΎΡΡΡ Ρ Π½Π΅Π³ΠΎ, ΡΠΎΠ³Π°Π²Π° ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΠΏΡΡΠ²ΠΈΡ ΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΡΠ°Π·ΠΈ ΠΎΠ±Π»Π°ΡΡ, Π½Π°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠΈ ΡΡΠ»ΡΠ³Π° ΠΈ ΠΏΠΎΡΡΡΡΠ΅ΡΠ΅ Π² Google Π΄ΡΠΌΠΈΡΠ΅ βΠ΅ΡΠΈΠΊΠ΅Ρ Π·Π° ΡΠ΅Π± ΡΠΊΡΠ°ΠΏΠΈΠ½Π³β . ΠΠ°ΡΠΈΡΠ΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΠΊΠ»ΡΡΠ°Ρ ΠΏΠΎ-ΡΠ°Π½ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΡΠΈ ΠΌΠΈΡΠ»ΠΈΡΠ΅, Π°ΠΊΠΎ ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅Π± ΡΠΊΡΠ°ΠΏΠΈΠ½Π³ Π½Π΅ΡΠ°Π·ΡΠΌΠ½ΠΎ.
ΠΡΡΠ²ΠΈ ΡΡΡΠΏΠΊΠΈ
ΠΡΠΎ ΠΎΠ±Ρ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ Π² Π½Π°ΡΠΈΡ ΠΊΠΎΠ΄ Π·Π° ΡΠ΅Π± ΡΠΊΡΠ΅ΠΏΠ΅Ρ:
- ΠΠΌΠΏΠΎΡΡΠΈΡΠ°ΠΉΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
- ΠΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΡΠ°Π·Π΄Π΅Π» Π½Π° Google Chrome.
- ΠΠ·Π²ΠΈΠΊΠ°ΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ° Π±ΠΎΡΠ°, ΠΊΠ°ΡΠΎ ΠΌΡ ΠΏΡΠ΅Π΄Π°Π²Π° Π³ΡΠ°Π΄ΠΎΠ²Π΅ΡΠ΅ ΠΈ Π΄Π°ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΡΠΈ ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π±ΠΈΠ»Π΅ΡΠΈ.
- Π’Π°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²Π·Π΅ΠΌΠ° ΠΏΡΡΠ²ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ, ΡΠΎΡΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈ, ΠΈ ΡΡΠ°ΠΊΠ²Π° Π²ΡΡΡ Ρ Π±ΡΡΠΎΠ½, Π·Π° Π΄Π° Π·Π°ΡΠ΅Π΄ΠΈ ΠΎΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ.
- ΠΡΡΠ³Π° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ±ΠΈΡΠ° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΡΠ»Π°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΈ Π²ΡΡΡΠ° ΡΠ°ΠΌΠΊΠ° Ρ Π΄Π°Π½Π½ΠΈ.
- ΠΠ²Π΅ΡΠ΅ ΠΏΡΠ΅Π΄Ρ ΠΎΠ΄Π½ΠΈ ΡΡΡΠΏΠΊΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΡΡΠ΅Π· ΡΠΈΠΏΠΎΠ²Π΅ ΡΠΎΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΡΠ΅Π½Π° Π½Π° Π±ΠΈΠ»Π΅Ρ (Π΅Π²ΡΠΈΠ½) ΠΈ ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡ Π½Π° ΠΏΠΎΠ»Π΅ΡΠ° (Π½Π°ΠΉ-Π±ΡΡΠ·).
- ΠΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π½Π° ΡΠΊΡΠΈΠΏΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΈΠΌΠ΅ΠΉΠ», ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ΅Π½ΠΈΡΠ΅ Π½Π° Π±ΠΈΠ»Π΅ΡΠΈΡΠ΅ (Π½Π°ΠΉ-Π΅Π²ΡΠΈΠ½ΠΈΡΠ΅ Π±ΠΈΠ»Π΅ΡΠΈ ΠΈ ΡΡΠ΅Π΄Π½Π°ΡΠ° ΡΠ΅Π½Π°), Π° ΡΠ°ΠΌΠΊΠ° Ρ Π΄Π°Π½Π½ΠΈ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠΎΡΡΠΈΡΠ°Π½Π° ΠΏΠΎ ΡΡΠΈΡΠ΅ Π³ΠΎΡΠ΅ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ°, ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π° ΠΊΠ°ΡΠΎ Excel ΡΠ°ΠΉΠ».
- ΠΡΠΈΡΠΊΠΈ Π³ΠΎΡΠ΅ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π² ΡΠΈΠΊΡΠ» ΡΠ»Π΅Π΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅.
Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ Selenium ΠΏΡΠΎΠ΅ΠΊΡ Π·Π°ΠΏΠΎΡΠ²Π° Ρ ΡΠ΅Π± Π΄ΡΠ°ΠΉΠ²Π΅Ρ. ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ
ΠΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ Π² ΠΌΠΎΡΡΠ° ΠΈΡΡΠΎΡΠΈΡ Π½Π΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°ΠΌ Π΄Π° ΠΎΡΠ²ΠΎΡΡ Π½ΠΎΠ²ΠΈ Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠΈ Π·Π° Π½Π°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΈ ΠΎΡΠ΅ΡΡΠΈ Π·Π° ΡΠ°ΠΌΠΎΠ»Π΅ΡΠ½ΠΈ Π±ΠΈΠ»Π΅ΡΠΈ. ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΡΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠ°ΠΊΠΈΠ²Π° ΠΎΡΠ΅ΡΡΠΈ. ΠΡΠΎΡΡΠΎ ΠΈΡΠΊΠ°ΠΌ Π΄Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ° Π½Π° ΡΠΈΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΏΡΠΎΡΡ, Π½ΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΡΠΎ ΠΊΠΎΠ΄Π°, Π·Π° ΠΊΠΎΠΉΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅.
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
ΠΠ° Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Ρ Π΄Π΅ΡΠ½ΠΈΡ Π±ΡΡΠΎΠ½ Π²ΡΡΡ Ρ ΡΠ°ΡΡΡΠ° ΠΎΡ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΡΠΎ Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π° ΠΈ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΠΠΎΠΏΠΈΡΠ°Π½Π΅ > ΠΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° 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