popov . dev

Main

Library

Articles

Работа с JSON, X...

Работа с JSON, XML и GraphQL в Python

Структурированные форматы данных, такие как JSON, XML и GraphQL, играют решающую роль в веб-парсингу, обеспечивая эффективное и точное извлечение информации. Это руководство познакомит вас с передовыми методами веб-парсинга и обработки этих форматов в Python.

1. Представление о форматах структурированных данных

JSON

JSON (JavaScript Object Notation) - это облегченный формат обмена данными, широко используемый в API и динамических веб-приложениях.

Он представляет данные в виде пар ключ-значение и массивов, что упрощает их парсинг и манипулирование.

Пример:

{
    "name": "Игорь",
    "age": 30,
    "skills": ["Python", "Development"]
}

XML

XML (eXtensible Markup Language) - это язык разметки, который иерархически упорядочивает данные с помощью тегов. Он часто используется в RSS-каналах, файлах конфигурации и API-интерфейсах на основе SOAP.

Пример:

<person>
    <name>Игорь</name>
    <age>30</age>
    <skills>
        <skill>Python</skill>
        <skill>Programming</skill>
    </skills>
</person>

GraphQL

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

Пример:

query {
  user(id: "1") {
    name
    age
    skills
  }
}

2. Инструменты и библиотеки для парсинга структурированных данных

  • JSON: requests, json, Pandas.
  • XML: lxml, BeautifulSoup, ElementTree.
  • GraphQL: gql, requests, GraphQLClient

3. Извлечение и парсинг данных в формате JSON

Прямые вызовы JSON API

Извлечение данных JSON непосредственно из API с использованием библиотеки requests:

Пример:

import requests

response = requests.get("https://api.example.com/data")
json_data = response.json()
print(json_data["name"])

Извлечение JSON из веб-страниц

Веб-страницы часто содержат данные в формате JSON в тегах <script> или встроенных атрибутах.

Пример:

from bs4 import BeautifulSoup
import json

html = """<script>var data = {"name": "Игорь", "age": 30};</script>"""
soup = BeautifulSoup(html, "html.parser")
script_content = soup.find("script").string
json_data = json.loads(script_content.split("=", 1)[1].strip(";"))
print(json_data)

Обработка вложенных структур JSON

Эффективный доступ к вложенным данным:

nested_json = {
    "user": {
        "name": "Игорь",
        "details": {
            "age": 30,
            "skills": ["Python", "Programming"]
        }
    }
}
print(nested_json["user"]["details"]["skills"][0])  # Вывод: Python

4. Извлечение и парсинг XML-данных

Выполнение запросов к XML API

Используйте requests и lxml для парсинга XML-ответов.

Пример:

import requests
from lxml import etree

response = requests.get("https://example.com/data.xml")
xml_tree = etree.fromstring(response.content)
name = xml_tree.find(".//name").text
print(name)

Находите и парсите встроенные XML-данные с помощью XPath:

from lxml import html

doc = html.fromstring("""<data><name>Игорь</name><age>30</age></data>""")
name = doc.xpath("//name/text()")[0]
print(name)

Преобразование XML для анализа

Преобразуйте XML в JSON для упрощения манипуляций. Пример:

import xmltodict

xml = """<person><name>Игорь</name><age>30</age></person>"""
json_data = xmltodict.parse(xml)
print(json_data["person"]["name"])

Сбор данных GraphQL

Основы запросов GraphQL

Запросы GraphQL позволяют получать только необходимые поля, что сокращает избыточную выборку данных.

Запрос API-интерфейсов GraphQL с помощью Python

Используйте библиотеку gql для запроса GraphQL API:

from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport

transport = RequestsHTTPTransport(url="https://example.com/graphql")
client = Client(transport=transport, fetch_schema_from_transport=True)
query = gql("""
query {
  user(id: "1") {
    name
    age
    skills
  }
}
""")
response = client.execute(query)
print(response)

Обработка постраничной разбивки в GraphQL

API-интерфейсы GraphQL часто используют курсоры для разбивки на страницы. Пример:

query = gql("""
query {
  users(first: 5, after: "cursor_value") {
    edges {
      node {
        id
        name
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
""")
response = client.execute(query)
print(response)
  • Структурированные форматы данных, такие как JSON, XML и GraphQL, необходимы для современного веб-парсинга.
  • Освоив эти методы, вы сможете создавать эффективные, масштабируемые и надежные скребки, адаптированные к сложным потребностям в данных.
  • Всегда соблюдайте этические нормы при парсинге, чтобы поддерживать доверие и соответствие требованиям.

Comments

In order to leave your opinion, you need to register on the website