Практическое введение в основные библиотеки и фреймворки Python 2023
.pdfBEAUTIFULSOUP
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('span small::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}
next_page = response.css('li.next a::attr(href)').get()
if next_page is not None:
yield response.follow(next_page,
self.parse)
154
BEAUTIFULSOUP
Этот спайдер определяет наименование спайдера, начальный URL-адрес для парсинга и метод анализа, который отвечает за извлечение цитат с каждой страницы и переход по ссылкам на следующую страницу, если они существуют.
Чтобы запустить спайдера, перейдите в каталог quotes_scraper в командной строке или терминале и запустите сканирование цитат scrapy crawl quotes. Это запустит спайдера и выведет очищенные цитаты на вашу консоль.
Вот пример того, как может выглядеть результат:
{'text': '“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”', 'author': 'Albert Einstein', 'tags': ['change', 'deepthoughts', 'thinking', 'world']}
{'text': '“It is our choices, Harry, that show what we truly are, far more than our abilities.”', 'author': 'J.K. Rowling', 'tags': ['abilities', 'choices']}
{'text': '“There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”', 'author': 'Albert Einstein', 'tags': ['inspirational', 'life', 'live', 'miracle', 'miracles']}
Каждая цитата представлена в виде словаря с ключами для текста цитаты, автора и тегов.
За и против
За
155
BEAUTIFULSOUP
•Мощная платформа веб-парсинга, которая обрабатывает асинхронные запросы и поддерживает селекторы XPath и CSS
•Возможность извлекать данные из различных источников, таких как веб-сайты, API и даже базы данных
•Встроенная поддержка выполнения распространенных задач по парсингу вебстраниц, таких как предотвращение обнаружения ботов и управление сеансами пользователей
•Включает встроенную поддержку экспорта собранных данных в различные форматы,
включая JSON, CSV и XML
•Поддерживает различные варианты настройки, включая промежуточное ПО, расширения и конвейеры
Против
•Крутой курс обучения, особенно для новичков, которые плохо знакомы с веб-парсингом
•Требуются некоторые знания селекторов XPath и CSS для извлечения данных с веб-страниц
•Не подходит для всех типов задач вебпарсинга, особенно тех, которые требуют более сложной логики парсинга или использования моделей машинного обучения
156
BEAUTIFULSOUP
•Требует дополнительных настроек и установок по сравнению с другими более простыми библиотеками парсинга веб-страниц, что может занять много времени
157
SELENIUM
Selenium — это библиотека, которая обеспечивает веб-автоматизацию и тестирование, предоставляя возможность программного взаимодействия с вебстраницами. Она позволяет разработчикам автоматизировать веб-браузеры, моделировать взаимодействие пользователей с веб-сайтами и собирать веб-данные.
Selenium широко используется при тестировании и автоматизации веб-приложений. Она поддерживает различные языки программирования, включая Python, Java, C#, Ruby и JavaScript, и может работать с различными браузерами, такими как Chrome, Firefox, Safari и Internet Explorer.
С помощью Selenium вы можете создавать сценарии для автоматизации повторяющихся задач, таких как заполнение форм, нажатие кнопок, навигация по страницам и извлечение данных с веб-страниц.
В целом, Selenium — мощный инструмент для вебавтоматизации и тестирования, который может значительно упростить задачи, которые в противном случае были бы трудоемкими и затратными по времени.
Пример использования кода Selenium для парсинга веб-страниц:
from selenium import webdriver
from selenium.webdriver.common.by import By
# Set up the driver driver =
160
BEAUTIFULSOUP
webdriver.Chrome('path/to/chromedriver')
#Navigate to the website you want to scrape driver.get('https://www.example.com'
)
#Find the element you want to interact with and perform actions
element = driver.find_element(By.XPATH, '//button[@id="button-id"]') element.click()
#Extract the data you want from the website data_element = driver.find_element(By.XPATH,
'//div[@class="data-class"]') data = data_element.text
# Clean up and close the driver driver.quit()
В этом примере мы используем драйвер Chrome и переходим на веб-сайт. Затем мы находим элемент кнопки и нажимаем на него, что вызывает загрузку некоторых данных на страницу. Затем мы находим элемент, содержащий данные, которые мы хотим очистить, и извлекаем его текст. Наконец, мы очищаем и закрываем драйвер.
Обратите внимание, что парсинг веб-страниц может быть «серой зоной» с юридической и этической точки зрения, а условия обслуживания некоторых веб-сайтов могут запрещать это. Обязательно ознакомьтесь с политикой веб-сайта и будьте этичны в своих действиях по парсингу данных.
За и против
За
159
•Можно взаимодействовать с веб-страницами, как если бы вы использовали веб-браузер, что позволяет выполнять более сложные задачи по сбору данных
•Поддерживает широкий спектр браузеров,
включая Chrome, Firefox, Safari и Internet Explorer
•Может обрабатывать динамический контент, загружаемый с помощью JavaScript, AJAX и других технологий
•Поддерживает автономный просмотр, что позволяет запускать задачи парсинга без графического пользовательского интерфейса
•Поддерживает различные языки программирования, включая Python, Java, Ruby
и C#
Против
•Может работать медленнее, чем другие библиотеки веб-парсинга, поскольку использует автоматизацию браузера
•Требует дополнительных настроек и установок по сравнению с другими библиотеками
•Может быть более ресурсоемкой, поскольку для запуска требуется экземпляр браузера
•Может не подходить для всех задач парсинга веб-страниц, особенно тех, которые требуют высокой скорости и масштабируемости
160