Веб-анализ стал необходимым навыком для разработчиков на Python, специалистов по анализу данных и энтузиастов веб-анализа. Независимо от того, извлекаете ли вы данные для анализа, создаете инструмент сравнения цен или автоматизируете извлечение контента, веб-парсинг лежит в основе каждой из этих задач. Но что делает веб-парсинг одновременно эффективным и удобным для новичков? Parsel -мощная библиотека на Python, которая упрощает парсинг HTML и извлечение данных.
Parsel - это легкая библиотека Python, предназначенная для парсинга HTML/XML и извлечения данных. Созданная с учетом требований веб-скрапинга, Parsel позволяет легко взаимодействовать со структурами веб-страниц, используя мощные селекторы, такие как XPath и CSS. Эти инструменты позволяют точно находить и извлекать из веб-страниц определенные элементы или атрибуты. Интеграция Parsel с экосистемой Python также означает, что он легко работает с такими библиотеками, как `requests` и `httpx` для получения веб-контента.
Разбор HTML - это процесс разбиения HTML-документа на структурные компоненты, такие как теги, атрибуты и объектная модель документа (DOM). Parsel использует эту структуру для точного поиска и извлечения нужных данных.
Документы HTML создаются с помощью:
<h1>
, <p>
, <img>
).id
, класс
, href
).Селекторы XPath и CSS - это языки запросов, используемые для выбора элементов в HTML-документе:
Подробнее о селекторах читайте здесь.
Прежде чем приступить к работе с Parsel, убедитесь в следующем:
pip install parsel requests
Parsel позволяет разобрать элемент, просто зная имя его класса или идентификатор. Это особенно полезно при поиске определенных элементов на веб-странице для извлечения данных.
Чтобы продемонстрировать это, мы используем следующее пример веб-сайта. Мы сосредоточимся на извлечении данных из элемента с именем класса подставка для продуктов
, который представляет собой одну запись в книге.
Ниже приведен пример его HTML-структуры:
Из этого элемента мы будем извлекать:
импортировать запросы
from parsel import Selector
# Получение веб-страницы
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# Выберите первый продукт по классу
product = selector.css("article.product_pod").get()
# Разбор деталей выбранного продукта
product_selector = Selector(text=product)
title = product_selector.css("h3 a::attr(title)").get()
цена = product_selector.css("p.price_color::text").get()
наличие = product_selector.css("p.instock.availability::text").get().strip()
print("Название:", title)
print("Цена:", цена)
print("Наличие:", availability)
Объяснение сценария:
ПОЛУЧИТЬ
запрос к сайту-примеру, чтобы получить его HTML-содержимое.article.product_pod
чтобы выбрать первую запись книги на странице.подставка для продуктов
блок.Название: A Light in the Attic
Цена: £51.77
Доступность: В наличии
Parsel позволяет легко извлекать текст из элементов HTML, будь то заголовок, описание или другое видимое содержимое веб-страницы.
Чтобы продемонстрировать это, мы используем тот же пример веб-сайта снова. Мы сосредоточимся на извлечении текста заголовка одной книги с помощью h3
тег, вложенный в элемент article с классом подставка для продуктов
.
Ниже приведен пример его HTML-структуры:
Из этого элемента мы будем извлекать:
импортировать запросы
from parsel import Selector
# Получение веб-страницы
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# Выберите первый продукт по классу
product = selector.css("article.product_pod").get()
# Разберите текст заголовка выбранного продукта
product_selector = Selector(text=product)
title_text = product_selector.css("h3 a::attr(title)").get()
print("Текст заголовка:", title_text)
ПОЛУЧИТЬ
запрос для получения HTML-контента с сайта.подставка для продуктов
CSS-селектор нацелен на первую запись в книге.h3 a::attr(title)
Скрипт извлекает атрибут title из файла <a>
тег, вложенный в <h3>
тег.Заголовок Текст: Свет на чердаке
Parsel также позволяет извлекать значения атрибутов, таких как href, src или alt, из элементов HTML. Эти атрибуты часто содержат ценные данные, такие как URL, источники изображений или описательный текст.
Мы сосредоточимся на извлечении ссылки (href
) на страницу с подробным описанием книги из <a>
тег внутри статья
элемент с классом подставка для продуктов
.
Ниже приведен пример его HTML-структуры:
Из этого элемента мы будем извлекать:
href
) на страницу с подробным описанием книгиимпортировать запросы
from parsel import Selector
# Получение веб-страницы
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# Выберите первый продукт по классу
product = selector.css("article.product_pod").get()
# Разберите атрибут 'href' выбранного продукта
product_selector = Selector(text=product)
book_link = product_selector.css("h3 a::attr(href)").get()
print("Ссылка на книгу:", book_link)
Объяснение сценария:
Ссылка на книгу: catalog/a-light-in-the-attic_1000/index.html
Parsel упрощает извлечение нескольких элементов с веб-страницы с помощью селекторов CSS или XPath. Это особенно полезно при работе со списками, такими как названия товаров, ссылки или цены.
Мы сосредоточимся на извлечении списка всех названий книг, отображаемых на главной странице сайта- примера, который мы используем в этом уроке.
Ниже приведен пример соответствующей структуры HTML:
Из этих элементов мы будем извлекать:
импортировать запросы
from parsel import Selector
# Получение веб-страницы
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# Выберите все названия книг
book_titles = selector.css("article.product_pod h3 a::attr(title)").getall()
# Выведите каждое название
for title in book_titles:
print("Заголовок:", title)
Объяснение сценария:
ПОЛУЧИТЬ
запрос для получения HTML-контента с сайта. article.product_pod h3 a::attr(title)
, он выбирает все <a>
метки внутри <h3>
метки внутри подставка для продуктов
элементы..getall()
Метод извлекает список всех подходящих названий.Название: Свет на чердаке
Название: Tipping the Velvet
Название: Soumission
Название: Острые предметы
Parsel обеспечивает эффективную навигацию по сложным, вложенным структурам HTML с помощью селекторов CSS и XPath. Это особенно ценно при извлечении данных, погребенных глубоко внутри многочисленных слоев HTML-тегов.
Мы будем извлекать цену книги изнутри подставка для продуктов
элемент.
Ниже приведен пример соответствующей структуры HTML:
Из этой вложенной структуры мы извлечем:
импортировать запросы
from parsel import Selector
# Получение веб-страницы
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# Выберите первый продукт по классу
product = selector.css("article.product_pod").get()
# Разбор вложенного элемента цены
product_selector = Selector(text=product)
цена = product_selector.css("div.product_price p.price_color::text").get()
print("Цена:", price)
Объяснение сценария:
подставка для продуктов
.div.product_price p.price_color
он переходит в div и выбирает p
тег, содержащий цену..get()
метод извлекает значение цены.Цена: £51.77
Parsel упрощает процесс извлечения структурированных данных из HTML-списков и табличных форматов. Веб-сайты часто отображают информацию в повторяющихся шаблонах, таких как сетки товаров или упорядоченные списки, что делает Parsel незаменимым инструментом для эффективного сбора этих данных.
В качестве примера мы снова поработаем с тем же пример веб-сайта. Наша цель - извлечь список названий книг вместе с их ценами. В частности, мы будем ориентироваться на <ol>
тег, который содержит несколько <li>
элементов, каждый из которых представляет отдельную книгу.
Ниже приведен пример соответствующей структуры HTML:
Из этой структуры мы извлечем:
import requests
from parsel import Selector
# Fetch the webpage
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# Select all book items in the list
books = selector.css("ol.row li.article")
# Loop through each book and extract title and price
for book in books:
title = book.css("h3 a::attr(title)").get()
price = book.css("p.price_color::text").get()
print(f"Title: {title} | Price: {price}")
ол.ряд
li.article
все цели <li> элементы внутри упорядоченного списка (<ol>), которые представляют отдельные элементы книги.h3 a::attr(title)
извлекает атрибут title из <a>
метка. --- p.price_color::text
извлекает текст цены из <p>
тег.Название: A Свет в на Чердак | Цена: £51.77
Название: Tipping на Velvet | Цена: £53.74
Название: Soumission | Цена: £50.10
Название: Sharp Sharp Objects | Цена: £47.82
...
В этом уроке мы изучили основы парсинга веб-страниц в Python с помощью Parsel. От понимания основных селекторов до навигации по вложенным элементам, извлечения атрибутов и разбора списков - мы показали, как Parsel упрощает процесс извлечения значимых данных из веб-страниц.
Вот краткий обзор того, о чем мы рассказали:
Parsel - мощный инструмент в наборе инструментов для веб-скреппинга, и его освоение откроет бесчисленные возможности для сбора и анализа данных.
Счастливого разбора!