Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: Web
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
UchenikO
1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68
1

Как получить данные с сайта и пройти проверку на бота?

21.08.2017, 11:57. Просмотров 604. Ответов 4

Здравствуйте!
Прошу подсказать, может кто сталкивался.
Пытаюсь извлечь данные с сайта, чтобы составить рейтинг средней стоимости билетов в разные страны. Пробовал много всего, но не могу пройти проверку на бота.

Из последнего:

Python
1
2
3
4
5
6
import selenium
url ='https://www.skyscanner.ru/transport/flights-from/mosc/cheapest-flights-from-%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B0.html?adults=1&children=0&adultsv2=1&childrenv2=&infants=0&cabinclass=economy&rtn=0&preferdirects=false&outboundaltsenabled=false&inboundaltsenabled=false&oym=1709&ref=home'
driver = webdriver.Firefox()
driver.get(url)
print (driver.page_source)
driver.quit()
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2017, 11:57
Ответы с готовыми решениями:

Получить данные с сайта
Я попытался получить данные с сайта, но мне выдает ошибку "cant assign to...

Получить данные с сайта с помощью requests(выдаёт ошибку 503)
использую s = requests.Session() r = s.get(url, auth=(login, password)) ...

Как пройти проверку подлинности отправителя?
Всем привет! Столкнулся с такой проблемой, как прохождение dkim и т.д. Суть...

Получить данные от бота в телеграмм
Всем привет, пытаюсь получить данные от бота телеграмм Для начала...

Как пройти проверку подлинности на Прокси сервере в локальной сети
Всем Здравствуйте! В локальной сети организации выход в интернет реализован...

4
Garry Galler
1601 / 1274 / 480
Регистрация: 28.10.2013
Сообщений: 3,249
21.08.2017, 15:12 2
Я так понял сайт защищен сервисом http://www.distilnetworks.com.
Мне с двух попыток (через requests) так и не получилось замаскироваться: сессия, правильное заголовки, начальное рукопожатие с сайтом на стартовой странице для получения печенек, пауза перед вторым запросом. Все равно на запрос с параметрами шлет страничку с этой картинкой:
detected.png
Так что, увы
1
Jabbson
Эксперт по компьютерным сетям
3353 / 2427 / 746
Регистрация: 03.11.2009
Сообщений: 7,759
Записей в блоге: 3
21.08.2017, 15:14 3
Может вместо этого использовать API?
https://business.skyscanner.ru/ru-ru/products/travel-apis/
1
Garry Galler
1601 / 1274 / 480
Регистрация: 28.10.2013
Сообщений: 3,249
21.08.2017, 15:30 4
Цитата Сообщение от Jabbson Посмотреть сообщение
Может вместо этого использовать API?
А если физ. лицу не дадут? А только юр. лицам? :-) Не зря же защиту от анонимных ботов поставили.
--------------------------
Так что если API не дадут - остается вариант полной имитации действий пользователя на странице - жамкать все кнопощки и "серить" во все input'ы :-), раз запрос с готовыми параметрами в url не проходит.
1
UchenikO
1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68
25.08.2017, 13:00  [ТС] 5
Garry Galler, Jabbson,

Меня уже заблокировали похоже на skyscanner, не получается зайти с браузера на виртуальной машине)

Я уже отчаялся получить оттуда данные, смотрю другие агрегаторы.

Подскажите общий алгоритм получения средней цены за билет во все зарубежные страны из Москвы в декабре месяце примерно так должен выглядеть?

Т.е. мне нужен рейтинг, примерно похожий на:
| страна | ср.стоимость билета в страну |
'США' 21250 руб.
'Германия' 9400 руб.
--------------------------------------------------------
Например взять все с kayak.ru

1. Получаем список стран из википедии (как это сделать удобно, в виде CSV?) ----> ['Бразилия', 'Испания'...]

2. Получаем список дат в декабре ['01.12.2017', '02.12.2017'...'31.12.2017']

3. Заполняем поле 'куда' через selenium.element.send_keys - берем первое из списка - 'Бразилия'

4. Заполняем поле 'когда' - '01.12.2017' (берез из списка с датами) через selenium.element.send_keys, жмем 'Найти', видим список городов в заданной стране

5. Теперь мы находим среднюю цену в каждом городе ['Рио-де-Жанейро', 'Сан-Пауло' и т.д]

Например:
5.1 Кликаем по кнопке 'Найти цены' опять же, исп-я selenium, в городе 'Рио-де-Жанейро'
5.2 Видим список цен на 1 декабря в городе, собираем их через Beautiful Soup, видимо сразу суммируем и делим на кол-во предложений или заносим в БД или CSV? # Средняя цена на билет в городе 'Рио-де-Жанейро' на 01.12.2017
5.3 Переходим к следующему городу (наверно лучше вернуться на страницу назад?)

6. Получаем:
| город | ср. цена за билет
'Рио-де-Жанейро' 15900 руб.
'Сан-Пауло' 16800 руб.
...

7. Дальше ----> сумма(средняя цена в каждом городе)/кол-во городов = средняя цена на билет в стране 'Бразилия' на '01.12.2017'
Сохраняем в БД, CSV или просто в список?

8. Меняем дату в шаге 4, повторяем 5-7 и так до '31.12.2017' включительно

9. В итоге получим среднюю стоимость билета в стране 'Бразилия' за каждый день, отсюда просто
сумма(стоимость билета на каждый день в декабре месяце) / кол-во дней = средняя стоимость билета в стране

10. Сохраняем.

11. Переходим к следующей стране

Очень хотелось бы подробного разъяснения и советов, спасибо.
0
25.08.2017, 13:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2017, 13:00

Как получить данные с сайта?
как получить данные с сайта http://www.nbg.ge/index.php?m=582 прошу...

Как получить данные с сайта?
Не могу понять , как получить доступ к ресурсам при использовании прокси-сайтов...

Как получить данные с веб-сайта?
Здравствуйте. Возникла необходимость дистанционно ограничивать функционал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru