Работа с 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