Pull to refresh

Comments 23

Агрегаторам, насколько мне известно, информация достается не бесплатно и платят они едва ли не за каждый запрос, поэтому возникает вопрос об этичности такого своеобразного брутфорса.
Тут этичность скорее будет измерятся планом использования.
насколько мне известно — агрегаторы за запросы не платят и вообще получают процент с продаж (да, пункты не взаимоисключающие). Источник — работал над сайтом одной российской авиакомпании. Тогда получается этичность на уровне «нашел билет у агрегатора, а купил напрямую» и то если покупать не у агрегатора.
Когда мне в одной конторке из топ 5 поиска, после звонка в их техподдержу на предмет: а чего билет как-то не совсем купился? ответили человеческим голосом: а, так вы ж с каяка (кажись) к нам пришли? Так у нас когда из вне клиенты приходят билеты не покупаются, заходите на прямую…
То у меня вот возникли боооольшие вопросы к этичности, и всякие родственные вопросы.
1. Использьвание selenium в большинстве случаев избыточно и зачастую говорит о том, что автор сего творения «не в теме». Гораздо продуктивнее смодулировать GET/POST запросы и сразу получить все данные в готовом виде (зачастую это будет JSON). requests вам в помощь.

2. Не стоит использовать нативные средства selenium для того, чтобы собрать данные (.find_elements_by_tag и пр.). Лучше скормить innerHTML в какой-нибудь более приличный парсер (lxml или bs4), тем самым вы ускорите работу своего скрапера раза в три. Более подробно здесь.
Ну такое, кажется, Selenium как будто больше похож на браузер, и меньше шанс, что его забанят.
Похож он для случая хедлесс вариантов. А в контексте использование вебдрайвера + хрома — он не похож, он им и является )
Другой вопрос, что любой анализатор поведения пользователя, будет немного озадачен и обескуражен такой скоростью работы. Ну, это для случая, если логика сайта вообще не завалится, что лично я умудряюсь даже руками иногда делать.
+ все эти «sleep(randint(*))» очень примитивны
У меня больше глаз за вот этот «костыль» cronа зацепился:
# Ждём 4 часа
    sleep(60*60*4)
Какие средства кроме гугл хрома вы используете, для анализа запросов на конкретном сайте?
Для повседневных средств вполне хватает инструментов разработчика — вкладка Network.
Простите, я плохо смыслю в этой теме, и совсем новичок.
Но мне встречалось такое, что часть элементов на странице создавалась динамически (например, комментарии), и с помощью requests и bs4 просто загружался пустой div-элемент для этих самых комментариев.
Есть ли более простой путь, чем selenium?
nodejs библиотера jsdom умеет исполнять js код и модифицировать dom соответствующим образом.
Пример простой задачи.
Есть сайт https://www.complyfoam.com/ и при нажатии на кнопку «FIND TIP BY BRAND» появляется список, который нам необходимо спарсить.
1. Открываем инструменты разработчика в браузере (Ctrl+Shift+I) и переходим на вкладку Network
2. Жмем кнопку «FIND TIP BY BRAND» на странице и находим нужный нам запрос. В данном случае это GET запрос, который возвращает JSON
Скриншот
image

3. Так как сайт очень простой, то нас будет интересовать только поле Request URL: complytipfinder.com/index.php/api/manufactures, которое мы будем использовать при запросе.
4. Пишем код:
>>> import requests
>>> url = 'https://complytipfinder.com/index.php/api/manufactures'
>>> r = requests.get(url)
>>> data = [x['name'] for x in r.json()]
>>> data[:5]
['Acoustic Research ', 'Altec Lansing®', 'Apple®', 'Atomic Floyd™', 'Audéo Phonak']
Спасибо!
И в самом деле просто, но как-то даже в голову не пришло поискать запросы.
Если добавить возможность грузить список городов, все даты на год(полгода) вперёд и ежедневную выгрузку в файл в нужном формате — то можно идти в аэропорт и продавать это отделу развития перевозок. Московским, пожалуй, такое не нужно, но условная Казань купит, я думаю))

Одна проблема — как сделать, чтобы аггрегатор не отобрал возможность так делать…
А чем вам «классика» в виде requests и bs4 не нравится, scrapy, в конце концов!? Да, эмулировать браузер порой надо, особенно, если сайт написан на каком-нибудь ангуляре или ноде, но максимум для того, чтобы отрисовался сайт и можно было получить полный код страницы, но для этого PhantomJS хватит за глаза и уши!
Да, эмулировать браузер порой надо, особенно, если сайт написан на каком-нибудь ангуляре или ноде

Часто достаточно просто requests, даже без bs4. Если на сайте используются csrf токены или это же, прости господи, .NET с кучей скрытых инпутов, то тогда все просто решается связкой requests.Session + lxml (или bs4, кому что больше нравится, но lxml раз в десять быстрее).

но для этого PhantomJS хватит за глаза и уши

PhantomJS — не самый лучший вариант:
1. Уже больше года не поддерживается
2. Chrome, на данный момент, в связке с selenium, работает шустрее остальных популярных браузеров.
Пардон, а чем это отличается от просто поиска на SkyScanner, например? Ну спрасили в Эксель, а там в интерфейсе посмотрели. Профит в чём?
Если знаете намного javascript посмотрите в сторону puppeteer — не прийдется писать sleep, общая производительность кода вырастет и с SPA будет проще работать.
Sign up to leave a comment.