Лучший опыт

Многие, кто только начинает ... Beautiful Soup против Scrapy для парсинга

Многие, кто только начинает ... Beautiful Soup против Scrapy для парсинга

Beautiful Soup против Scrapy для парсинга...

Многие, кто только начинает заниматься парсингом, задаются вопросом, в чем разница между Beautiful Soup и Scrapy. Эта статья должна пролить свет на их различные функции и цели и помочь вам решить, какой из них лучше подходит для вашего проекта. Разработчики Python даже более вероятно, чем большинство других, будут нуждаться в парсинге на определенном этапе своей карьеры. В эпоху больших данных умение создавать ботов для «открытия» веб-сайтов и извлечения информации, иначе называемое парсингом, является практически обязательным для всех, кто имеет дело с цифровыми данными. Два популярных инструмента для парсинга на Python — Beautiful Soup и Scrapy. Какой из них подходит для ваших нужд? Давайте узнаем.

Что такое Beautiful Soup?

Beautiful Soup — это библиотека Python, которая позволяет разбирать документы HTML и XML и извлекать из них данные. Она предоставляет простой и интуитивно понятный способ навигации и поиска в древовидной структуре HTML, используя в качестве критериев поиска теги, атрибуты и текстовое содержимое.

Начните с использования pip для установки Beautiful Soup и Python Requests в качестве зависимостей проекта:

pip install beautifulsoup4 requests

Чтобы спарсить веб-страницу, необходимо сначала загрузить HTML-содержимое страницы с помощью HTTP-клиента типа requests, а затем разобрать содержимое страницы с помощью BeautifulSoup.

import requests  from bs4 import BeautifulSoup  url = '<https://www.example.com>'   response = requests.get(url)   html_content = response.text  soup = BeautifulSoup(html_content, 'html.parser') 

Затем вы можете использовать методы Beautiful Soup для извлечения интересующих вас данных. Например, допустим, мы хотим извлечь заголовок сайта и список всех URL на странице:

title = soup.find('title').get_text() url_list = []  links = soup.find_all('a')  for link in links:      url = link.get('href')     url_list.append(url) 	 print(title, url_list) 

Этот код выведет заголовок и список URL всех ссылок на странице.

Что такое Scrapy?

Scrapy — это Python-фреймворк для парсинга, который обеспечивает более мощный и настраиваемый способ извлечения данных с веб-сайтов. Он позволяет определить набор правил для навигации и извлечения данных с нескольких страниц веб-сайта и обеспечивает встроенную поддержку для работы с различными типами данных.

Чтобы использовать Scrapy, сначала необходимо установить его с помощью pip:

# Установить Scrapy
pip install scrapy

Затем вы можете создать новый проект Scrapy с помощью команды scrapy:

# Создать проект Scrapy
scrapy startproject myproject

Это создаст новый каталог myproject с базовой структурой проекта Scrapy. Затем вы можете сгенерировать спайдер, который является основным компонентом Scrapy, выполняющим фактический поиск:

# Generate Spider
scrapy genspider myspider

Вот пример простого спайдера, который извлекает заголовки и URL всех ссылок на веб-странице:

import scrapy  class MySpider(scrapy.Spider): name = 'myspider' start_urls = [''].  def parse(self, response): links = response.css('a') for link in links: title = link.css('::text').get() url = link.attrib['href'] yield { 'title': title, 'url': url, }

Этот спайдер определяет метод разбора, который вызывается для каждой страницы, которую он посещает, начиная с URL, определенных в start_urls. Он использует встроенные селекторы Scrapy для извлечения заголовка и URL каждой ссылки и создает словарь с этими данными.

Чтобы запустить спайдер, вы используете команду scrapy crawl:

# Запустить спайдер scrapy crawl myspider

Расширенные возможности Scrapy

Очередь URL-адресов для сканирования

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

import scrapy class TitleSpider(scrapy.Spider): name = 'titlespider' start_urls = ['']. custom_settings = { "DEPTH_LIMIT": 5 }  def parse(self, response): yield { 'url': response.url, 'title': response.css('title::text').extract_first(), } for link_href in response.css('a::attr("href")'): yield scrapy.Request(link_href.get())

Несколько форматов вывода

Scrapy напрямую поддерживает сохранение вывода в различных форматах, таких как JSON, CSV и XML:

# Запустите спайдер и сохраните вывод в файл JSON scrapy crawl -o myfile -t json myspider  # Запустите спайдер и сохраните вывод в CSV-файл scrapy crawl -o myfile -t csv myspider  # Запуск спайдер и сохранение результатов в XML-файл scrapy crawl -o myfile -t xml myspider

Cookies

Scrapy получает и отслеживает файлы cookie, отправленные серверами, и отправляет их обратно при последующих запросах, как это делает любой обычный веб-браузер.

Если вы хотите указать дополнительные cookies для ваших запросов, вы можете добавить их к создаваемому Scrapy Request:

request_with_cookies = scrapy.Request(
url="",
cookies={'currency': 'USD', 'country': 'UY'},
)

Подмена агента пользователя

Scrapy поддерживает установку пользовательского агента для всех запросов в пользовательское значение, что полезно, например, если вы хотите отсканировать мобильную версию сайта. Просто поместите пользовательский агент в файл [settings.py]() в вашем проекте, и он будет автоматически использоваться для всех запросов:

# settings.py USER_AGENT = 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.57 Mobile Safari/537.36' 

Когда использовать Beautiful Soup и когда использовать Scrapy

Вам следует использовать Beautiful Soup, когда вам нужно извлечь данные из нескольких простых веб-страниц, и вы не ожидаете, что они будут пытаться блокировать ваш доступ к ним. Вам следует использовать Scrapy, если вы хотите спарсить целый веб-сайт, переходить по ссылкам с одной страницы на другую, иметь дело с cookies и блокировкой, а также экспортировать большое количество данных в различных форматах.

Вывод

Итак, выбор между Beautiful Soup и Scrapy вам придется делать самостоятельно, но вот краткое описание различий, чтобы вы не забыли. Beautiful Soup в целом проще в использовании и более гибкий, чем Scrapy, что делает его хорошим выбором для небольших задач парсинга. Scrapy более мощный и настраиваемый, что делает его хорошим выбором для более крупных и сложных проектов по извлечению данных.