Многие, кто только начинает заниматься парсингом, задаются вопросом, в чем разница между Beautiful Soup и Scrapy. Эта статья должна пролить свет на их различные функции и цели и помочь вам решить, какой из них лучше подходит для вашего проекта. Разработчики Python даже более вероятно, чем большинство других, будут нуждаться в парсинге на определенном этапе своей карьеры. В эпоху больших данных умение создавать ботов для «открытия» веб-сайтов и извлечения информации, иначе называемое парсингом, является практически обязательным для всех, кто имеет дело с цифровыми данными. Два популярных инструмента для парсинга на Python — Beautiful Soup и Scrapy. Какой из них подходит для ваших нужд? Давайте узнаем.
СФЕРА РАЗВЛЕЧЕНИЙ
ПРОЧИЕ ВИДЫ УСЛУГ
База всех компаний в категории: ОКВЭД 96.09 — ПРОЧИЕ ПЕРСОНАЛЬНЫЕ УСЛУГИ
ИСКУССТВО И КУЛЬТУРА
ПРОИЗВОДСТВЕННЫЕ УСЛУГИ
База всех компаний в категории: АБРАЗИВОСТРУЙНОЕ ОБОРУДОВАНИЕ
СЕЛЬСКОЕ ХОЗЯЙСТВО И САДОВОДСТВО
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 — это 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 может управлять очередью запросов для парсинга, с автоматической дедупликацией и проверкой максимальной глубины рекурсии. Например, этот спайдер парсит заголовки всех связанных страниц на глубину до 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
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, если вы хотите спарсить целый веб-сайт, переходить по ссылкам с одной страницы на другую, иметь дело с cookies и блокировкой, а также экспортировать большое количество данных в различных форматах.
Итак, выбор между Beautiful Soup и Scrapy вам придется делать самостоятельно, но вот краткое описание различий, чтобы вы не забыли. Beautiful Soup в целом проще в использовании и более гибкий, чем Scrapy, что делает его хорошим выбором для небольших задач парсинга. Scrapy более мощный и настраиваемый, что делает его хорошим выбором для более крупных и сложных проектов по извлечению данных.
Краткое резюме: как превратить сеть сайтов в стабильный источник дохода Создание сети информационных сайтов —…
Знаете ли вы, что невидимые технические ошибки могут «съедать» до 90% вашего потенциального трафика из…
Введение: почему мониторинг цен — необходимость, а защита — не преграда Представьте, что вы пытаетесь…
Значительная часть трафика на любом коммерческом сайте — это не люди. Это боты, которые могут…
Систематический мониторинг цен конкурентов — это не просто способ избежать ценовых войн, а доказанный инструмент…
Краткое содержание В мире, где 93% потребителей читают отзывы перед покупкой 1, а рейтинг компании…