ΠΠ²ΡΠΎΡ ΡΡΠ°ΡΡΠΈ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ Π΅Ρ ΡΠ΅Π»Ρ β ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠ΅ΡΠ° Π½Π° Python Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Selenium, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊ ΡΠ΅Π½ Π½Π° Π°Π²ΠΈΠ°Π±ΠΈΠ»Π΅ΡΡ. ΠΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π±ΠΈΠ»Π΅ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π³ΠΈΠ±ΠΊΠΈΠ΅ Π΄Π°ΡΡ (+- 3 Π΄Π½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π΄Π°Ρ). Π‘ΠΊΡΠ°ΠΏΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊΠ° Π² Excel-ΡΠ°ΠΉΠ»Π΅ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΌΡ, ΠΊΡΠΎ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΡΠΈΠ», ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΈΡΡΠΌΠΎ Ρ ΠΎΠ±ΡΠΈΠΌΠΈ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡΠΌΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΅ΠΌΡ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ. ΠΠ°Π΄Π°ΡΠ° ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° β ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠ°ΠΌ Π² ΠΏΠΎΠΈΡΠΊΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²ΡΠ³ΠΎΠ΄Π½ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΡΠ»ΠΈ Π²Ρ, ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡ Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠΌ, ΠΏΠΎΡΡΠ²ΡΡΠ²ΡΠ΅ΡΠ΅, ΡΡΠΎ ΠΏΠΎΡΠ΅ΡΡΠ»ΠΈΡΡ β Π²Π·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π°
Π§ΡΠΎ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΊΠ°ΡΡ?
ΠΡ Π²ΠΎΠ»ΡΠ½Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠΉ Π·Π΄Π΅ΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π²Π°ΠΌ Ρ
ΠΎΡΠ΅ΡΡΡ. Π―, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ» Π΅Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΡΡΠΎΠ² Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π½Ρ ΠΈ Π±ΠΈΠ»Π΅ΡΠΎΠ² Π² ΠΌΠΎΠΉ ΡΠΎΠ΄Π½ΠΎΠΉ Π³ΠΎΡΠΎΠ΄. ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅ΡΡΡΠ·Π½ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ Π½Π° ΠΏΠΎΠΈΡΠΊ Π²ΡΠ³ΠΎΠ΄Π½ΡΡ
Π±ΠΈΠ»Π΅ΡΠΎΠ² β Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ (ΠΏΡΠΎΡΡΠΎΠΉ
Π― ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΡΡΠ» ΡΠ°ΡΠΈΡΠΎΠ² Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, Π½ΠΎ ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ
ΠΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅, ΠΊΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Β«Π³ΠΈΠ±ΠΊΠ°Ρ Π΄Π°ΡΠ°Β», ΡΠΊΡΠΈΠΏΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΡΡΡ Π΄Π½Π΅ΠΉ ΠΎΡ Π·Π°Π΄Π°Π½Π½ΡΡ Π΄Π°Ρ. Π₯ΠΎΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠΈΡΠΊ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π΅Π³ΠΎ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΌΠΎΠ³ Π±Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ ΠΏΠΎΠ»ΡΡΠΎΠ². Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΈΡΠΊΠ°ΡΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠ΅ ΡΠ°ΡΠΈΡΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π²Π΅ΡΡΠΌΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌΠΈ.
ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ΅Π½ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠ΅Ρ?
ΠΠΎΠ³Π΄Π° Ρ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π·Π°Π½ΡΠ»ΡΡ Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠΈΠ½Π³ΠΎΠΌ, ΠΌΠ½Π΅, ΡΠ΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ. ΠΠ½Π΅ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π² ΡΡΠ΅ΡΠ΅ ΠΏΡΠΎΠ³Π½ΠΎΠ·Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΌΠΎΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠΊΡΠ°ΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠΎΠ². ΠΠΎ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ β ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Ρ Π²Π΅Π±-ΡΠ°ΠΉΡΠΎΠ². ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ Π²Π½ΠΈΠΊΠ°Π» Π² ΡΡΡ ΡΠ΅ΠΌΡ, Ρ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠΈΠ½Π³ ΡΠ²Π»ΡΠ΅ΡΡΡ Β«Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Π΅ΠΌΒ» ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ ΡΠ΅ΡΠΈΡΠ΅, ΡΡΠΎ ΡΡΠΎ β ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΌΠ΅Π»ΠΎΠ΅ Π·Π°ΡΠ²Π»Π΅Π½ΠΈΠ΅. ΠΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Google Π½Π°ΡΠ°Π»Π°ΡΡ Ρ Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΠ°ΡΡΠΈ ΠΠ΅ΠΉΠ΄ΠΆ ΡΠΎΠ·Π΄Π°Π» Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Java ΠΈ Python. Π ΠΎΠ±ΠΎΡΡ Google ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΈ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΠΏΡΡΠ°ΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π½Π°ΠΈΠ»ΡΡΡΠΈΠ΅ ΠΎΡΠ²Π΅ΡΡ Π½Π° ΠΈΡ Π²ΠΎΠΏΡΠΎΡΡ. Π£ Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠΈΠ½Π³Π° Π΅ΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΈ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Π°ΠΌ, Π² ΡΡΠ΅ΡΠ΅ Data Science, ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅, ΡΠΎ Π²Π°ΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π·Π°Π²Π΅ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π²ΡΠΊΠΈ ΡΠΊΡΠ°ΠΏΠΈΠ½Π³Π°.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ
Π·Π΄Π΅ΡΡ ΠΏΡΠΈΡΠΌΠΎΠ² Ρ Π½Π°ΡΡΠ» Π² Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ
ΠΡΠ±ΠΈΡΠ΅ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ?!
ΠΠ° ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ, Π²ΡΠ½Π΅ΡΠ΅Π½Π½ΡΠΉ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°, ΡΠ°ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ, ΡΠ½Π°Π±ΠΆΡΠ½Π½ΡΠΉ ΠΏΠ°ΡΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΉ ΠΈΠ· ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠΉ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠΌΡ Π΅Π³ΠΎ Π·Π°Π΄Π°Π»ΠΈ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· Π½Π°Ρ ΡΠΎΠ³Π»Π°ΡΠΈΡΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΡ β ΡΡΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ Π² Π½ΠΎΠ²ΡΠ΅ ΠΊΡΠ»ΡΡΡΡΠ½ΡΠ΅ ΡΡΠ΅Π΄Ρ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΡΡΠ³ΠΎΠ·ΠΎΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°ΡΡ ΠΊΠΎΠΌΡ-Π½ΠΈΠ±ΡΠ΄Ρ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΡΠΎΠΌ, Π½ΡΠ°Π²ΠΈΡΡΡ Π»ΠΈ Π΅ΠΌΡ ΠΈΡΠΊΠ°ΡΡ Π°Π²ΠΈΠ°Π±ΠΈΠ»Π΅ΡΡ, ΡΠΎ Ρ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΎΡΠ²Π΅Ρ Π½Π° Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΆΠ΅ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΡΠ°ΠΊΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½ΡΠΌ. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΡ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Python.
ΠΠ΅ΡΠ²ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠ΅ΡΠΈΡΡ Π½Π° ΠΏΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΏΠΎ Π°Π²ΠΈΠ°Π±ΠΈΠ»Π΅ΡΠ°ΠΌ, Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π±ΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π±ΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π΄Π°Π»ΠΎΡΡ ΠΌΠ½Π΅ Π½Π΅Π»Π΅Π³ΠΊΠΎ, Π½ΠΎ Π² ΠΈΡΠΎΠ³Π΅ Ρ Π²ΡΠ±ΡΠ°Π» ΡΠ΅ΡΠ²ΠΈΡ Kayak. Π― ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΡΠ΅ΡΠ²ΠΈΡΡ Momondo, Skyscanner, Expedia, Π΄Π° ΠΈ Π΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅, Π½ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π·Π°ΡΠΈΡΡ ΠΎΡ ΡΠΎΠ±ΠΎΡΠΎΠ² Π½Π° ΡΡΠΈΡ ΡΠ΅ΡΡΡΡΠ°Ρ Π±ΡΠ»ΠΈ Π½Π΅ΠΏΡΠΎΠ±ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ. ΠΠΎΡΠ»Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΠΏΡΡΠΎΠΊ, Π² Ρ ΠΎΠ΄Π΅ ΠΊΠΎΡΠΎΡΡΡ , ΠΏΡΡΠ°ΡΡΡ ΡΠ±Π΅Π΄ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ ΡΠΎ ΡΠ²Π΅ΡΠΎΡΠΎΡΠ°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄Π°ΠΌΠΈ, Ρ ΡΠ΅ΡΠΈΠ», ΡΡΠΎ ΠΌΠ½Π΅ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Kayak, Π½Π΅ΡΠΌΠΎΡΡΡ Π΄Π°ΠΆΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΈ ΡΡΡ, Π΅ΡΠ»ΠΈ Π·Π° ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°Π½ΠΈΡ, ΡΠΎΠΆΠ΅ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. ΠΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π±ΠΎΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ» Π±Ρ Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΡΠ°ΠΉΡΡ Π² ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π°Ρ ΠΎΡ 4 Π΄ΠΎ 6 ΡΠ°ΡΠΎΠ², ΠΈ Π²ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ. ΠΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Kayak, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Π°Ρ Π½Π°ΡΠΈΠ½Π°ΡΡ Π΄ΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌΠΈ, ΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ Π²ΡΡΡΠ½ΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π±ΠΎΡ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠΎΠ², ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡΡΡ. ΠΡ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ, Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π° Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°ΠΊ ΠΈ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅ β ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ .
ΠΡΠ»ΠΈ Π²Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠΈΠ½Π³ΠΎΠΌ, ΠΈ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ ΠΎ ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅Π±-ΡΠ°ΠΉΡΡ Π²ΡΠ΅ΠΌΠΈ ΡΠΈΠ»Π°ΠΌΠΈ Ρ Π½ΠΈΠΌ Π±ΠΎΡΡΡΡΡ, ΡΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠΏΠ°ΡΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ β ΠΎΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠ΅Π±Π΅ ΡΡΠ»ΡΠ³Ρ ΠΈ ΠΏΠΎΠΈΡΠΈΡΠ΅ Π² Google ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΏΠΎ ΡΠ»ΠΎΠ²Π°ΠΌ Β«web scraping etiquetteΒ». ΠΠ°ΡΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ ΡΠΊΠΎΡΠ΅Π΅, ΡΠ΅ΠΌ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠΈΠ½Π³ΠΎΠΌ Π½Π΅ΡΠ°Π·ΡΠΌΠ½ΠΎ.
ΠΠ°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ
ΠΠΎΡ ΠΎΠ±ΡΠΈΠΉ ΠΎΠ±Π·ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π² ΠΊΠΎΠ΄Π΅ Π½Π°ΡΠ΅Π³ΠΎ Π²Π΅Π±-ΡΠΊΡΠ°ΠΏΠ΅ΡΠ°:
- ΠΠΌΠΏΠΎΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
- ΠΡΠΊΡΡΡΠΈΠ΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Google Chrome.
- ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π±ΠΎΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π΅ΠΌΡ Π³ΠΎΡΠΎΠ΄Π° ΠΈ Π΄Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π±ΠΈΠ»Π΅ΡΠΎΠ².
- ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊΠ°, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΊΡΠΈΡΠ΅ΡΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅ΠΉ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ (best), ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
- ΠΡΡ ΠΎΠ΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎ Π²ΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ΅ΠΉΠΌ Π΄Π°Π½Π½ΡΡ .
- ΠΠ²Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΠ°Π³Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠΎΠ² ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΡΠ΅Π½Π΅ Π±ΠΈΠ»Π΅ΡΠΎΠ² (cheap) ΠΈ ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅Π»ΡΡΠ° (fastest).
- ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΊΡΠΈΠΏΡΠ° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΈΡΡΠΌΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΠΊΡΠ°ΡΠΊΡΡ ΡΠ²ΠΎΠ΄ΠΊΡ ΠΎ ΡΠ΅Π½Π°Ρ Π±ΠΈΠ»Π΅ΡΠΎΠ² (ΡΠ°ΠΌΡΠ΅ Π΄Π΅ΡΡΠ²ΡΠ΅ Π±ΠΈΠ»Π΅ΡΡ ΠΈ ΡΡΠ΅Π΄Π½ΡΡ ΡΠ΅Π½Π°), Π° ΡΡΠ΅ΠΉΠΌ Π΄Π°Π½Π½ΡΡ ΡΠΎ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡΠΌΠΈ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎ ΡΡΡΠΌ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΌ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌ, ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ 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
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, Π½ΡΠΆΠ½ΠΎ ΡΡΠ»ΠΊΠ½ΡΡΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠ΅ΠΌΡ Π²Π°Ρ ΡΡΠ°ΡΡΠΊΡ ΠΊΠΎΠ΄Π° ΠΈ Π²ΡΠ±ΡΠ°ΡΡ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Copy > Copy XPath.
ΠΠΎΡ ΡΡΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Cheapest:
cheap_results = β//a[@data-code = "price"]β
ΠΠΎΠΌΠ°Π½Π΄Π° Copy > Copy 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
).
ΠΡΠ²ΠΎΠ΄ΡΡΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠΊΠΎ Π²ΠΈΠ΄Π΅ΡΡ Π²ΡΡ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎ-ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ° ΡΠ°Π±ΠΎΡΡ!
ΠΠ΅Π³ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅Ρ ΠΈ Π½Π°ΡΠ½ΡΠΌ. ΠΠ½Π΅ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π»ΡΡΠΎΠ², ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠΎΡΠΎΡΡΡ
ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π²ΡΠ·Π²Π°ΡΡ Ρ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠΈΠ΅ ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ ΡΡΠ»ΠΊΠ°Ρ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Load more results ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΠ°. Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π±Π»ΠΎΠΊ 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 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com