Используйте возможности Python для извлечения и обслуживания веб-данных

Вы заинтересованы в извлечении данных с веб-сайтов и предоставлении доступа к этим данным другим? Независимо от того, являетесь ли вы начинающим специалистом по данным, разработчиком API или просто любителем технологий, этот пост в блоге для вас. Мы изучим, как создать простой веб-скрейпер с помощью Python, а затем, как создать на его основе REST API, чтобы сделать извлеченные данные доступными для других. Итак, давайте погрузимся!

Часть 1. Создание парсера веб-страниц

Первая часть этого процесса — создание парсера, который может извлекать данные с веб-сайта. Для этого мы будем использовать две мощные библиотеки Python: BeautifulSoup и запросы.

Шаг 1. Импортируйте необходимые библиотеки

import requests
from bs4 import BeautifulSoup

Шаг 2: Сделайте GET-запрос на сайт

url = "https://example-website.com"  # Replace this with the URL of the website you want to scrape
response = requests.get(url)

Запрос GET извлекает HTML-контент веб-сайта. Теперь давайте разберем это содержимое.

Шаг 3. Проанализируйте HTML-контент

soup = BeautifulSoup(response.text, 'html.parser')

BeautifulSoup анализирует содержимое HTML и делает его доступным для навигации. Теперь вы можете найти элементы по их тегам.

Шаг 4: Извлеките необходимые данные

Предположим, мы хотим извлечь все заголовки на странице. В HTML заголовки обычно заключены в теги <h1>, <h2>, <h3> и т. д. Давайте извлечем их.

headings = soup.find_all(['h1', 'h2', 'h3'])

for heading in headings:
    print(heading.text.strip())

В этом базовом примере извлекается текст заголовка, но веб-скрапинг может стать намного более сложным, поскольку вы ориентируетесь на определенные фрагменты информации, вложенные в различные структуры HTML.

Теперь, когда мы создали простой парсер, давайте перейдем на следующий уровень, создав вокруг него API.

Часть 2. Создание API

API (интерфейс прикладного программирования) позволяет другому программному обеспечению взаимодействовать с вашей программой. Он предоставляет набор правил и протоколов для доступа к вашей программе и ее использования. Здесь мы будем использовать Flask, микрофреймворк Python, для создания REST API для нашего парсера.

Шаг 1. Импортируйте необходимые библиотеки

from flask import Flask, jsonify

Шаг 2. Создайте приложение Flask и определите маршруты

В Flask маршруты определяют конечные точки вашего API. Конечная точка — это конкретный URL-адрес, по которому можно получить доступ к вашему API.

app = Flask(__name__)

@app.route('/api/scrape', methods=['POST'])
def scrape():
    # We'll fill this in the next step
    pass

Шаг 3: Реализуйте функцию парсинга в конечной точке

Мы будем использовать парсер, который мы создали ранее, в нашей конечной точке API. Здесь мы добавим немного больше функций, чтобы пользователи могли указать URL-адрес, который они хотят очистить.

@app.route('/api/scrape', methods=['POST'])
def scrape():
    url = request.json['url']  # Get the URL from the POST request data
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    headings = soup.find_all(['h1', 'h2', 'h3'])

    # Create a dictionary to hold the results
    results = {}
    for i, heading in enumerate(headings):
        results[i] = heading.text.strip()
    
    # Return the results as JSON
    return jsonify(results)

Шаг 4: Запустите приложение Flask

if __name__ == "__main__":
    app.run(debug=True)

На этом ваш API парсинга готов. Теперь вы можете отправить запрос на http://localhost:5000/api/scrape с телом JSON, содержащим URL-адрес, который вы хотите очистить. API вернет ответ JSON, содержащий все заголовки с указанного URL-адреса.

Создание веб-скребка и его обертка с помощью API может стать мощным инструментом для автоматизации процесса извлечения и обслуживания данных с веб-сайтов. Однако важно всегда соблюдать политику веб-сайта, который вы парсите, и не перегружать его серверы слишком большим количеством запросов. Удачного скрейпинга!

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .