Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚

ΠΠ²Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° статията, Ρ‡ΠΈΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π²ΠΎΠ΄ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ днСс, ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Ρ†Π΅Π»Ρ‚Π° ΠΉ Π΅ Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡƒΠ΅Π± скрСпСр Π² Python, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ Selenium, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚ΡŠΡ€ΡΠΈ Ρ†Π΅Π½ΠΈ Π½Π° самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ. ΠŸΡ€ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π±ΠΈΠ»Π΅Ρ‚ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ гъвкави Π΄Π°Ρ‚ΠΈ (+- 3 Π΄Π½ΠΈ спрямо посочСнитС Π΄Π°Ρ‚ΠΈ). Π‘ΠΊΡ€Π΅ΠΏΠ΅Ρ€ΡŠΡ‚ Π·Π°ΠΏΠ°Π·Π²Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ във Ρ„Π°ΠΉΠ» Π½Π° Excel ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π½Π° Π»ΠΈΡ†Π΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠ»ΠΎ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ, ΠΈΠΌΠ΅ΠΉΠ» с ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΠ». Π¦Π΅Π»Ρ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π½Π° ΠΏΡŠΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° намСрят Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ сдСлки.

Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚

Ако, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, сС чувстватС ΠΈΠ·Π³ΡƒΠ±Π΅Π½ΠΈ, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Ρ‚ΠΎΠ²Π° статия.

Какво Ρ‰Π΅ Ρ‚ΡŠΡ€ΡΠΈΠΌ?

Π’ΠΈΠ΅ стС свободни Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ систСмата, описана Ρ‚ΡƒΠΊ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅. НапримСр, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… Π³ΠΎ, Π·Π° Π΄Π° Ρ‚ΡŠΡ€ΡΡ ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΊΠΈ ΠΏΡ€Π΅Π· ΡƒΠΈΠΊΠ΅Π½Π΄Π° ΠΈ Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π΄ΠΎ родния ΠΌΠΈ Π³Ρ€Π°Π΄. Ако сСриозно искатС Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ΅Ρ‡Π΅Π»ΠΈΠ²ΡˆΠΈ Π±ΠΈΠ»Π΅Ρ‚ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС скрипта Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° (просто ΡΡŠΡ€Π²ΡŠΡ€, Π·Π° 130 Ρ€ΡƒΠ±Π»ΠΈ Π½Π° мСсСц, Π΅ доста подходящ Π·Π° Ρ‚ΠΎΠ²Π°) ΠΈ сС ΡƒΠ²Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ вСднъТ ΠΈΠ»ΠΈ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ Π½Π° Π΄Π΅Π½. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Ρ‰Π΅ Π²ΠΈ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅ΠΉΠ». ОсвСн Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° настроитС всичко Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ ΡΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ Π΄Π° записва Excel Ρ„Π°ΠΉΠ» с Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ° Dropbox, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ всяко място ΠΈ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅.

Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚
ВсС ΠΎΡ‰Π΅ Π½Π΅ съм Π½Π°ΠΌΠ΅Ρ€ΠΈΠ» Ρ‚Π°Ρ€ΠΈΡ„ΠΈ с Π³Ρ€Π΅ΡˆΠΊΠΈ, Π½ΠΎ мисля, Ρ‡Π΅ Π΅ възмоТно

ΠŸΡ€ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ спомСнахмС, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° β€žΠ³ΡŠΠ²ΠΊΠ°Π²Π° Π΄Π°Ρ‚Π°β€œ, ΡΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ Π½Π°ΠΌΠΈΡ€Π° ΠΎΡ„Π΅Ρ€Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Ρ‚Ρ€ΠΈ Π΄Π½ΠΈ ΠΎΡ‚ Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΏΡ€ΠΈ стартиранС Π½Π° скрипта Ρ‚ΠΎΠΉ Ρ‚ΡŠΡ€ΡΠΈ ΠΎΡ„Π΅Ρ€Ρ‚ΠΈ само Π² Π΅Π΄Π½Π° посока, лСсно Π΅ Π΄Π° Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π° Π΄Π°Π½Π½ΠΈ Π·Π° няколко посоки Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π°. Π‘ Π½Π΅Π³ΠΎΠ²Π° ΠΏΠΎΠΌΠΎΡ‰ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΡ€ΠΈ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠ½ΠΈ Ρ‚Π°Ρ€ΠΈΡ„ΠΈ; Ρ‚Π°ΠΊΠΈΠ²Π° Π½Π°Ρ…ΠΎΠ΄ΠΊΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсни.

Π—Π°Ρ‰ΠΎ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π΄Ρ€ΡƒΠ³ ΡƒΠ΅Π± скрСпСр?

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ… Π΄Π° сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌ с ΡƒΠ΅Π± скрапинг, чСстно ΠΊΠ°Π·Π°Π½ΠΎ Π½Π΅ сС интСрСсувах особСно ΠΎΡ‚ Ρ‚ΠΎΠ²Π°. Π˜ΡΠΊΠ°Ρ… Π΄Π° правя ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π² областта Π½Π° ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π½ΠΎΡ‚ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅, финансовия Π°Π½Π°Π»ΠΈΠ· ΠΈ Π΅Π²Π΅Π½Ρ‚ΡƒΠ°Π»Π½ΠΎ Π² областта Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° Π΅ΠΌΠΎΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎΡ‚ΠΎ оцвСтяванС Π½Π° тСкстовСтС. Но сС ΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсно Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° създадСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, която ΡΡŠΠ±ΠΈΡ€Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ уСбсайтовС. Π”ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π°Π²Π»ΠΈΠ·Π°Ρ… Π² Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ°, Ρ€Π°Π·Π±Ρ€Π°Ρ…, Ρ‡Π΅ ΡƒΠ΅Π± скрапиранСто Π΅ β€žΠ΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡΡ‚β€œ Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

МоТС Π±ΠΈ смятатС, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ Ρ‚Π²ΡŠΡ€Π΄Π΅ смСло Ρ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΈΠ΅. Но помислСтС, Ρ‡Π΅ Google Π·Π°ΠΏΠΎΡ‡Π½Π° с ΡƒΠ΅Π± скрСпСр, ΠΊΠΎΠΉΡ‚ΠΎ Π›Π°Ρ€ΠΈ ПСйдТ създадС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Java ΠΈ Python. Π ΠΎΠ±ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π° Google изслСдват ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, ΠΎΠΏΠΈΡ‚Π²Π°ΠΉΠΊΠΈ сС Π΄Π° прСдоставят Π½Π° своитС ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈ. Π£Π΅Π± ΡΠΊΡ€Π΅ΠΉΠΏΠΈΠ½Π³ΡŠΡ‚ ΠΈΠΌΠ° Π±Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΈ прилоТСния ΠΈ Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ сС интСрСсуватС ΠΎΡ‚ Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ Π² Data Science, Ρ‰Π΅ Π²ΠΈ трябват някои умСния Π·Π° скрапинг, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅.

НамСрих някои ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π·Π° чудСсни ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° Π·Π° ΡƒΠ΅Π± скрапинг, ΠΊΠΎΠΉΡ‚ΠΎ наскоро ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΡ…. Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΌΠ½ΠΎΠ³ΠΎ прости ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΈΠ΄Π΅ΠΈ Π·Π° практичСско ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡƒΡ‡Π΅Π½ΠΎΡ‚ΠΎ. ОсвСн Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ интСрСсна Π³Π»Π°Π²Π° Π·Π° заобикалянС Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ Π½Π° reCaptcha. Π’ΠΎΠ²Π° бСшС Π½ΠΎΠ²ΠΈΠ½Π° Π·Π° ΠΌΠ΅Π½, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΡ€ΠΈ Π½Π΅ Π·Π½Π°Π΅Ρ…, Ρ‡Π΅ ΠΈΠΌΠ° спСциални инструмСнти ΠΈ Π΄ΠΎΡ€ΠΈ Ρ†Π΅Π»ΠΈ услуги Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

ΠžΠ±ΠΈΡ‡Π°Ρ‚Π΅ Π»ΠΈ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚Π΅?!

На простия ΠΈ доста Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π΅Π½ Π²ΡŠΠΏΡ€ΠΎΡ, поставСн Π² Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π», чСсто ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ‡ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€, ΠΏΡ€ΠΈΠ΄Ρ€ΡƒΠΆΠ΅Π½ ΠΎΡ‚ няколко истории ΠΎΡ‚ ΠΏΡŠΡ‚ΡƒΠ²Π°Π½ΠΈΡΡ‚Π° Π½Π° Ρ‡ΠΎΠ²Π΅ΠΊΠ°, Π½Π° ΠΊΠΎΠ³ΠΎΡ‚ΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½. ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ нас Π±ΠΈΡ…Π° сС съгласили, Ρ‡Π΅ ΠΏΡŠΡ‚ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π΅ чудСсСн Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС ΠΏΠΎΡ‚ΠΎΠΏΠΈΡ‚Π΅ Π² Π½ΠΎΠ²Π° ΠΊΡƒΠ»Ρ‚ΡƒΡ€Π½Π° срСда ΠΈ Π΄Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ‚Π΅ Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚ΠΈΡ‚Π΅ си. Но Π°ΠΊΠΎ ΠΏΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ някого Π΄Π°Π»ΠΈ ΠΎΠ±ΠΈΡ‡Π° Π΄Π° Ρ‚ΡŠΡ€ΡΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ, сигурСн съм, Ρ‡Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ няма Π΄Π° Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½. Π’ интСрСс Π½Π° истината Python Π½ΠΈ ΠΈΠ΄Π²Π° Π½Π° ΠΏΠΎΠΌΠΎΡ‰ Ρ‚ΡƒΠΊ.

ΠŸΡŠΡ€Π²Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π°, която трябва Π΄Π° Ρ€Π΅ΡˆΠΈΠΌ ΠΏΠΎ ΠΏΡŠΡ‚Ρ към ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° систСма Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° информация Π·Π° самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ, Ρ‰Π΅ бъдС ΠΈΠ·Π±ΠΎΡ€ΡŠΡ‚ Π½Π° подходяща ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, ΠΎΡ‚ която Ρ‰Π΅ Π²Π·Π΅ΠΌΠ΅ΠΌ информация. Π Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ ΠΌΠΈ бСшС лСсно, Π½ΠΎ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΈΠ·Π±Ρ€Π°Ρ… услугата Каяк. ΠžΠΏΠΈΡ‚Π°Ρ… услугитС Π½Π° Momondo, Skyscanner, Expedia ΠΈ няколко Π΄Ρ€ΡƒΠ³ΠΈ, Π½ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈΡ‚Π΅ Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° Π½Π° Ρ€ΠΎΠ±ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ рСсурси бяха Π½Π΅ΠΏΡ€ΠΎΠ½ΠΈΡ†Π°Π΅ΠΌΠΈ. Π‘Π»Π΅Π΄ няколко ΠΎΠΏΠΈΡ‚Π°, ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° сС справя със свСтофари, ΠΏΠ΅ΡˆΠ΅Ρ…ΠΎΠ΄Π½ΠΈ ΠΏΡ€Π΅Ρ…ΠΎΠ΄ΠΈ ΠΈ вСлосипСди, ΠΎΠΏΠΈΡ‚Π²Π°ΠΉΠΊΠΈ сС Π΄Π° убСдя систСмитС, Ρ‡Π΅ съм Ρ‡ΠΎΠ²Π΅ΠΊ, Ρ€Π΅ΡˆΠΈΡ…, Ρ‡Π΅ Kayak Π΅ Π½Π°ΠΉ-подходящият Π·Π° ΠΌΠ΅Π½, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ сС Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚ Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ страници Π² ΠΊΡ€Π°Ρ‚ΠΊΠΈ сроковС, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Успях Π΄Π° Π½Π°ΠΊΠ°Ρ€Π°ΠΌ Π±ΠΎΡ‚Π° Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° заявки към сайта Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ ΠΎΡ‚ 4 Π΄ΠΎ 6 часа ΠΈ всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅. ΠžΡ‚ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ трудности ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Kayak, Π½ΠΎ Π°ΠΊΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ‚ Π΄Π° Π²ΠΈ досаТдат с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° трябва ΠΈΠ»ΠΈ Π΄Π° сС справитС с тях Ρ€ΡŠΡ‡Π½ΠΎ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° стартиратС Π±ΠΎΡ‚Π°, ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°Ρ‚Π΅ няколко часа ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ трябва Π΄Π° спрат. Ако Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лСсно Π΄Π° Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠ΄Π° Π·Π° Π΄Ρ€ΡƒΠ³Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΈ Π°ΠΊΠΎ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠΎΠ±Ρ‰ΠΈΡ‚Π΅ Π·Π° Ρ‚ΠΎΠ²Π° Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅.

Ако Ρ‚Π΅ΠΏΡŠΡ€Π²Π° Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚Π΅ с ΡƒΠ΅Π± скрапинга ΠΈ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ Π·Π°Ρ‰ΠΎ някои уСбсайтовС сС борят с Π½Π΅Π³ΠΎ, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ ΠΏΡŠΡ€Π²ΠΈΡ си ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Ρ‚Π°Π·ΠΈ област, Π½Π°ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ си услуга ΠΈ ΠΏΠΎΡ‚ΡŠΡ€ΡΠ΅Ρ‚Π΅ Π² Google Π΄ΡƒΠΌΠΈΡ‚Π΅ β€žΠ΅Ρ‚ΠΈΠΊΠ΅Ρ‚ Π·Π° ΡƒΠ΅Π± ΡΠΊΡ€Π°ΠΏΠΈΠ½Π³β€œ . Π’Π°ΡˆΠΈΡ‚Π΅ СкспСримСнти ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π°Ρ‚ ΠΏΠΎ-Ρ€Π°Π½ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ си мислитС, Π°ΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΡƒΠ΅Π± скрапинг Π½Π΅Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ.

ΠŸΡŠΡ€Π²ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ

Π•Ρ‚ΠΎ ΠΎΠ±Ρ‰ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС случи Π² нашия ΠΊΠΎΠ΄ Π·Π° ΡƒΠ΅Π± скрСпСр:

  • Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • ΠžΡ‚Π²Π°Ρ€ΡΠ½Π΅ Π½Π° Ρ€Π°Π·Π΄Π΅Π» Π½Π° Google Chrome.
  • Π˜Π·Π²ΠΈΠΊΠ°ΠΉΡ‚Π΅ функция, която стартира Π±ΠΎΡ‚Π°, ΠΊΠ°Ρ‚ΠΎ ΠΌΡƒ ΠΏΡ€Π΅Π΄Π°Π²Π° Π³Ρ€Π°Π΄ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ Π΄Π°Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΡ€ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π±ΠΈΠ»Π΅Ρ‚ΠΈ.
  • Π’Π°Π·ΠΈ функция Π²Π·Π΅ΠΌΠ° ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ, сортирани ΠΏΠΎ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈ, ΠΈ Ρ‰Ρ€Π°ΠΊΠ²Π° Π²ΡŠΡ€Ρ…Ρƒ Π±ΡƒΡ‚ΠΎΠ½, Π·Π° Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈ ΠΎΡ‰Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.
  • Π”Ρ€ΡƒΠ³Π° функция ΡΡŠΠ±ΠΈΡ€Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ цялата страница ΠΈ Π²Ρ€ΡŠΡ‰Π° Ρ€Π°ΠΌΠΊΠ° с Π΄Π°Π½Π½ΠΈ.
  • Π”Π²Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Ρ…ΠΎΠ΄Π½ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ Ρ‡Ρ€Π΅Π· Ρ‚ΠΈΠΏΠΎΠ²Π΅ сортиранС ΠΏΠΎ Ρ†Π΅Π½Π° Π½Π° Π±ΠΈΠ»Π΅Ρ‚ (Π΅Π²Ρ‚ΠΈΠ½) ΠΈ ΠΏΠΎ скорост Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π° (Π½Π°ΠΉ-Π±ΡŠΡ€Π·).
  • На потрСбитСля Π½Π° скрипта сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΈΠΌΠ΅ΠΉΠ», ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π° информация Π·Π° Ρ†Π΅Π½ΠΈΡ‚Π΅ Π½Π° Π±ΠΈΠ»Π΅Ρ‚ΠΈΡ‚Π΅ (Π½Π°ΠΉ-Π΅Π²Ρ‚ΠΈΠ½ΠΈΡ‚Π΅ Π±ΠΈΠ»Π΅Ρ‚ΠΈ ΠΈ срСдната Ρ†Π΅Π½Π°), Π° Ρ€Π°ΠΌΠΊΠ° с Π΄Π°Π½Π½ΠΈ с информация, сортирана ΠΏΠΎ Ρ‚Ρ€ΠΈΡ‚Π΅ горСпосочСни ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, сС записва ΠΊΠ°Ρ‚ΠΎ Excel Ρ„Π°ΠΉΠ».
  • Всички горСпосочСни дСйствия сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ Π² Ρ†ΠΈΠΊΡŠΠ» слСд ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅.

Врябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ всСки Selenium ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π°ΠΏΠΎΡ‡Π²Π° с ΡƒΠ΅Π± Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Chromedriver, работя с Google Chrome, Π½ΠΎ ΠΈΠΌΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΡ†ΠΈΠΈ. PhantomJS ΠΈ Firefox ΡΡŠΡ‰ΠΎ са популярни. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, трябва Π΄Π° Π³ΠΎ поставитС Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ° ΠΈ Ρ‚ΠΎΠ²Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ. ΠŸΡŠΡ€Π²ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅ Π½Π° нашия скрипт отварят Π½ΠΎΠ² Ρ€Π°Π·Π΄Π΅Π» Π½Π° Chrome.

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π² моята история Π½Π΅ сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΌ Π΄Π° отворя Π½ΠΎΠ²ΠΈ Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚ΠΈ Π·Π° Π½Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° страхотни ΠΎΡ„Π΅Ρ€Ρ‚ΠΈ Π·Π° самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ. Има ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° ΠΎΡ„Π΅Ρ€Ρ‚ΠΈ. ΠŸΡ€ΠΎΡΡ‚ΠΎ искам Π΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ° Π½Π° Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» прост, Π½ΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π•Ρ‚ΠΎ ΠΊΠΎΠ΄Π°, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΡ€Π΅.

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 ΡƒΠ΅Π± Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π±ΡƒΡ‚ΠΎΠ½Π° Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ трябва Π΄Π° сС появят Π½Π° страницата.

Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚
ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° get ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΄Π²Π° ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ ΠΏΡŠΡ‚ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ бях ΠΏΠΎΠΌΠΎΠ»Π΅Π½ Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° reCaptcha. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€ΡŠΡ‡Π½ΠΎ ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅ Π΄Π° СкспСримСнтиратС, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ систСмата Ρ€Π΅ΡˆΠΈ Π΄Π° изпълни Π½ΠΎΠ²Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°. ΠšΠΎΠ³Π°Ρ‚ΠΎ тСствах скрипта, изглСТдашС, Ρ‡Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° сСсия Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΡ‡Π° Π³Π»Π°Π΄ΠΊΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π°ΠΊΠΎ искатС Π΄Π° СкспСримСнтиратС с ΠΊΠΎΠ΄Π°, Ρ‰Π΅ трябва само ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π΄Π° провСряватС Ρ€ΡŠΡ‡Π½ΠΎ ΠΈ Π΄Π° оставятС ΠΊΠΎΠ΄Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ дълги ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сСсиитС Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅. И Π°ΠΊΠΎ сС замислитС, Ρ‡ΠΎΠ²Π΅ΠΊ Π΅Π΄Π²Π° Π»ΠΈ Ρ‰Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ информация Π·Π° Ρ†Π΅Π½ΠΈΡ‚Π΅ Π½Π° Π±ΠΈΠ»Π΅Ρ‚ΠΈΡ‚Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° Π½Π° 10-ΠΌΠΈΠ½ΡƒΡ‚Π½ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅.

Π Π°Π±ΠΎΡ‚Π° със страница Ρ‡Ρ€Π΅Π· XPath

И Ρ‚Π°ΠΊΠ°, ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† ΠΈ Π·Π°Ρ€Π΅Π΄ΠΈΡ…ΠΌΠ΅ сайта. Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ†Π΅Π½ΠΎΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ ΠΈ Π΄Ρ€ΡƒΠ³Π° информация, трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ XPath тСхнология ΠΈΠ»ΠΈ CSS сСлСктори. Π Π΅ΡˆΠΈΡ… Π΄Π° сС ΠΏΡ€ΠΈΠ΄ΡŠΡ€ΠΆΠ°ΠΌ към XPath ΠΈ Π½Π΅ чувствах Π½ΡƒΠΆΠ΄Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ CSS сСлСктори, Π½ΠΎ Π΅ напълно възмоТно Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½. НавигиранСто ΠΈΠ· страница с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° XPath ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈ Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ описах Π² Ρ‚ΠΎΠ²Π° статия, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰Π° ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ ΠΎΡ‚ ΠΊΠΎΠ΄Π° Π½Π° страницата, Ρ€Π°Π·Π±Ρ€Π°Ρ…, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½Π΅ Π΅ оптималният Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ. ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π² Ρ‚ΠΎΠ²Π° ΠšΠ½ΠΈΠ³Π°Ρ‚Π° прСдоставя ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ описаниС Π½Π° основитС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° със страници с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° XPath ΠΈ CSS сСлСктори. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° ΡƒΠ΅Π± Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€.

Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚
Π’Π°ΠΊΠ° Ρ‡Π΅, Π½Π΅ΠΊΠ° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ Π²ΡŠΡ€Ρ…Ρƒ Π±ΠΎΡ‚Π°. НСка ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ Π½Π°ΠΉ-Π΅Π²Ρ‚ΠΈΠ½ΠΈΡ‚Π΅ Π±ΠΈΠ»Π΅Ρ‚ΠΈ. Π’ слСдващото ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΡŠΡ‚ Π·Π° сСлСктор Π½Π° XPath Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ Π² Ρ‡Π΅Ρ€Π²Π΅Π½ΠΎ. Π—Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠ΄Π°, трябва Π΄Π° Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ с дСсния Π±ΡƒΡ‚ΠΎΠ½ Π²ΡŠΡ€Ρ…Ρƒ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π° страницата, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ интСрСсува ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Inspect ΠΎΡ‚ появилото сС мСню. Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° страницата, Ρ‡ΠΈΠΉΡ‚ΠΎ ΠΊΠΎΠ΄ Ρ‰Π΅ бъдС ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΈ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅.

Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚
Π’ΠΈΠΆΡ‚Π΅ ΠΊΠΎΠ΄Π° Π½Π° страницата

Π—Π° Π΄Π° намСря ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·ΡΡŠΠΆΠ΄Π΅Π½ΠΈΡΡ‚Π° си Π·Π° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° сСлСктори ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° слСднитС характСристики.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠ΄Π°:

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

Π—Π° Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ, трябва Π΄Π° Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ с дСсния Π±ΡƒΡ‚ΠΎΠ½ Π²ΡŠΡ€Ρ…Ρƒ частта ΠΎΡ‚ ΠΊΠΎΠ΄Π°, която Π²ΠΈ интСрСсува ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠšΠΎΠΏΠΈΡ€Π°Π½Π΅ > ΠšΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° XPath ΠΎΡ‚ ΠΌΠ΅Π½ΡŽΡ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ сС появява.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…, Π·Π° Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌ Π±ΡƒΡ‚ΠΎΠ½Π° Най-Свтиният:

cheap_results = β€˜//a[@data-code = "price"]’

Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚
ΠšΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° > ΠšΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° 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).

Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚
ΠŸΡŠΡ€Π²ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ Ρ€Π΅Π΄Π° сС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ясно Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ всичко, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ. ИмамС ΠΎΠ±Π°Ρ‡Π΅ ΠΏΠΎ-интСрСсни Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° информация. Врябва Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ всСки Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ.

Π—Π°Ρ…Π²Π°Ρ‰Π°ΠΉ сС Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°!

Най-лСсният Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ функция Π΅ Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈΡ‚Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΎΡ‚Ρ‚Π°ΠΌ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ. Π‘ΠΈΡ… искал Π΄Π° максимизирам броя Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΈΡ‚Π΅, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° информация, Π±Π΅Π· Π΄Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° съмнСния Π² услугата, която Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Π·Π°Ρ‚ΠΎΠ²Π° Ρ‰Ρ€Π°ΠΊΠ²Π°ΠΌ Π²ΡŠΡ€Ρ…Ρƒ Π±ΡƒΡ‚ΠΎΠ½Π° Π—Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΡ‰Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ вСднъТ ΠΏΡ€ΠΈ всяко ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° страницата. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ трябва Π΄Π° ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π±Π»ΠΎΠΊΠ° 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.....')

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° тСстовото изпълнСниС Π½Π° скрипта.
Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚
ВСстово изпълнСниС Π½Π° скрипта

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚

Ако стС стигнали Π΄ΠΎΡ‚ΡƒΠΊ, поздравлСния! Π’Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ ΡƒΠ΅Π± скрСпСр, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π²Π΅Ρ‡Π΅ Π²ΠΈΠΆΠ΄Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° подобряванСто ΠΌΡƒ. НапримСр, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° с Twilio, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° тСкстови ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ вмСсто ΠΈΠΌΠ΅ΠΉΠ»ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ VPN ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚ няколко ΡΡŠΡ€Π²ΡŠΡ€Π°. Има ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‰ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° потрСбитСля Π½Π° сайта Π΄Π°Π»ΠΈ Π΅ Ρ‡ΠΎΠ²Π΅ΠΊ, Π½ΠΎ ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅ΡˆΠ΅Π½. Π’ΡŠΠ² всСки случай, сСга ΠΈΠΌΠ°Ρ‚Π΅ Π±Π°Π·Π°, която ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ‚Π΅, Π°ΠΊΠΎ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅. НапримСр, ΡƒΠ²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ Excel Ρ„Π°ΠΉΠ» Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ Π½Π° потрСбитСля ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π΅Π½ Ρ„Π°ΠΉΠ» към ΠΈΠΌΠ΅ΠΉΠ».

Python - ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π² Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π²Ρ‚ΠΈΠ½ΠΈ самолСтни Π±ΠΈΠ»Π΅Ρ‚ΠΈ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Ρ‚

Π’ Π°Π½ΠΊΠ΅Ρ‚Π°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° участват само рСгистрирани ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π’ΠΏΠΈΡˆΠΈ сС, Моля Ρ‚Π΅.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π»ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π·Π° ΡƒΠ΅Π± скрапинг?

  • Π”Π°

  • НС

8 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ гласуваха. 1 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» сС Π²ΡŠΠ·Π΄ΡŠΡ€ΠΆΠ°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€