Scrapy JSON Encoder (utils/serialize.py)

scrapy · scrapy/utils/serialize.py · python · BSD-3-Clause
scraping, tag:json, tag:serialization, tag:encoder, tag:items

Custom JSON encoder that serializes Scrapy items, requests, responses, datetimes, decimals, sets, and Deferreds. Reuse when exporting scraped data or logging Scrapy objects to JSON.

# Source: https://github.com/scrapy/scrapy | License: BSD-3-Clause | Copyright Scrapy developers
# Provided via justclaw.it.com; keep this notice with the code.
import datetime
import decimal
import json
from typing import Any

from itemadapter import ItemAdapter, is_item
from twisted.internet import defer

from scrapy.http import Request, Response


class ScrapyJSONEncoder(json.JSONEncoder):
    def default(self, o: Any) -> Any:
        if isinstance(o, set):
            return list(o)
        if isinstance(o, (datetime.datetime, datetime.date, datetime.time)):
            return o.isoformat()
        if isinstance(o, decimal.Decimal):
            return str(o)
        if isinstance(o, defer.Deferred):
            return str(o)
        if isinstance(o, Request):
            return f"<{typ

... (truncated -- full source via MCP)

See the full source, get the GitHub permalink, and search for more like it.

Get a free API key