Подтвердить что ты не робот

Селен против BeautifulSoup для веб-соскабливания

Я очищаю содержимое веб-сайта с помощью Python. Сначала я использовал BeautifulSoup и Mechanize на Python, но я увидел, что на веб-сайте была кнопка, которая создавала контент через JavaScript, поэтому я решил использовать Selenium.

Учитывая, что я могу найти элементы и получить их содержимое с помощью Selenium с помощью методов, таких как driver.find_element_by_xpath, какая причина заключается в использовании BeautifulSoup, когда я мог бы просто использовать Selenium для всего?

И в этом конкретном случае мне нужно использовать Selenium, чтобы щелкнуть по кнопке JavaScript, так лучше ли использовать Selenium для синтаксического анализа или использовать Selenium и Beautiful Soup?

4b9b3361

Ответ 1

Прежде чем ответить на ваш вопрос напрямую, стоит сказать в качестве отправной точки: если все, что вам нужно сделать, это извлечь контент со статических HTML-страниц, вам, вероятно, следует использовать библиотеку HTTP (например, Requests или встроенный urllib.request) с lxml или BeautifulSoup, а не Selenium (хотя Selenium, вероятно, тоже подойдет). Преимущества неиспользования Selenium без необходимости:

  • Пропускная способность. Использование Selenium означает выборку всех ресурсов, которые обычно выбираются при посещении страницы в браузере: таблицы стилей, сценарии, изображения и т.д. Это, вероятно, не нужно.
  • Стабильность и простота восстановления после ошибок. По моему опыту, Selenium может быть немного хрупким - даже с PhantomJS - и создание архитектуры для уничтожения зависшего экземпляра Selenium и создания нового немного раздражает, чем настройка простой логики повторных попыток при использовании requests.
  • Потенциально, использование ЦП и памяти - в зависимости от сайта, который вы сканируете, и количества потоков пауков, которые вы пытаетесь запустить параллельно, вполне возможно, что либо логика макета DOM, либо выполнение JavaScript может оказаться довольно дорогим.

Обратите внимание, что сайт, требующий использования файлов cookie, не является причиной для взлома Selenium - вы можете легко создать функцию открытия URL, которая волшебным образом устанавливает и отправляет файлы cookie с HTTP-запросами, используя cookielib/cookiejar.

Хорошо, так почему бы вам не рассмотреть возможность использования Selenium? Практически полностью, чтобы справиться со случаем, когда контент, который вы хотите сканировать, добавляется на страницу с помощью JavaScript, а не вставляется в HTML. Даже в этом случае вы сможете получить нужные данные, не перегружая тяжелую технику. Обычно применяется один из следующих сценариев:

  • JavaScript, обслуживаемый этой страницей, содержит уже запеченный контент. JavaScript только для того, чтобы делать шаблоны или другие манипуляции с DOM, которые помещают контент на страницу. В этом случае вы можете посмотреть, есть ли простой способ извлечь интересующий вас контент прямо из JavaScript с помощью регулярных выражений.
  • JavaScript загружает веб-API для загрузки контента. В этом случае подумайте, можете ли вы определить соответствующие URL-адреса API и просто поразить их самостоятельно; это может быть намного проще и более прямым, чем на самом деле запуск JavaScript и удаление контента с веб-страницы.

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

Ответ 2

Я использовал Selenium для веб-лома, но это нехорошее решение. В моем последнем проекте я использовал https://github.com/chromedp/chromedp. Это более простое решение, чем селен.