Парсинг веб-страниц с использованием BeautifulSoup.
Table Of Content
Парсинг веб-страниц - это процесс извлечения данных с веб-сайта. Этот процесс имеет различные преимущества, например, если вы ведете онлайн-бизнес, вам необходимо знать информацию о клиентах конкурентов, чтобы определить лучший следующий шаг для вашего бизнеса.
Существует множество техник для выполнения парсинга веб-страниц. Одной из них является использование библиотеки BeautifulSoup для языка Python. Эта библиотека может упростить нашу работу по парсингу веб-страниц. Beautiful Soup - это библиотека Python для извлечения данных из файлов HTML и XML.
Мы приведем пример того, как выполнить парсинг веб-страниц с использованием веб-сайта Hacker News. Нашей целью является извлечение заголовков и URL-адресов статьи с наивысшим рейтингом на первой странице веб-сайта Hacker News. Сначала мы импортируем пакеты BeautifulSoup и requests.
from bs4 import BeautifulSoup
import requests
Пакет "requests" позволяет нам загружать все данные с определенных URL-адресов. Мы создаем переменную "response", чтобы загрузить данные веб-сайта, написав:
response = requests.get("https://news.ycombinator.com")
yc_web_page = response.text
Затем мы преобразуем его в тип "text", используя метод "text", и сохраняем его в переменной "yc_web_page". Кроме того, мы создаем переменную "articles" для хранения заголовков и URL-адресов.
articles = soup.find_all(name="a", class_="titlelink")
Мы устанавливаем значение "name" равным "a" и "class_" равным "titlelink", потому что мы знаем это из инспекции элемента на веб-странице. Этот тег якоря и класс могут измениться в будущем в зависимости от разработчика. Наша следующая задача - получить заголовок и ссылку в виде списка. Поэтому мы пишем:
article_texts = []
article_links = []
for article_tag in articles:
text = article_tag.getText()
article_texts.append(text)
link = article_tag.get("href")
article_links.append(link)
Чтобы определить статью с наибольшим количеством голосов, мы используем генератор списка, как показано ниже:
article_upvotes = [int(score.getText().split()[0]) for score in soup.find_all(name="span", class_="score")]
Наконец, мы можем получить статью с наибольшим количеством голосов.
largest_number = max(article_upvotes)
largest_index = article_upvotes.index(largest_number)
print(f"Заголовок статьи: {article_texts[largest_index]}")
print(f"Ссылка на статью: {article_links[largest_index]}")