CoderCastrov logo
CoderCastrov
Парсер

Большая дыра в наборе инструментов для Data Scientist [Часть 1]

Большая дыра в наборе инструментов для Data Scientist [Часть 1]
просмотров
5 мин чтение
#Парсер

Парсинг 101 с использованием Selenium и Python

Обычно забывается во всех магистерских программах и курсах по Data Science, парсинг веб-страниц является, по моему честному мнению, базовым инструментом в наборе инструментов Data Scientist, так как он является инструментом для получения и использования внешних данных из вашей организации, когда общедоступные базы данных недоступны.

И пока API и доступные открытые источники данных не станут нормой (если это вообще произойдет), парсинг веб-страниц будет необходим для получения интересующих вас данных, будь то цены конкурентов на их веб-сайте или знание местоположения всех супермаркетов рядом с вами.

Но что такое Selenium?

Selenium - это автоматизатор веб-браузера. Когда он используется в качестве парсера, вы получаете браузер, такой как Chrome или Firefox, который переходит на веб-страницу, с которой вы хотите взаимодействовать, и извлекает по пути всю информацию, которая вам может понадобиться.

Хотя он обычно используется для тестирования, это такой универсальный инструмент, что его часто и широко используют для парсинга веб-страниц.

Помните, что это базовый (обратите внимание на слово "базовый", так как я буду делать упрощения) учебник, чтобы вы могли начать работать с Selenium в качестве парсера веб-страниц, не принимайте его как исчерпывающий учебник.

Почему Selenium важен для меня как Data Scientist?

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

Например, вам может понадобиться получить список всех цен на отели в вашем городе, и буквально никто не предоставит вам упорядоченную базу данных цен на отели в виде файла Excel. Если они это сделают, это ваш счастливый день, если нет, то это тоже ваш счастливый день, вы можете начать парсить.

Факт в том, что существует множество информации, которую вы можете получить, и как Data Scientist вы можете либо сидеть за своим столом и говорить "У меня нет необходимой информации для этого анализа", либо пытаться найти изобретательные способы ее получения, и парсинг - один из них.

Примечание: Существуют и другие достаточно эффективные фреймворки для парсинга, такие как Scrapy (https://scrapinghub.com/scrapy-cloud)_ _которые могут быть более подходящими и легче внедряемыми для вашего проекта.

Дело в том, что почти все веб-страницы, которые я нашел для парсинга, уже были защищены от Scrapy и других инструментов (вам, вероятно, понадобится смена IP, и это стоит денег), и большинство из них не были защищены от Selenium. Едва нашел одну или две, защищенные хорошо написанным кодом Selenium.

Кроме того, Selenium хорошо работает на старомодных и плохо написанных страницах, в конце концов, для меня Selenium - это как внедорожник, не самый быстрый, не самый эффективный и не самый простой в управлении. Но он может доставить вас практически везде. Не требует асфальтированных дорог и, конечно же, легко справляется с бездорожьем.

Теперь давайте приступим к сбору данных.

0. Личный совет

Как говорит Selenium на своей веб-странице:

Поэтому, если вы собираетесь использовать Selenium для парсинга веб-сайта, сначала прочитайте условия и положения веб-страницы или посетите файл robots.txt веб-сайта (многие из них разрешают парсить, другие не разрешают, а большинство не имеют ясной политики; поэтому используйте на свой страх и риск) и, конечно же, будьте вежливы, не отправляйте запросы как зверь, старайтесь вести себя как автоматизированный человек, запускайте парсер во время низкой активности и не перегружайте серверы хоста. Так что после этого продолжайте на свой страх и риск.

1. Установка Selenium

Ну, это просто, я предполагаю, что у вас уже установлен Python 3 и вы знаете, как создать хотя бы простой блокнот:

pip install selenium

2. Установка драйвера

Selenium управляет браузером (Chrome, Firefox и т.д.) через драйвер, каждый браузер имеет свои собственные драйверы.

Например, если вы хотите открыть Mozilla Firefox, вам нужно будет использовать драйвер Mozilla, такой как Geckodriver, вот ссылка:

https://github.com/mozilla/geckodriver/releases

Так что дело обстоит так: Selenium говорит драйверу через функцию WebDriver(), что делать в выбранном браузере.

Представьте это как марионетку: Selenium - это мозг, который говорит руке, что делать, рука - это драйвер, и, наконец, марионетка - это браузер.

Самый простой способ установить Geckodriver на Mac - перейти в терминал и просто ввести:

brew install geckodriver

Если у вас нет установленного Homebrew, вам следует установить его сейчас:

https://brew.sh/

Другой способ - получить файл и просто добавить его в переменную PATH.

Другие инструкции по настройке Geckodriver на Mac:

https://www.kenst.com/2016/12/installing-marionette-firefoxdriver-on-mac-osx/

А на Windows:

https://www.softwaretestinghelp.com/geckodriver-selenium-tutorial/

3. Запуск Selenium: "Привет, парсинг!"

В целях простоты откройте блокнот, такой как Jupyter (конечно, вы можете использовать .py)

Сначала мы импортируем необходимый пакет WebDriver и указываем, что будем использовать Firefox. На этом этапе мы уже должны установить Geckodriver.

from selenium import webdriver
driver = webdriver.Firefox()

Затем мы заставляем эту "куклу" перейти на страницу, которую мы хотим посетить, давайте навестимся к нашим друзьям на Hackernoon.com, как вы можете проверить в их файле robots.txt, у них нет запрета на user-agents (www.hackernoon.com/robots.txt)

driver.get("https://www.hackernoon.com")

На этом пока достаточно, вы установили Selenium и уже открыли веб-страницу с его помощью, в следующем посте мы объясним, как навигироваться по странице TDS с помощью Selenium (или любой другой), щелкая тут и там и получая некоторую информацию.

Но пока, если вы просто вставите эти строки кода и запустите их, вы увидите, как ваша "кукла" перемещается в TDS, щелкает на кнопку поиска и ищет одну из ваших самых любимых статей. Вот эта!

Добавьте в область импорта следующие строки:

import time
from selenium.webdriver.common.keys import Keys

Затем добавьте внизу следующее:

search_button = driver.find_element_by_class_name("search-container")
search_button.click()
time.sleep(2)
input_bar = driver.find_element_by_name("searchvalue")
input_bar.send_keys('The big hole on Data Scientists toolset')
time.sleep(2)
input_bar.send_keys(Keys.RETURN)
time.sleep(10)
driver.close()

Окончательное поведение должно выглядеть так (без изображений с настольной конфиденциальностью, аплодирующих людей)

И вот вам! Используйте это, делитесь им по своему усмотрению и оставляйте немного аплодисментов ниже.

Помните, что атрибуция принесет вам хорошую карму.

Увидимся в следующем посте!