Скрейпинг сайтов с помощью библиотеки Selenium
HTML-код
- Опубликовано: 19 сен 2021
- ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА
____________
❗❗❗Так называемое Министерство юстиции РФ признало «Важные истории» «нежелательной организацией». Так что репост этого и любого другого нашего видео может караться штрафом, а повторный репост - уголовным делом.
Но никто не может запретить вам смотреть и думать. Поэтому подписывайтесь на наш канал, просите подписаться своих друзей и оставайтесь с нами - в это темное время выжить мы сможем только вместе.
____________
На примере сайта реестра бюджетных организаций учимся скрейпить данные с помощью библиотеки Selenium.
🔹 Текстовая версия
➡️ www.istories.media/workshops/...
🔹Подписаться на рассылку Мастерской «Важных историй»:
➡️ mailchi.mp/istories.media/wor...
🔹Telegram-канал Мастерской
➡️ t.me/istories_workshop
❗❗❗Так называемое Министерство юстиции РФ признало «Важные истории» «нежелательной организацией». Так что репост этого и любого другого нашего видео может караться штрафом, а повторный репост - уголовным делом.
Но никто не может запретить вам смотреть и думать. Поэтому подписывайтесь на наш канал, просите подписаться своих друзей и оставайтесь с нами - в это темное время выжить мы сможем только вместе.
все это грустно(
кстати, этот сайт теперь без vpn не работает, как, правда, и тысячи других сайтов
Отлично подан материал, спасибо. А почетное звание иностранного агента это знак качества. Не стоит переживать из-за этого.
Очень приятная и качественная подача информации. Спасибо вам за ваш труд. Подписался.
Спасибо большое,за такую понятную подачу материала. Я даже на виндоус смог все понять,многих блогеров перебрал ничего не понял,а вы прям все подробно обьяснили!
Очень круто объясняешь!
Спасибо за урок! Очень помогла
Отлично! Спасибо Вам за работу
спасибо за видео, оч. полезное!
Дякую, достатньо коротко й зрозуміло
Умная девушка и голос приятный 🙂
Годный контент, лайк.
Спасибо! Всё очень понятно объяснили
Понятно-то объяснили. А повторить вы смогли?
@@daddy_eddy смог
Здравствуйте. Когда soup меняю на item в цикле пишет - 'NoneType' object has no attribute 'text'. В чем может быть дело? Спасибо.
Спасибо, крутое видео 👍
Боже, как же она доступно объясняет
Здравствуйте. Есть тег:
Девушка вы топ ❤ 😊 это огонь а не урок
Я не шарю в этом и все понял 10/10
Добрый день. На сайте из примера с учреждениями можно забирать данные из ответа в json
У меня вопрос, а можно использовать selenium в тихом режиме, тоесть чтоб он не открывал браузер?
хорошее видео
20:09 ошибка связана не тем что не успевает прогружатся, а потому что c 8 страницы начинаются заголовки с другим названием тега и класса.
Спасибо за ваш комментарий, очень помогло!
Круто, это даже удобнее чем bs4
Друзья, мы в курсе, что вам нужно отчет подавать и что Роман приболел, но мы соскучилсь по продолжению и хорошим людям. Здоровья и выдержки!
Вот как можно учить что-то с такой ведущей 😍
Прилежно!
Спасибо за качественный тьюториал. Вопрос: а как переходить со страницы на страницу, если нет кнопки "Следующая страница". На сайте, который вы используете в видео, такой кнопки сейчас нет.
по идее можно реализовать через адрес страницы, как это делали в примере с топ 250 фильмами из кинопоиска. В видео при переходе на последующие страницы адресная строка не меняется. Сейчас же она уже изменяется.
registry?d-442831-p=1&agencyTypesDropDownValue
Так, например выглядит урл первой страницы
registry?d-442831-p=2&agencyTypesDropDownValue
А так 2ой. Мы можем через f строки подставить {p} вместо номера страницы во внешнем цикле и тогда номер страницы будет соответсововать значению P. Но я не пойму как это все сделать(
придумал в общем. вместо
browser.find_element_bu_class_name('pagination__next').click()
пишем
browser.find_element_by_css_selector(f'body > div.main > ui-view > ui-view-ng-upgrade > ui-view > app-registry > div.results > div > div:nth-child(3) > div > div.b-controls__left_40.pagination_box1 > app-pagination > div > div > div:nth-child({p})').click()
И внеший цикл делаем
for p in range(2, 11):
Старницы начинаю переключаться и до определенной страницы они делают это правильно, а потом начинается что-то непонятное.
@@Denmark1150 Спасибо, я тоже не разобрался как это сделать(. Кроме того, есть желание кликать на кнопку следующей страницы, чтобы имитировать поведение пользователя.
@@Denmark1150 Спасибо, этот вариант попробую.
@@Denmark1150 привет, вопрос хочу задать, вот у меня есть сайт с товарами который нужно спарсить, и у каждого товара есть своя страница, вот если мне нужны отдельные некоторые товары, то мне нужно копировать ссылку на товар и к ней писать код для сбора данных? и так для всех товаров которые я хочу спарсить, код же получится достаточно длинным. а также как мне нужен парсер который будет собирать данные 24/7 каждых 2-3 секунды, как это все организовать? если знаешь то отпиши пожалуйста!
В последних версиях селениума (v4 и выше), окошко Хрома отрывается на момент работы программы, как только код заканчивается, окно Хрома сворачивается. Поэтому надо прописывать sleep(). Для настройки и написания кода, можно сначала использовать версию селена, как на видео.
Спасибо большое за это дополнение!
ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА
Спасибо тебе добрый человек
Я всю голову сломал, в чем может быть ошибка)
Дальше 3-й минуты работа не идет. Получаю ошибку Message: unknown error: cannot find Chrome binary. Как устранить? За час активного гугления ошибку не удалось исправить
Можно как-то задать в коде ожидание окончания прогрузки страницы не через sleep? Ведь из-за плохого соединения страница может не успеть прогрузиться, а делать большие задержки слишком расточительно по времени
Можно попробовать timeout
Спасибо!
А текстовая версия урока будет доступна?
Обязательно. Но чуть-чуть попозже
ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА
ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА Добавили в описание!
@@istories_workshop Большое спасибо за напоминание🙂!
Спасибі
Что делать если сайт требует капчу при работе селениума?
Библиотека sleep )))
Удобную кнопку, которая переносит нас на следующую страницу убрали. Как мы можем осуществить переход на следующую страницу с помощью селениума?
Пытался осуществить это с помощью xpatn последующей кнопки страницы (после копирования xpath я вижу, что там указывается номер последуюзей страницы и, по идее, мы могли бы просто указать вместо номера страницы наш {p} через f строки, но в этой строке xpath так же и указывается предыдущий и последующий номера страниц. Реализовать, к сожалению, не получилось)
Отбой, додумался через css селектор. Но этот подход работает только до того момента, как мы доходим до кнопки с многоточием. Нужно явно указывать номер страницы в URL адресе
Вот так вот работает уже до 8 страницы, а дальше уже алгоритм сбора информации по name и link видимо изменяется. Дальше мне лень ковыяться)
if p < 5:
browser.find_element_by_css_selector(f'body > div.main > ui-view > ui-view-ng-upgrade > ui-view > app-registry > div.results > div > div:nth-child(3) > div > div.b-controls__left_40.pagination_box1 > app-pagination > div > div > div:nth-child({p})').click()
else:
browser.find_element_by_css_selector(f'body > div.main > ui-view > ui-view-ng-upgrade > ui-view > app-registry > div.results > div > div:nth-child(3) > div > div.b-controls__left_40.pagination_box1 > app-pagination > div > div > div:nth-child(5)').click()
Супер! Спасибо, что поделились)
Ошибка на 17 строке "input_tab" is not defined
А вот я хочу сделать сканер онкологических диспансеров с интерфейсом для андроид. Какой драйвер мне использовать?
так это уже надо клиент-сервер делать. где селениум будет крутиться на сервере. а ведроид только получать результат
Всё идеально, но от селениума ушли на суп и в итоге вывод был из супа. А как выводить из селениума данные, не понятно
Даже обидно как сейчас все в легком доступе для каждого)
Приятно и легко смотрится , но есть один интересный момент , как получить нужные нам информацию не запуская видимо браузер?
Почитайте про PhantomJS у Selenium, она как раз делает именно это.
ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА
задать опции в коде? не?
Никогда бы не подумал, что селениум может пригодиться в журналистике...
Где вы были раньше 😂
Прошел два ДПО и в каждом про Парсинг один беглый вебинар на супер простом сайте, а когда решил спарсить для выпускного проекта метрики с шазама…. Ну в общем для меня это оказалось болью)))
Это уроки на Python3?
Здравствуйте, да.
ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА
А сколько Алеся питон изучает?Вот просто интересно
Алеся учила Python в магистратуре ВШЭ три модуля. А потом самообразование - читала, смотрела, гуглила.
ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА
А как же понять какая библиотека для сайта нужна?
у меня в настройках 106 версия и на сайте тоже есть 106... вот только какая моя, если у меня 7 windows
А где применение tqdm 😄
возможно ли парсить в фоновом режиме?
Можно поверх окна открыть свой браузер и делать дела. А можно использовать PhontonJs, но не все сайты можно парсить через него.
ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА
Добавляешь в опции параметр “headles” и работает в фоновом режиме. Синтаксис погугли сам, тут лень писать
@@user-nx7cq1wy3f привет, вопрос хочу задать, вот у меня есть сайт с товарами который нужно спарсить, и у каждого товара есть своя страница, вот если мне нужны отдельные некоторые товары, то мне нужно копировать ссылку на товар и к ней писать код для сбора данных? и так для всех товаров которые я хочу спарсить, код же получится достаточно длинным. а также как мне нужен парсер который будет собирать данные 24/7 каждых 2-3 секунды, как это все организовать? если знаешь то отпиши
@@f4ke543 привет. Дай сайт и тз попробую
10:45
13:10
14:30
15:10
15:35
17:40
19:20
спасибо, единственный ресурс, где я поняла наконец-то
Я не понял, зачем селениум в парсинге. Т.е. что может селениюм, чего бы нельзя было сделать с помощью реквестс? Если очень вдумчиво посидеть над разведкой, всегда можно организовать парсинг без селениума ИМХО. Селениум для тестинга, меня дико коробит, когда нет времени и я что то пилю на селениуме (естественно скрывая браузер), мне кажется, использование селениума в парсинге - это просто костыль для ленивых.
Селениум позволяет парсить, поэтому мы решили разобрать и эту библиотеку в рамках серии уроков про парсинг)) Возможно, кому-то понравится работать именно с ним. На вкус и цвет парсеры разные))
ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА
привет, вопрос хочу задать, вот у меня есть сайт с товарами который нужно спарсить, и у каждого товара есть своя страница, вот если мне нужны отдельные некоторые товары, то мне нужно копировать ссылку на товар и к ней писать код для сбора данных? и так для всех товаров которые я хочу спарсить, код же получится достаточно длинным. а также как мне нужен парсер который будет собирать данные 24/7 каждых 2-3 секунды, как это все организовать? если знаешь то отпиши
@@f4ke543
1. цикл в цикле
2. бот на халявном Heroku
@@uvencosuper3471 на счет хероку я понял, но можешь также просветить на счет еще одного, вот я пишу парсер который будет 24/7 парсить данные с динамического сайта и потом отправлять в тг бота написаного с помощью айограма , а он уже мне будет данные скидывать (в онлайн режиме, тоесть по мере поступление их на сайт, он сразу же будет мне данные скидывать) мне надо будет на хероку скрипт и парсера и бота загружать или только что то одно из этого?
И также на счет цикла в цикле, если честно даже малейшего понятие не вижу как это может выглядеть (пишу парсер только для себя впервые). Если я просто возьму урл всех страниц товаров которые мне нужны и с помощью риквеста get. буду каждый раз обращаться к новой ссылке, и после этого прописывать код чтобы с товаров парсились определенные значение, и так каждый раз, такая схема имеет место быть? или же так не получится вовсе/будет долго/не правильно и тд, просвети пожалуйста!
@@f4ke543 1. и парсера, и бота 2.внешний цикл парсит страницы сайта (пагинация), внутренний тут же на этой же итерации парсит "карточки" (карточка - блок нужных тебе данных) на этой странице. Это нормально. Долго, но нормально. Хочешь не долго - гугли асинхронный парсинг.
tqdm остался не у дел :)
Действительно! Забыли про него, но можете использовать его для циклов, чтобы увидеть прогресс-бар.
ДАННОЕ СООБЩЕНИЕ (МАТЕРИАЛ) СОЗДАНО И (ИЛИ) РАСПРОСТРАНЕНО ИНОСТРАННЫМ СРЕДСТВОМ МАССОВОЙ ИНФОРМАЦИИ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА, И (ИЛИ) РОССИЙСКИМ ЮРИДИЧЕСКИМ ЛИЦОМ, ВЫПОЛНЯЮЩИМ ФУНКЦИИ ИНОСТРАННОГО АГЕНТА
@@istories_workshop спасибо! даже знать о нужной библиотеке уже полезно :)
Какой еще нахер "иностранный агент"?
В конце цикл не до 10, а до 9 надо. Потому что нумерация начинается с 0
как легко деплоить селениум на сервере?
привет, вопрос хочу задать, вот у меня есть сайт с товарами который нужно спарсить, и у каждого товара есть своя страница, вот если мне нужны отдельные некоторые товары, то мне нужно копировать ссылку на товар и к ней писать код для сбора данных? и так для всех товаров которые я хочу спарсить, код же получится достаточно длинным. а также как мне нужен парсер который будет собирать данные 24/7 каждых 2-3 секунды, как это все организовать? если знаешь то отпиши
Выдает ошибку NameError: name 'Chrome' is not defined
А если нужно войти сначала на сайт по логину и паролю
То как мы должный действовать и какой код ?