{
 "about": "Each url serves exact bytes with an exact Content-Type. Fetch it, apply selector (parsel semantics: E::text is the direct child text nodes of E), and compare with browser.values, which is what Chrome extracted from the same response.",
 "stacks": [
  {
   "id": "frostwork",
   "language": "Python",
   "label": "Frostwork main at 6669bbe (unreleased)",
   "how": "frostwork.extract(), one streaming pass over the bytes",
   "kind": "http"
  },
  {
   "id": "scrapy",
   "language": "Python",
   "label": "Scrapy 2.19.0",
   "how": "HtmlResponse(...).css(), with w3lib 2.5.0",
   "kind": "http"
  },
  {
   "id": "scrapy(w3lib+parsel)",
   "language": "Python",
   "label": "w3lib 2.5.0 + parsel 1.12.1",
   "how": "html_to_unicode with no fallback detector, then Selector(text=)",
   "kind": "http"
  },
  {
   "id": "parsel(body=)",
   "language": "Python",
   "label": "parsel 1.12.1",
   "how": "Selector(body=, encoding=<HTTP charset>)",
   "kind": "http"
  },
  {
   "id": "requests.text+lxml",
   "language": "Python",
   "label": "requests 2.34.2 + lxml 6.1.3",
   "how": "response.text into lxml.html",
   "kind": "http"
  },
  {
   "id": "requests.text+parsel",
   "language": "Python",
   "label": "requests 2.34.2 + parsel 1.12.1",
   "how": "response.text into Selector(text=)",
   "kind": "http"
  },
  {
   "id": "requests.text+bs4",
   "language": "Python",
   "label": "requests 2.34.2 + Beautiful Soup 4.15.0",
   "how": "response.text into BeautifulSoup(..., \"html.parser\")",
   "kind": "http"
  },
  {
   "id": "requests+apparent",
   "language": "Python",
   "label": "requests 2.34.2 + charset-normalizer 3.5.2",
   "how": "response.apparent_encoding forced on",
   "kind": "http"
  },
  {
   "id": "crawlee.py(bs4)",
   "language": "Python",
   "label": "Crawlee for Python 1.11.0, BeautifulSoupCrawler",
   "how": "raw bytes to BeautifulSoup(features=\"lxml\")",
   "kind": "http"
  },
  {
   "id": "crawlee.py(parsel)",
   "language": "Python",
   "label": "Crawlee for Python 1.11.0, ParselCrawler",
   "how": "Selector(body=) with no encoding",
   "kind": "http"
  },
  {
   "id": "lxml(bytes)",
   "language": "Python",
   "label": "lxml 6.1.3 (libxml2 2.14.6)",
   "how": "lxml.html on the raw bytes",
   "kind": "http"
  },
  {
   "id": "html5lib",
   "language": "Python",
   "label": "html5lib 1.1",
   "how": "the WHATWG prescan over the raw bytes",
   "kind": "http"
  },
  {
   "id": "bs4+dammit",
   "language": "Python",
   "label": "Beautiful Soup 4.15.0 + UnicodeDammit",
   "how": "BeautifulSoup(bytes, \"html.parser\", from_encoding=<HTTP charset>), UnicodeDammit sniffing the rest",
   "kind": "http"
  },
  {
   "id": "selectolax(lexbor)",
   "language": "Python",
   "label": "selectolax 1.0.2 (lexbor)",
   "how": "the lexbor HTML5 parser on the raw bytes",
   "kind": "http"
  },
  {
   "id": "fetch.text+cheerio",
   "language": "JavaScript",
   "label": "fetch + cheerio 1.2.0 (Node 26.8.2)",
   "how": "await res.text() into cheerio.load",
   "kind": "http"
  },
  {
   "id": "crawlee(cheerio)",
   "language": "JavaScript",
   "label": "Crawlee 3.18.2, CheerioCrawler",
   "how": "Crawlee's own header-only charset rule",
   "kind": "http"
  },
  {
   "id": "crawlee(jsdom)",
   "language": "JavaScript",
   "label": "Crawlee 3.18.2, JSDOMCrawler",
   "how": "Crawlee's charset rule, then jsdom",
   "kind": "http"
  },
  {
   "id": "jsdom(bytes)",
   "language": "JavaScript",
   "label": "jsdom 30.1.3",
   "how": "new JSDOM(bytes, {contentType})",
   "kind": "http"
  },
  {
   "id": "jsoup(bytes)",
   "language": "Java",
   "label": "jsoup 1.24.1",
   "how": "Jsoup.parse(bytes) with no charset",
   "kind": "http"
  },
  {
   "id": "jsoup(http-charset)",
   "language": "Java",
   "label": "jsoup 1.24.1 with the HTTP charset",
   "how": "Jsoup.parse(bytes, <HTTP charset>)",
   "kind": "http"
  },
  {
   "id": "jdk-http.ofString+jsoup",
   "language": "Java",
   "label": "java.net.http + jsoup 1.24.1 (JDK 21.0.3)",
   "how": "BodyHandlers.ofString() into Jsoup.parse",
   "kind": "http"
  },
  {
   "id": "regex scraper",
   "language": "Python",
   "label": "a regular expression",
   "how": "the HTTP charset or UTF-8, then one regular expression per selector",
   "kind": "http"
  },
  {
   "id": "playwright(chromium)",
   "language": "Python",
   "label": "Playwright 1.64.1, Chromium",
   "how": "in the page",
   "engine": "Chromium 156.0.8078.4",
   "kind": "browser"
  },
  {
   "id": "playwright(firefox)",
   "language": "Python",
   "label": "Playwright 1.64.1, Firefox",
   "how": "in the page",
   "engine": "Firefox 157.0",
   "kind": "browser"
  },
  {
   "id": "playwright(webkit)",
   "language": "Python",
   "label": "Playwright 1.64.1, WebKit",
   "how": "in the page",
   "engine": "WebKit 27.2",
   "kind": "browser"
  },
  {
   "id": "crawlee.py(playwright)",
   "language": "Python",
   "label": "Crawlee for Python 1.11.0, PlaywrightCrawler",
   "how": "in the page",
   "engine": "Chromium 156.0.8078.4",
   "kind": "browser"
  },
  {
   "id": "selenium(chrome)",
   "language": "Python",
   "label": "Selenium 4.52.0, Chrome",
   "how": "in the page",
   "engine": "Chrome 156.0.8078.80",
   "kind": "browser"
  },
  {
   "id": "selenium(chrome)+bs4",
   "language": "Python",
   "label": "Selenium 4.52.0, Chrome, page_source into Beautiful Soup",
   "how": "re-parsed: driver.page_source into BeautifulSoup",
   "engine": "Chrome 156.0.8078.80",
   "kind": "browser"
  },
  {
   "id": "scrapy-playwright",
   "language": "Python",
   "label": "Scrapy 2.19.0 + scrapy-playwright 0.0.48",
   "how": "re-parsed: page.content() into Scrapy's HtmlResponse",
   "engine": "Chromium 156.0.8078.4",
   "kind": "browser"
  },
  {
   "id": "puppeteer",
   "language": "JavaScript",
   "label": "Puppeteer 25.16.0",
   "how": "in the page",
   "engine": "Chrome for Testing 156.0.8078.47",
   "kind": "browser"
  },
  {
   "id": "crawlee(playwright)",
   "language": "JavaScript",
   "label": "Crawlee 3.18.2, PlaywrightCrawler",
   "how": "in the page",
   "engine": "Chromium 156.0.8078.4",
   "kind": "browser"
  },
  {
   "id": "crawlee(playwright+cheerio)",
   "language": "JavaScript",
   "label": "Crawlee 3.18.2, PlaywrightCrawler + parseWithCheerio()",
   "how": "re-parsed: parseWithCheerio()",
   "engine": "Chromium 156.0.8078.4",
   "kind": "browser"
  },
  {
   "id": "scrapy+w3lib-2.4.1",
   "language": "Python",
   "label": "Scrapy 2.19.0 with w3lib 2.4.1",
   "how": "HtmlResponse(...).css(), on the w3lib that `pip install -U scrapy` leaves behind",
   "kind": "http",
   "outdated": true
  }
 ],
 "cases": [
  {
   "url": "/c/no-declaration",
   "readers": {
    "frostwork": [
     "café — “Excellent”"
    ],
    "scrapy": [
     "café — “Excellent”"
    ],
    "scrapy(w3lib+parsel)": [
     "café — “Excellent”"
    ],
    "parsel(body=)": [
     "café — “Excellent”"
    ],
    "requests.text+lxml": [
     "cafÃ© â âExcellentâ"
    ],
    "requests.text+parsel": [
     "cafÃ© â âExcellentâ"
    ],
    "requests.text+bs4": [
     "cafÃ© â âExcellentâ"
    ],
    "requests+apparent": [
     "café — “Excellent”"
    ],
    "crawlee.py(bs4)": [
     "café — “Excellent”"
    ],
    "crawlee.py(parsel)": [
     "café — “Excellent”"
    ],
    "lxml(bytes)": [
     "cafÃ© â âExcellentâ"
    ],
    "html5lib": [
     "cafÃ© â€” â€œExcellentâ€�"
    ],
    "bs4+dammit": [
     "café — “Excellent”"
    ],
    "selectolax(lexbor)": [
     "café — “Excellent”"
    ],
    "fetch.text+cheerio": [
     "café — “Excellent”"
    ],
    "crawlee(cheerio)": [
     "café — “Excellent”"
    ],
    "crawlee(jsdom)": [
     "cafÃ© â€” â€œExcellentâ€�"
    ],
    "jsdom(bytes)": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "jsoup(bytes)": [
     "café — “Excellent”"
    ],
    "jsoup(http-charset)": [
     "café — “Excellent”"
    ],
    "jdk-http.ofString+jsoup": [
     "café — “Excellent”"
    ],
    "regex scraper": [
     "café — “Excellent”"
    ],
    "playwright(chromium)": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "playwright(firefox)": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "playwright(webkit)": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "crawlee.py(playwright)": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "selenium(chrome)": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "selenium(chrome)+bs4": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "scrapy-playwright": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "puppeteer": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "crawlee(playwright)": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "crawlee(playwright+cheerio)": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "scrapy+w3lib-2.4.1": [
     "café — “Excellent”"
    ]
   },
   "id": "no-declaration",
   "title": "no charset anywhere, UTF-8 bytes",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "the HTML spec's fallback is locale-dependent (windows-1252 in practice); every Python scraper stack defaults to UTF-8 instead",
   "nav": "top-level",
   "sha": "6ab01dcd774ee8c0",
   "size": 93,
   "browser": {
    "values": [
     "cafÃ© â€” â€œExcellentâ€"
    ],
    "charset": "windows-1252",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/comment-decoy",
   "readers": {
    "frostwork": [
     "café — “Excellent”"
    ],
    "scrapy": [
     "café — “Excellent”"
    ],
    "scrapy(w3lib+parsel)": [
     "café — “Excellent”"
    ],
    "parsel(body=)": [
     "café — “Excellent”"
    ],
    "requests.text+lxml": [
     "cafÃ© â âExcellentâ"
    ],
    "requests.text+parsel": [
     "cafÃ© â âExcellentâ"
    ],
    "requests.text+bs4": [
     "cafÃ© â âExcellentâ"
    ],
    "requests+apparent": [
     "café — “Excellent”"
    ],
    "crawlee.py(bs4)": [
     "café — “Excellent”"
    ],
    "crawlee.py(parsel)": [
     "café — “Excellent”"
    ],
    "lxml(bytes)": [
     "café — “Excellent”"
    ],
    "html5lib": [
     "café — “Excellent”"
    ],
    "bs4+dammit": [
     "café — “Excellent”"
    ],
    "selectolax(lexbor)": [
     "café — “Excellent”"
    ],
    "fetch.text+cheerio": [
     "café — “Excellent”"
    ],
    "crawlee(cheerio)": [
     "café — “Excellent”"
    ],
    "crawlee(jsdom)": [
     "café — “Excellent”"
    ],
    "jsdom(bytes)": [
     "café — “Excellent”"
    ],
    "jsoup(bytes)": [
     "café — “Excellent”"
    ],
    "jsoup(http-charset)": [
     "café — “Excellent”"
    ],
    "jdk-http.ofString+jsoup": [
     "café — “Excellent”"
    ],
    "regex scraper": [
     "café — “Excellent”"
    ],
    "playwright(chromium)": [
     "café — “Excellent”"
    ],
    "playwright(firefox)": [
     "café — “Excellent”"
    ],
    "playwright(webkit)": [
     "café — “Excellent”"
    ],
    "crawlee.py(playwright)": [
     "café — “Excellent”"
    ],
    "selenium(chrome)": [
     "café — “Excellent”"
    ],
    "selenium(chrome)+bs4": [
     "café — “Excellent”"
    ],
    "scrapy-playwright": [
     "café — “Excellent”"
    ],
    "puppeteer": [
     "café — “Excellent”"
    ],
    "crawlee(playwright)": [
     "café — “Excellent”"
    ],
    "crawlee(playwright+cheerio)": [
     "café — “Excellent”"
    ],
    "scrapy+w3lib-2.4.1": [
     "caf矇 ��� ��諪xcellent���"
    ]
   },
   "id": "comment-decoy",
   "title": "a <meta charset> inside a comment, before the real one",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "w3lib has no comment handling and takes the FIRST regex hit, which is the decoy; WHATWG's prescan skips comments and reaches the real declaration",
   "nav": "iframe",
   "sha": "ca83a14008fb0f53",
   "size": 141,
   "browser": {
    "values": [
     "café — “Excellent”"
    ],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/stray-quote",
   "readers": {
    "frostwork": [
     "中文"
    ],
    "scrapy": [
     "¤¤¤å"
    ],
    "scrapy(w3lib+parsel)": [
     "¤¤¤å"
    ],
    "parsel(body=)": [
     "����"
    ],
    "requests.text+lxml": [
     "¤¤¤å"
    ],
    "requests.text+parsel": [
     "¤¤¤å"
    ],
    "requests.text+bs4": [
     "¤¤¤å"
    ],
    "requests+apparent": [
     "¤¤¤å"
    ],
    "crawlee.py(bs4)": [
     "中文"
    ],
    "crawlee.py(parsel)": [
     "中文"
    ],
    "lxml(bytes)": [
     "中文"
    ],
    "html5lib": [
     "中文"
    ],
    "bs4+dammit": [
     "¤¤¤å"
    ],
    "selectolax(lexbor)": [
     "¤¤¤å"
    ],
    "fetch.text+cheerio": [
     "����"
    ],
    "crawlee(cheerio)": [
     "����"
    ],
    "crawlee(jsdom)": [
     "中文"
    ],
    "jsdom(bytes)": [
     "中文"
    ],
    "jsoup(bytes)": [
     "¤¤¤å"
    ],
    "jsoup(http-charset)": [
     "¤¤¤å"
    ],
    "jdk-http.ofString+jsoup": [
     "����"
    ],
    "regex scraper": [
     "����"
    ],
    "playwright(chromium)": [
     "中文"
    ],
    "playwright(firefox)": [
     "中文"
    ],
    "playwright(webkit)": [
     "中文"
    ],
    "crawlee.py(playwright)": [
     "中文"
    ],
    "selenium(chrome)": [
     "中文"
    ],
    "selenium(chrome)+bs4": [
     "中文"
    ],
    "scrapy-playwright": [
     "中文"
    ],
    "puppeteer": [
     "中文"
    ],
    "crawlee(playwright)": [
     "中文"
    ],
    "crawlee(playwright+cheerio)": [
     "中文"
    ],
    "scrapy+w3lib-2.4.1": [
     "¤¤¤å"
    ]
   },
   "id": "stray-quote",
   "title": "stray quote inside an unquoted charset value",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "an unquoted attribute value ends at whitespace or `>`, so the label is `windows-1252\"` -> invalid -> continue to big5. w3lib stops at the quote and takes windows-1252",
   "nav": "iframe",
   "sha": "672597cff1a240de",
   "size": 169,
   "browser": {
    "values": [
     "中文"
    ],
    "charset": "Big5",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/meta-utf16",
   "readers": {
    "frostwork": [
     "café — “Excellent”"
    ],
    "scrapy": [],
    "scrapy(w3lib+parsel)": [],
    "parsel(body=)": [
     "café — “Excellent”"
    ],
    "requests.text+lxml": [
     "cafÃ© â âExcellentâ"
    ],
    "requests.text+parsel": [
     "cafÃ© â âExcellentâ"
    ],
    "requests.text+bs4": [
     "cafÃ© â âExcellentâ"
    ],
    "requests+apparent": [
     "café — “Excellent”"
    ],
    "crawlee.py(bs4)": [
     "café — “Excellent”"
    ],
    "crawlee.py(parsel)": [
     "café — “Excellent”"
    ],
    "lxml(bytes)": [],
    "html5lib": [
     "café — “Excellent”"
    ],
    "bs4+dammit": [],
    "selectolax(lexbor)": [
     "café — “Excellent”"
    ],
    "fetch.text+cheerio": [
     "café — “Excellent”"
    ],
    "crawlee(cheerio)": [
     "café — “Excellent”"
    ],
    "crawlee(jsdom)": [
     "café — “Excellent”"
    ],
    "jsdom(bytes)": [
     "café — “Excellent”"
    ],
    "jsoup(bytes)": [],
    "jsoup(http-charset)": [],
    "jdk-http.ofString+jsoup": [
     "café — “Excellent”"
    ],
    "regex scraper": [
     "café — “Excellent”"
    ],
    "playwright(chromium)": [
     "café — “Excellent”"
    ],
    "playwright(firefox)": [
     "café — “Excellent”"
    ],
    "playwright(webkit)": [
     "café — “Excellent”"
    ],
    "crawlee.py(playwright)": [
     "café — “Excellent”"
    ],
    "selenium(chrome)": [
     "café — “Excellent”"
    ],
    "selenium(chrome)+bs4": [
     "café — “Excellent”"
    ],
    "scrapy-playwright": [
     "café — “Excellent”"
    ],
    "puppeteer": [
     "café — “Excellent”"
    ],
    "crawlee(playwright)": [
     "café — “Excellent”"
    ],
    "crawlee(playwright+cheerio)": [
     "café — “Excellent”"
    ],
    "scrapy+w3lib-2.4.1": []
   },
   "id": "meta-utf16",
   "title": "<meta charset=utf-16> on ASCII-compatible bytes",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "the prescan could only READ it by assuming ASCII-compat, so WHATWG rewrites it to UTF-8",
   "nav": "iframe",
   "sha": "a61e2e1dc7ecb543",
   "size": 116,
   "browser": {
    "values": [
     "café — “Excellent”"
    ],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/http-x-user-defined",
   "readers": {
    "frostwork": [
     "1.299,00 "
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "ERR:LookupError: unknown encoding: x-user-defined"
    ],
    "requests.text+lxml": [
     "1.299,00 �"
    ],
    "requests.text+parsel": [
     "1.299,00 �"
    ],
    "requests.text+bs4": [
     "1.299,00 �"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 �"
    ],
    "lxml(bytes)": [
     "1.299,00 "
    ],
    "html5lib": [
     "1.299,00 "
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "ERR:Error: Resource http://127.0.0.1:8765/c/case served with unsupported charset/"
    ],
    "crawlee(jsdom)": [
     "ERR:Error: Resource http://127.0.0.1:8765/c/case served with unsupported charset/"
    ],
    "jsdom(bytes)": [
     "1.299,00 "
    ],
    "jsoup(bytes)": [
     "1.299,00 �"
    ],
    "jsoup(http-charset)": [
     "ERR:UnsupportedCharsetException: x-user-defined"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "ERR:LookupError: unknown encoding: x-user-defined"
    ],
    "playwright(chromium)": [
     "1.299,00 "
    ],
    "playwright(firefox)": [
     "1.299,00 "
    ],
    "playwright(webkit)": [
     "1.299,00 "
    ],
    "crawlee.py(playwright)": [
     "1.299,00 "
    ],
    "selenium(chrome)": [
     "1.299,00 "
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 "
    ],
    "scrapy-playwright": [
     "1.299,00 "
    ],
    "puppeteer": [
     "1.299,00 "
    ],
    "crawlee(playwright)": [
     "1.299,00 "
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 "
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "http-x-user-defined",
   "title": "HTTP charset=x-user-defined (no meta rewrite)",
   "content_type": "text/html; charset=x-user-defined",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "from HTTP the label is NOT rewritten: every high byte -> U+F780+b private use",
   "nav": "iframe",
   "sha": "9d2e5466ded30be3",
   "size": 78,
   "browser": {
    "values": [
     "1.299,00 "
    ],
    "charset": "x-user-defined",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/replacement-enc",
   "readers": {
    "frostwork": [],
    "scrapy": [
     "Members only: 4 seats left"
    ],
    "scrapy(w3lib+parsel)": [
     "Members only: 4 seats left"
    ],
    "parsel(body=)": [
     "Members only: 4 seats left"
    ],
    "requests.text+lxml": [
     "Members only: 4 seats left"
    ],
    "requests.text+parsel": [
     "Members only: 4 seats left"
    ],
    "requests.text+bs4": [
     "Members only: 4 seats left"
    ],
    "requests+apparent": [
     "Members only: 4 seats left"
    ],
    "crawlee.py(bs4)": [
     "Members only: 4 seats left"
    ],
    "crawlee.py(parsel)": [
     "Members only: 4 seats left"
    ],
    "lxml(bytes)": [
     "Members only: 4 seats left"
    ],
    "html5lib": [
     "Members only: 4 seats left"
    ],
    "bs4+dammit": [
     "Members only: 4 seats left"
    ],
    "selectolax(lexbor)": [
     "Members only: 4 seats left"
    ],
    "fetch.text+cheerio": [
     "Members only: 4 seats left"
    ],
    "crawlee(cheerio)": [
     "Members only: 4 seats left"
    ],
    "crawlee(jsdom)": [
     "Members only: 4 seats left"
    ],
    "jsdom(bytes)": [],
    "jsoup(bytes)": [
     "Members only: 4 seats left"
    ],
    "jsoup(http-charset)": [
     "Members only: 4 seats left"
    ],
    "jdk-http.ofString+jsoup": [
     "Members only: 4 seats left"
    ],
    "regex scraper": [
     "Members only: 4 seats left"
    ],
    "playwright(chromium)": [],
    "playwright(firefox)": [],
    "playwright(webkit)": [],
    "crawlee.py(playwright)": [],
    "selenium(chrome)": [],
    "selenium(chrome)+bs4": [],
    "scrapy-playwright": [],
    "puppeteer": [],
    "crawlee(playwright)": [],
    "crawlee(playwright+cheerio)": [],
    "scrapy+w3lib-2.4.1": [
     "Members only: 4 seats left"
    ]
   },
   "id": "replacement-enc",
   "title": "<meta charset=hz-gb-2312> (WHATWG 'replacement')",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "WHATWG maps this label to the `replacement` decoder: the WHOLE document becomes one U+FFFD",
   "nav": "iframe",
   "sha": "963fc4499d546cfa",
   "size": 121,
   "browser": {
    "values": [],
    "charset": "replacement",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/xmldecl-late",
   "readers": {
    "frostwork": [
     "café — “Excellent”"
    ],
    "scrapy": [
     "caf矇 ��� ��諪xcellent���"
    ],
    "scrapy(w3lib+parsel)": [
     "caf矇 ��� ��諪xcellent���"
    ],
    "parsel(body=)": [
     "café — “Excellent”"
    ],
    "requests.text+lxml": [
     "cafÃ© â âExcellentâ"
    ],
    "requests.text+parsel": [
     "cafÃ© â âExcellentâ"
    ],
    "requests.text+bs4": [
     "cafÃ© â âExcellentâ"
    ],
    "requests+apparent": [
     "café — “Excellent”"
    ],
    "crawlee.py(bs4)": [
     "café — “Excellent”"
    ],
    "crawlee.py(parsel)": [
     "café — “Excellent”"
    ],
    "lxml(bytes)": [
     "café — “Excellent”"
    ],
    "html5lib": [
     "café — “Excellent”"
    ],
    "bs4+dammit": [
     "café — “Excellent”"
    ],
    "selectolax(lexbor)": [
     "café — “Excellent”"
    ],
    "fetch.text+cheerio": [
     "café — “Excellent”"
    ],
    "crawlee(cheerio)": [
     "café — “Excellent”"
    ],
    "crawlee(jsdom)": [
     "café — “Excellent”"
    ],
    "jsdom(bytes)": [
     "café — “Excellent”"
    ],
    "jsoup(bytes)": [
     "café — “Excellent”"
    ],
    "jsoup(http-charset)": [
     "café — “Excellent”"
    ],
    "jdk-http.ofString+jsoup": [
     "café — “Excellent”"
    ],
    "regex scraper": [
     "café — “Excellent”"
    ],
    "playwright(chromium)": [
     "café — “Excellent”"
    ],
    "playwright(firefox)": [
     "café — “Excellent”"
    ],
    "playwright(webkit)": [
     "café — “Excellent”"
    ],
    "crawlee.py(playwright)": [
     "café — “Excellent”"
    ],
    "selenium(chrome)": [
     "café — “Excellent”"
    ],
    "selenium(chrome)+bs4": [
     "café — “Excellent”"
    ],
    "scrapy-playwright": [
     "café — “Excellent”"
    ],
    "puppeteer": [
     "café — “Excellent”"
    ],
    "crawlee(playwright)": [
     "café — “Excellent”"
    ],
    "crawlee(playwright+cheerio)": [
     "café — “Excellent”"
    ],
    "scrapy+w3lib-2.4.1": [
     "caf矇 ��� ��諪xcellent���"
    ]
   },
   "id": "xmldecl-late",
   "title": "<?xml encoding=...?> not at offset 0",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "a `<?` after the start of the document is a bogus comment and declares nothing; w3lib's regex searches anywhere in its window",
   "nav": "iframe",
   "sha": "9bebf4f195dc26fe",
   "size": 150,
   "browser": {
    "values": [
     "café — “Excellent”"
    ],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/utf32-bom",
   "readers": {
    "frostwork": [],
    "scrapy": [
     "日本 😀"
    ],
    "scrapy(w3lib+parsel)": [
     "日本 😀"
    ],
    "parsel(body=)": [
     "�e,g �\u0001"
    ],
    "requests.text+lxml": [],
    "requests.text+parsel": [
     "åe,g ö\u0001"
    ],
    "requests.text+bs4": [],
    "requests+apparent": [
     "日本 😀"
    ],
    "crawlee.py(bs4)": [],
    "crawlee.py(parsel)": [
     "日本 \u0001"
    ],
    "lxml(bytes)": [
     "日本 😀"
    ],
    "html5lib": [
     "ERR:ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or"
    ],
    "bs4+dammit": [
     "日本 😀"
    ],
    "selectolax(lexbor)": [],
    "fetch.text+cheerio": [],
    "crawlee(cheerio)": [],
    "crawlee(jsdom)": [],
    "jsdom(bytes)": [],
    "jsoup(bytes)": [
     "日本 😀"
    ],
    "jsoup(http-charset)": [
     "日本 😀"
    ],
    "jdk-http.ofString+jsoup": [],
    "regex scraper": [],
    "playwright(chromium)": [],
    "playwright(firefox)": [],
    "playwright(webkit)": [],
    "crawlee.py(playwright)": [],
    "selenium(chrome)": [],
    "selenium(chrome)+bs4": [],
    "scrapy-playwright": [],
    "puppeteer": [],
    "crawlee(playwright)": [],
    "crawlee(playwright+cheerio)": [],
    "scrapy+w3lib-2.4.1": [
     "日本 😀"
    ]
   },
   "id": "utf32-bom",
   "title": "UTF-32LE BOM (FF FE 00 00)",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "the WHATWG Encoding Standard has no UTF-32, so FF FE IS the UTF-16LE BOM. Agrees for BMP text after NUL deletion; an astral character is where the two readings split",
   "nav": "iframe",
   "sha": "0c03a3e6f5201008",
   "size": 240,
   "browser": {
    "values": [],
    "charset": "UTF-16LE",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/http-vs-meta",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 €"
    ],
    "parsel(body=)": [
     "1.299,00 €"
    ],
    "requests.text+lxml": [
     "1.299,00 €"
    ],
    "requests.text+parsel": [
     "1.299,00 €"
    ],
    "requests.text+bs4": [
     "1.299,00 €"
    ],
    "requests+apparent": [
     "1.299,00 Ć"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 €"
    ],
    "lxml(bytes)": [
     "1.299,00 �"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 €"
    ],
    "crawlee(jsdom)": [
     "1.299,00 €"
    ],
    "jsdom(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(bytes)": [
     "1.299,00 �"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 €"
    ],
    "regex scraper": [
     "1.299,00 €"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "http-vs-meta",
   "title": "HTTP charset wins over <meta> (control)",
   "content_type": "text/html; charset=windows-1252",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "everyone should agree here — the control row",
   "nav": "iframe",
   "sha": "7cfa35a4ccfa304f",
   "size": 100,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "windows-1252",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/bom-vs-http",
   "readers": {
    "frostwork": [
     "café — “Excellent”"
    ],
    "scrapy": [
     "café — “Excellent”"
    ],
    "scrapy(w3lib+parsel)": [
     "café — “Excellent”"
    ],
    "parsel(body=)": [
     "cafÃ© â€” â€œExcellentâ€�"
    ],
    "requests.text+lxml": [
     "cafÃ© â€” â€œExcellentâ€�"
    ],
    "requests.text+parsel": [
     "cafÃ© â€” â€œExcellentâ€�"
    ],
    "requests.text+bs4": [
     "cafÃ© â€” â€œExcellentâ€�"
    ],
    "requests+apparent": [
     "café — “Excellent”"
    ],
    "crawlee.py(bs4)": [
     "café — “Excellent”"
    ],
    "crawlee.py(parsel)": [
     "café — “Excellent”"
    ],
    "lxml(bytes)": [
     "café — “Excellent”"
    ],
    "html5lib": [
     "café — “Excellent”"
    ],
    "bs4+dammit": [
     "café — “Excellent”"
    ],
    "selectolax(lexbor)": [
     "café — “Excellent”"
    ],
    "fetch.text+cheerio": [
     "café — “Excellent”"
    ],
    "crawlee(cheerio)": [
     "cafÃ© â€” â€œExcellentâ€�"
    ],
    "crawlee(jsdom)": [
     "cafÃƒÂ© Ã¢â‚¬â€� Ã¢â‚¬Å“ExcellentÃ¢â‚¬ï¿½"
    ],
    "jsdom(bytes)": [
     "café — “Excellent”"
    ],
    "jsoup(bytes)": [
     "café — “Excellent”"
    ],
    "jsoup(http-charset)": [
     "café — “Excellent”"
    ],
    "jdk-http.ofString+jsoup": [
     "cafÃ© â€” â€œExcellentâ€�"
    ],
    "regex scraper": [
     "cafÃ© â€” â€œExcellentâ€�"
    ],
    "playwright(chromium)": [
     "café — “Excellent”"
    ],
    "playwright(firefox)": [
     "café — “Excellent”"
    ],
    "playwright(webkit)": [
     "café — “Excellent”"
    ],
    "crawlee.py(playwright)": [
     "café — “Excellent”"
    ],
    "selenium(chrome)": [
     "café — “Excellent”"
    ],
    "selenium(chrome)+bs4": [
     "café — “Excellent”"
    ],
    "scrapy-playwright": [
     "café — “Excellent”"
    ],
    "puppeteer": [
     "café — “Excellent”"
    ],
    "crawlee(playwright)": [
     "café — “Excellent”"
    ],
    "crawlee(playwright+cheerio)": [
     "café — “Excellent”"
    ],
    "scrapy+w3lib-2.4.1": [
     "café — “Excellent”"
    ]
   },
   "id": "bom-vs-http",
   "title": "UTF-8 BOM outranks a conflicting HTTP charset (control)",
   "content_type": "text/html; charset=windows-1252",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "sniffing",
   "note": "control row: BOM first for everyone",
   "nav": "iframe",
   "sha": "3bfacae73fd79c9e",
   "size": 96,
   "browser": {
    "values": [
     "café — “Excellent”"
    ],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/latin1-label",
   "readers": {
    "frostwork": [
     "99–149"
    ],
    "scrapy": [
     "99–149"
    ],
    "scrapy(w3lib+parsel)": [
     "99–149"
    ],
    "parsel(body=)": [
     "99149"
    ],
    "requests.text+lxml": [
     "99149"
    ],
    "requests.text+parsel": [
     "99149"
    ],
    "requests.text+bs4": [
     "99149"
    ],
    "requests+apparent": [
     "99–149"
    ],
    "crawlee.py(bs4)": [
     "99–149"
    ],
    "crawlee.py(parsel)": [
     "99–149"
    ],
    "lxml(bytes)": [
     "99149"
    ],
    "html5lib": [
     "99–149"
    ],
    "bs4+dammit": [
     "99149"
    ],
    "selectolax(lexbor)": [
     "99�149"
    ],
    "fetch.text+cheerio": [
     "99�149"
    ],
    "crawlee(cheerio)": [
     "99149"
    ],
    "crawlee(jsdom)": [
     "99Â–149"
    ],
    "jsdom(bytes)": [
     "99–149"
    ],
    "jsoup(bytes)": [
     "99�149"
    ],
    "jsoup(http-charset)": [
     "99149"
    ],
    "jdk-http.ofString+jsoup": [
     "99149"
    ],
    "regex scraper": [
     "99149"
    ],
    "playwright(chromium)": [
     "99–149"
    ],
    "playwright(firefox)": [
     "99–149"
    ],
    "playwright(webkit)": [
     "99–149"
    ],
    "crawlee.py(playwright)": [
     "99–149"
    ],
    "selenium(chrome)": [
     "99–149"
    ],
    "selenium(chrome)+bs4": [
     "99–149"
    ],
    "scrapy-playwright": [
     "99–149"
    ],
    "puppeteer": [
     "99–149"
    ],
    "crawlee(playwright)": [
     "99–149"
    ],
    "crawlee(playwright+cheerio)": [
     "99–149"
    ],
    "scrapy+w3lib-2.4.1": [
     "99–149"
    ]
   },
   "id": "latin1-label",
   "title": "charset=iso-8859-1 with byte 0x96",
   "content_type": "text/html; charset=iso-8859-1",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "decoder",
   "note": "the WHATWG label iso-8859-1 MEANS windows-1252 (0x96 = en dash). Python's literal latin_1 codec gives the invisible control U+0096",
   "nav": "iframe",
   "sha": "7d1b33d1fdf09d23",
   "size": 74,
   "browser": {
    "values": [
     "99–149"
    ],
    "charset": "windows-1252",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/eucjp-wave",
   "readers": {
    "frostwork": [
     "～ ①"
    ],
    "scrapy": [
     "〜 ��"
    ],
    "scrapy(w3lib+parsel)": [
     "〜 ��"
    ],
    "parsel(body=)": [
     "〜 ��"
    ],
    "requests.text+lxml": [
     "〜 ��"
    ],
    "requests.text+parsel": [
     "〜 ��"
    ],
    "requests.text+bs4": [
     "〜 ��"
    ],
    "requests+apparent": [
     "℅ 迭"
    ],
    "crawlee.py(bs4)": [
     "〜 ��"
    ],
    "crawlee.py(parsel)": [
     "〜 ��"
    ],
    "lxml(bytes)": [
     "¡Á ­¡"
    ],
    "html5lib": [
     "〜 ��"
    ],
    "bs4+dammit": [
     "℅ 迭"
    ],
    "selectolax(lexbor)": [
     "�� ��"
    ],
    "fetch.text+cheerio": [
     "�� ��"
    ],
    "crawlee(cheerio)": [
     "～ ①"
    ],
    "crawlee(jsdom)": [
     "ï½ž â‘ "
    ],
    "jsdom(bytes)": [
     "～ ①"
    ],
    "jsoup(bytes)": [
     "�� ��"
    ],
    "jsoup(http-charset)": [
     "〜 �"
    ],
    "jdk-http.ofString+jsoup": [
     "〜 �"
    ],
    "regex scraper": [
     "〜 ��"
    ],
    "playwright(chromium)": [
     "～ ①"
    ],
    "playwright(firefox)": [
     "～ ①"
    ],
    "playwright(webkit)": [
     "～ ①"
    ],
    "crawlee.py(playwright)": [
     "～ ①"
    ],
    "selenium(chrome)": [
     "～ ①"
    ],
    "selenium(chrome)+bs4": [
     "～ ①"
    ],
    "scrapy-playwright": [
     "～ ①"
    ],
    "puppeteer": [
     "～ ①"
    ],
    "crawlee(playwright)": [
     "～ ①"
    ],
    "crawlee(playwright+cheerio)": [
     "～ ①"
    ],
    "scrapy+w3lib-2.4.1": [
     "〜 ��"
    ]
   },
   "id": "eucjp-wave",
   "title": "euc-jp A1C1 (wave dash) + ADA1 (circled 1)",
   "content_type": "text/html; charset=euc-jp",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "decoder",
   "note": "WHATWG/CP932: U+FF5E and U+2460. Python's strict euc_jp: U+301C and U+FFFD",
   "nav": "iframe",
   "sha": "5a27a77f4dc544a7",
   "size": 73,
   "browser": {
    "values": [
     "～ ①"
    ],
    "charset": "EUC-JP",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/gb18030-pua",
   "readers": {
    "frostwork": [
     "a　b"
    ],
    "scrapy": [
     "ab"
    ],
    "scrapy(w3lib+parsel)": [
     "ab"
    ],
    "parsel(body=)": [
     "ab"
    ],
    "requests.text+lxml": [
     "ab"
    ],
    "requests.text+parsel": [
     "ab"
    ],
    "requests.text+bs4": [
     "ab"
    ],
    "requests+apparent": [
     "aŁ b"
    ],
    "crawlee.py(bs4)": [
     "ab"
    ],
    "crawlee.py(parsel)": [
     "ab"
    ],
    "lxml(bytes)": [
     "a£ b"
    ],
    "html5lib": [
     "ab"
    ],
    "bs4+dammit": [
     "ab"
    ],
    "selectolax(lexbor)": [
     "a��b"
    ],
    "fetch.text+cheerio": [
     "a��b"
    ],
    "crawlee(cheerio)": [
     "a　b"
    ],
    "crawlee(jsdom)": [
     "aã€€b"
    ],
    "jsdom(bytes)": [
     "a　b"
    ],
    "jsoup(bytes)": [
     "a��b"
    ],
    "jsoup(http-charset)": [
     "ab"
    ],
    "jdk-http.ofString+jsoup": [
     "ab"
    ],
    "regex scraper": [
     "ab"
    ],
    "playwright(chromium)": [
     "a　b"
    ],
    "playwright(firefox)": [
     "a　b"
    ],
    "playwright(webkit)": [
     "a　b"
    ],
    "crawlee.py(playwright)": [
     "a　b"
    ],
    "selenium(chrome)": [
     "a　b"
    ],
    "selenium(chrome)+bs4": [
     "a　b"
    ],
    "scrapy-playwright": [
     "a　b"
    ],
    "puppeteer": [
     "a　b"
    ],
    "crawlee(playwright)": [
     "a　b"
    ],
    "crawlee(playwright+cheerio)": [
     "a　b"
    ],
    "scrapy+w3lib-2.4.1": [
     "ab"
    ]
   },
   "id": "gb18030-pua",
   "title": "gb18030 A3A0",
   "content_type": "text/html; charset=gb18030",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "decoder",
   "note": "GB18030-2005 moved this out of the PUA: U+3000 here, U+E5E5 in Python's older index",
   "nav": "iframe",
   "sha": "8cc2ef4aa554a5bf",
   "size": 72,
   "browser": {
    "values": [
     "a　b"
    ],
    "charset": "gb18030",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/cp1252-c1",
   "readers": {
    "frostwork": [
     "xyz"
    ],
    "scrapy": [
     "x�y�z"
    ],
    "scrapy(w3lib+parsel)": [
     "x�y�z"
    ],
    "parsel(body=)": [
     "x�y�z"
    ],
    "requests.text+lxml": [
     "x�y�z"
    ],
    "requests.text+parsel": [
     "x�y�z"
    ],
    "requests.text+bs4": [
     "x�y�z"
    ],
    "requests+apparent": [
     "x【鉱"
    ],
    "crawlee.py(bs4)": [
     "x�y�z"
    ],
    "crawlee.py(parsel)": [
     "x�y�z"
    ],
    "lxml(bytes)": [
     "xyz"
    ],
    "html5lib": [
     "x�y�z"
    ],
    "bs4+dammit": [
     "x【鉱"
    ],
    "selectolax(lexbor)": [
     "x�y�z"
    ],
    "fetch.text+cheerio": [
     "x�y�z"
    ],
    "crawlee(cheerio)": [
     "x�y�z"
    ],
    "crawlee(jsdom)": [
     "xï¿½yï¿½z"
    ],
    "jsdom(bytes)": [
     "xyz"
    ],
    "jsoup(bytes)": [
     "x�y�z"
    ],
    "jsoup(http-charset)": [
     "x�y�z"
    ],
    "jdk-http.ofString+jsoup": [
     "x�y�z"
    ],
    "regex scraper": [
     "x�y�z"
    ],
    "playwright(chromium)": [
     "xyz"
    ],
    "playwright(firefox)": [
     "xyz"
    ],
    "playwright(webkit)": [
     "xyz"
    ],
    "crawlee.py(playwright)": [
     "xyz"
    ],
    "selenium(chrome)": [
     "xyz"
    ],
    "selenium(chrome)+bs4": [
     "xyz"
    ],
    "scrapy-playwright": [
     "xyz"
    ],
    "puppeteer": [
     "xyz"
    ],
    "crawlee(playwright)": [
     "xyz"
    ],
    "crawlee(playwright+cheerio)": [
     "xyz"
    ],
    "scrapy+w3lib-2.4.1": [
     "x�y�z"
    ]
   },
   "id": "cp1252-c1",
   "title": "windows-1252 bytes 81 8D 8F 90 9D",
   "content_type": "text/html; charset=windows-1252",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "decoder",
   "note": "a WHATWG index is TOTAL; Python's cp1252 leaves these five undefined -> U+FFFD",
   "nav": "iframe",
   "sha": "f6dffdebbcadb1cb",
   "size": 73,
   "browser": {
    "values": [
     "xyz"
    ],
    "charset": "windows-1252",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/indented-bom",
   "readers": {
    "frostwork": [
     "Real Title"
    ],
    "scrapy": [
     "Real Title"
    ],
    "scrapy(w3lib+parsel)": [
     "Real Title"
    ],
    "parsel(body=)": [
     "Real Title"
    ],
    "requests.text+lxml": [
     "Real Title"
    ],
    "requests.text+parsel": [
     "Real Title"
    ],
    "requests.text+bs4": [
     "Real Title"
    ],
    "requests+apparent": [
     "Real Title"
    ],
    "crawlee.py(bs4)": [
     "Real Title"
    ],
    "crawlee.py(parsel)": [
     "Real Title"
    ],
    "lxml(bytes)": [
     "Real Title"
    ],
    "html5lib": [
     "Real Title"
    ],
    "bs4+dammit": [
     "Real Title"
    ],
    "selectolax(lexbor)": [
     "Real Title"
    ],
    "fetch.text+cheerio": [
     "Real Title"
    ],
    "crawlee(cheerio)": [
     "Real Title"
    ],
    "crawlee(jsdom)": [
     "Real Title"
    ],
    "jsdom(bytes)": [
     "Real Title"
    ],
    "jsoup(bytes)": [
     "Real Title"
    ],
    "jsoup(http-charset)": [
     "Real Title"
    ],
    "jdk-http.ofString+jsoup": [
     "Real Title"
    ],
    "regex scraper": [
     "Real Title"
    ],
    "playwright(chromium)": [
     "Real Title"
    ],
    "playwright(firefox)": [
     "Real Title"
    ],
    "playwright(webkit)": [
     "Real Title"
    ],
    "crawlee.py(playwright)": [
     "Real Title"
    ],
    "selenium(chrome)": [
     "Real Title"
    ],
    "selenium(chrome)+bs4": [
     "Real Title"
    ],
    "scrapy-playwright": [
     "Real Title"
    ],
    "puppeteer": [
     "Real Title"
    ],
    "crawlee(playwright)": [
     "Real Title"
    ],
    "crawlee(playwright+cheerio)": [
     "Real Title"
    ],
    "scrapy+w3lib-2.4.1": [
     "Real Title"
    ]
   },
   "id": "indented-bom",
   "title": "a U+FEFF preceded by whitespace",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "title::text",
   "mechanism": "normalization",
   "note": "parsel parses text.strip(), which PROMOTES the U+FEFF to offset 0 where libxml2 eats it as a BOM. On the raw bytes it is a character before the frame -> the head is lost",
   "nav": "iframe",
   "sha": "68dc8cadac567139",
   "size": 117,
   "browser": {
    "values": [
     "Real Title"
    ],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/vertical-tab",
   "readers": {
    "frostwork": [
     "Real Title"
    ],
    "scrapy": [
     "Real Title"
    ],
    "scrapy(w3lib+parsel)": [
     "Real Title"
    ],
    "parsel(body=)": [
     "Real Title"
    ],
    "requests.text+lxml": [
     "Real Title"
    ],
    "requests.text+parsel": [
     "Real Title"
    ],
    "requests.text+bs4": [
     "Real Title"
    ],
    "requests+apparent": [
     "Real Title"
    ],
    "crawlee.py(bs4)": [
     "Real Title"
    ],
    "crawlee.py(parsel)": [
     "Real Title"
    ],
    "lxml(bytes)": [
     "Real Title"
    ],
    "html5lib": [
     "ERR:ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or"
    ],
    "bs4+dammit": [
     "Real Title"
    ],
    "selectolax(lexbor)": [
     "Real Title"
    ],
    "fetch.text+cheerio": [
     "Real Title"
    ],
    "crawlee(cheerio)": [
     "Real Title"
    ],
    "crawlee(jsdom)": [
     "Real Title"
    ],
    "jsdom(bytes)": [
     "Real Title"
    ],
    "jsoup(bytes)": [
     "Real Title"
    ],
    "jsoup(http-charset)": [
     "Real Title"
    ],
    "jdk-http.ofString+jsoup": [
     "Real Title"
    ],
    "regex scraper": [
     "Real Title"
    ],
    "playwright(chromium)": [
     "Real Title"
    ],
    "playwright(firefox)": [
     "Real Title"
    ],
    "playwright(webkit)": [
     "Real Title"
    ],
    "crawlee.py(playwright)": [
     "Real Title"
    ],
    "selenium(chrome)": [
     "Real Title"
    ],
    "selenium(chrome)+bs4": [
     "Real Title"
    ],
    "scrapy-playwright": [
     "Real Title"
    ],
    "puppeteer": [
     "Real Title"
    ],
    "crawlee(playwright)": [
     "Real Title"
    ],
    "crawlee(playwright+cheerio)": [
     "Real Title"
    ],
    "scrapy+w3lib-2.4.1": [
     "Real Title"
    ]
   },
   "id": "vertical-tab",
   "title": "a leading VERTICAL TAB (0x0B)",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "title::text",
   "mechanism": "normalization",
   "note": "0x0B is whitespace to Python's str.strip() and NOT to libxml2 or HTML5",
   "nav": "iframe",
   "sha": "785b39252151fb42",
   "size": 103,
   "browser": {
    "values": [
     "Real Title"
    ],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/nul-split",
   "readers": {
    "frostwork": [],
    "scrapy": [
     "deleted-nul text"
    ],
    "scrapy(w3lib+parsel)": [
     "deleted-nul text"
    ],
    "parsel(body=)": [
     "deleted-nul text"
    ],
    "requests.text+lxml": [],
    "requests.text+parsel": [
     "deleted-nul text"
    ],
    "requests.text+bs4": [],
    "requests+apparent": [],
    "crawlee.py(bs4)": [],
    "crawlee.py(parsel)": [
     "deleted-nul text"
    ],
    "lxml(bytes)": [],
    "html5lib": [],
    "bs4+dammit": [],
    "selectolax(lexbor)": [],
    "fetch.text+cheerio": [],
    "crawlee(cheerio)": [],
    "crawlee(jsdom)": [],
    "jsdom(bytes)": [],
    "jsoup(bytes)": [],
    "jsoup(http-charset)": [],
    "jdk-http.ofString+jsoup": [],
    "regex scraper": [],
    "playwright(chromium)": [],
    "playwright(firefox)": [],
    "playwright(webkit)": [],
    "crawlee.py(playwright)": [],
    "selenium(chrome)": [],
    "selenium(chrome)+bs4": [],
    "scrapy-playwright": [],
    "puppeteer": [],
    "crawlee(playwright)": [],
    "crawlee(playwright+cheerio)": [],
    "scrapy+w3lib-2.4.1": [
     "deleted-nul text"
    ]
   },
   "id": "nul-split",
   "title": "a NUL inside a tag name",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "div::text",
   "mechanism": "normalization",
   "note": "parsel deletes NUL document-wide before parsing; HTML5 keeps it (U+FFFD in a tag name ends the name)",
   "nav": "iframe",
   "sha": "f4b3063803ce922a",
   "size": 90,
   "browser": {
    "values": [],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/iso2022jp",
   "readers": {
    "frostwork": [
     "社会"
    ],
    "scrapy": [
     "社会"
    ],
    "scrapy(w3lib+parsel)": [
     "社会"
    ],
    "parsel(body=)": [
     "社会"
    ],
    "requests.text+lxml": [
     "社会"
    ],
    "requests.text+parsel": [
     "社会"
    ],
    "requests.text+bs4": [
     "社会"
    ],
    "requests+apparent": [
     "社会"
    ],
    "crawlee.py(bs4)": [
     "社会"
    ],
    "crawlee.py(parsel)": [
     "社会"
    ],
    "lxml(bytes)": [
     "\u001b$B"
    ],
    "html5lib": [
     "社会"
    ],
    "bs4+dammit": [
     "社会"
    ],
    "selectolax(lexbor)": [
     "\u001b$B"
    ],
    "fetch.text+cheerio": [
     "\u001b$B"
    ],
    "crawlee(cheerio)": [
     "ERR:Error: Resource http://127.0.0.1:8765/c/case served with unsupported charset/"
    ],
    "crawlee(jsdom)": [
     "ERR:Error: Resource http://127.0.0.1:8765/c/case served with unsupported charset/"
    ],
    "jsdom(bytes)": [
     "社会"
    ],
    "jsoup(bytes)": [
     "\u001b$B"
    ],
    "jsoup(http-charset)": [
     "社会"
    ],
    "jdk-http.ofString+jsoup": [
     "社会"
    ],
    "regex scraper": [
     "社会"
    ],
    "playwright(chromium)": [
     "社会"
    ],
    "playwright(firefox)": [
     "社会"
    ],
    "playwright(webkit)": [
     "社会"
    ],
    "crawlee.py(playwright)": [
     "社会"
    ],
    "selenium(chrome)": [
     "社会"
    ],
    "selenium(chrome)+bs4": [
     "社会"
    ],
    "scrapy-playwright": [
     "社会"
    ],
    "puppeteer": [
     "社会"
    ],
    "crawlee(playwright)": [
     "社会"
    ],
    "crawlee(playwright+cheerio)": [
     "社会"
    ],
    "scrapy+w3lib-2.4.1": [
     "社会"
    ]
   },
   "id": "iso2022jp",
   "title": "ISO-2022-JP: the word 社会 is the bytes `<R2q`",
   "content_type": "text/html; charset=iso-2022-jp",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "tokenizer",
   "note": "ISO-2022-JP is NOT ASCII-compatible: inside ESC $ B a JIS pair is two bytes below 0x80, so a byte-scanning tokenizer grows a start tag out of the middle of a Japanese word",
   "nav": "iframe",
   "sha": "211d15c866fac2cc",
   "size": 78,
   "browser": {
    "values": [
     "社会"
    ],
    "charset": "ISO-2022-JP",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/noscript",
   "readers": {
    "frostwork": [],
    "scrapy": [
     "Out of stock"
    ],
    "scrapy(w3lib+parsel)": [
     "Out of stock"
    ],
    "parsel(body=)": [
     "Out of stock"
    ],
    "requests.text+lxml": [
     "Out of stock"
    ],
    "requests.text+parsel": [
     "Out of stock"
    ],
    "requests.text+bs4": [
     "Out of stock"
    ],
    "requests+apparent": [
     "Out of stock"
    ],
    "crawlee.py(bs4)": [
     "Out of stock"
    ],
    "crawlee.py(parsel)": [
     "Out of stock"
    ],
    "lxml(bytes)": [
     "Out of stock"
    ],
    "html5lib": [
     "Out of stock"
    ],
    "bs4+dammit": [
     "Out of stock"
    ],
    "selectolax(lexbor)": [
     "Out of stock"
    ],
    "fetch.text+cheerio": [],
    "crawlee(cheerio)": [
     "Out of stock"
    ],
    "crawlee(jsdom)": [
     "Out of stock"
    ],
    "jsdom(bytes)": [
     "Out of stock"
    ],
    "jsoup(bytes)": [
     "Out of stock"
    ],
    "jsoup(http-charset)": [
     "Out of stock"
    ],
    "jdk-http.ofString+jsoup": [
     "Out of stock"
    ],
    "regex scraper": [
     "Out of stock"
    ],
    "playwright(chromium)": [],
    "playwright(firefox)": [],
    "playwright(webkit)": [],
    "crawlee.py(playwright)": [],
    "selenium(chrome)": [],
    "selenium(chrome)+bs4": [
     "Out of stock"
    ],
    "scrapy-playwright": [
     "Out of stock"
    ],
    "puppeteer": [],
    "crawlee(playwright)": [],
    "crawlee(playwright+cheerio)": [],
    "scrapy+w3lib-2.4.1": [
     "Out of stock"
    ]
   },
   "id": "noscript",
   "title": "<noscript> is raw text only when scripting is ENABLED",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "structure",
   "note": "with scripting on (a browser) <noscript> is RAWTEXT and contains no elements; every scraper parses with scripting off and sees real markup",
   "nav": "iframe",
   "sha": "37a6ad52a0e0695e",
   "size": 126,
   "browser": {
    "values": [],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/template",
   "readers": {
    "frostwork": [],
    "scrapy": [
     "EUR 99.99"
    ],
    "scrapy(w3lib+parsel)": [
     "EUR 99.99"
    ],
    "parsel(body=)": [
     "EUR 99.99"
    ],
    "requests.text+lxml": [
     "EUR 99.99"
    ],
    "requests.text+parsel": [
     "EUR 99.99"
    ],
    "requests.text+bs4": [],
    "requests+apparent": [],
    "crawlee.py(bs4)": [],
    "crawlee.py(parsel)": [
     "EUR 99.99"
    ],
    "lxml(bytes)": [
     "EUR 99.99"
    ],
    "html5lib": [
     "EUR 99.99"
    ],
    "bs4+dammit": [],
    "selectolax(lexbor)": [],
    "fetch.text+cheerio": [
     "EUR 99.99"
    ],
    "crawlee(cheerio)": [
     "EUR 99.99"
    ],
    "crawlee(jsdom)": [],
    "jsdom(bytes)": [],
    "jsoup(bytes)": [
     "EUR 99.99"
    ],
    "jsoup(http-charset)": [
     "EUR 99.99"
    ],
    "jdk-http.ofString+jsoup": [
     "EUR 99.99"
    ],
    "regex scraper": [
     "EUR 99.99"
    ],
    "playwright(chromium)": [],
    "playwright(firefox)": [],
    "playwright(webkit)": [],
    "crawlee.py(playwright)": [],
    "selenium(chrome)": [],
    "selenium(chrome)+bs4": [],
    "scrapy-playwright": [
     "EUR 99.99"
    ],
    "puppeteer": [],
    "crawlee(playwright)": [],
    "crawlee(playwright+cheerio)": [
     "EUR 99.99"
    ],
    "scrapy+w3lib-2.4.1": [
     "EUR 99.99"
    ]
   },
   "id": "template",
   "title": "<template> content is a separate fragment",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "structure",
   "note": "a browser puts template children in a DocumentFragment, so querySelector/rendering never see them; lxml/parsel/bs4 treat them as ordinary descendants",
   "nav": "iframe",
   "sha": "9e0ffa980adabbfb",
   "size": 124,
   "browser": {
    "values": [],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/foster",
   "readers": {
    "frostwork": [],
    "scrapy": [
     "moved"
    ],
    "scrapy(w3lib+parsel)": [
     "moved"
    ],
    "parsel(body=)": [
     "moved"
    ],
    "requests.text+lxml": [
     "moved"
    ],
    "requests.text+parsel": [
     "moved"
    ],
    "requests.text+bs4": [
     "moved"
    ],
    "requests+apparent": [
     "moved"
    ],
    "crawlee.py(bs4)": [
     "moved"
    ],
    "crawlee.py(parsel)": [
     "moved"
    ],
    "lxml(bytes)": [
     "moved"
    ],
    "html5lib": [],
    "bs4+dammit": [
     "moved"
    ],
    "selectolax(lexbor)": [],
    "fetch.text+cheerio": [],
    "crawlee(cheerio)": [
     "moved"
    ],
    "crawlee(jsdom)": [],
    "jsdom(bytes)": [],
    "jsoup(bytes)": [],
    "jsoup(http-charset)": [],
    "jdk-http.ofString+jsoup": [],
    "regex scraper": [
     "ERR:unsupported by the naive reader"
    ],
    "playwright(chromium)": [],
    "playwright(firefox)": [],
    "playwright(webkit)": [],
    "crawlee.py(playwright)": [],
    "selenium(chrome)": [],
    "selenium(chrome)+bs4": [],
    "scrapy-playwright": [],
    "puppeteer": [],
    "crawlee(playwright)": [],
    "crawlee(playwright+cheerio)": [],
    "scrapy+w3lib-2.4.1": [
     "moved"
    ]
   },
   "id": "foster",
   "title": "foster parenting out of a <table>",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "table #t::text",
   "mechanism": "structure",
   "note": "HTML5 moves the <p> to BEFORE the table; libxml2 does not foster-parent, so it stays inside and `table p` matches there and nowhere else",
   "nav": "iframe",
   "sha": "49331325b9a15ba0",
   "size": 107,
   "browser": {
    "values": [],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/bogus-comment",
   "readers": {
    "frostwork": [
     "1,234",
     ".56"
    ],
    "scrapy": [
     "1,234",
     ".56"
    ],
    "scrapy(w3lib+parsel)": [
     "1,234",
     ".56"
    ],
    "parsel(body=)": [
     "1,234",
     ".56"
    ],
    "requests.text+lxml": [
     "1,234",
     ".56"
    ],
    "requests.text+parsel": [
     "1,234",
     ".56"
    ],
    "requests.text+bs4": [
     "1,234",
     "%",
     ".56"
    ],
    "requests+apparent": [
     "1,234",
     "%",
     ".56"
    ],
    "crawlee.py(bs4)": [
     "1,234",
     "%",
     ".56"
    ],
    "crawlee.py(parsel)": [
     "1,234",
     ".56"
    ],
    "lxml(bytes)": [
     "1,234",
     ".56"
    ],
    "html5lib": [
     "1,234",
     ".56"
    ],
    "bs4+dammit": [
     "1,234",
     "%",
     ".56"
    ],
    "selectolax(lexbor)": [
     "1,234",
     ".56"
    ],
    "fetch.text+cheerio": [
     "1,234",
     ".56"
    ],
    "crawlee(cheerio)": [
     "1,234",
     ".56"
    ],
    "crawlee(jsdom)": [
     "1,234",
     ".56"
    ],
    "jsdom(bytes)": [
     "1,234",
     ".56"
    ],
    "jsoup(bytes)": [
     "1,234",
     ".56"
    ],
    "jsoup(http-charset)": [
     "1,234",
     ".56"
    ],
    "jdk-http.ofString+jsoup": [
     "1,234",
     ".56"
    ],
    "regex scraper": [
     "1,234.56"
    ],
    "playwright(chromium)": [
     "1,234",
     ".56"
    ],
    "playwright(firefox)": [
     "1,234",
     ".56"
    ],
    "playwright(webkit)": [
     "1,234",
     ".56"
    ],
    "crawlee.py(playwright)": [
     "1,234",
     ".56"
    ],
    "selenium(chrome)": [
     "1,234",
     ".56"
    ],
    "selenium(chrome)+bs4": [
     "1,234",
     "%",
     ".56"
    ],
    "scrapy-playwright": [
     "1,234",
     ".56"
    ],
    "puppeteer": [
     "1,234",
     ".56"
    ],
    "crawlee(playwright)": [
     "1,234",
     ".56"
    ],
    "crawlee(playwright+cheerio)": [
     "1,234",
     ".56"
    ],
    "scrapy+w3lib-2.4.1": [
     "1,234",
     ".56"
    ]
   },
   "id": "bogus-comment",
   "title": "</%> is a bogus comment and SPLITS a text node",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "tokenizer",
   "note": "only an ASCII letter after `</` starts an end tag; `</%>` is a COMMENT node, so the text is two nodes. `</>` is ignored instead and splits nothing",
   "nav": "iframe",
   "sha": "9ff9e74f3441ea69",
   "size": 80,
   "browser": {
    "values": [
     "1,234",
     ".56"
    ],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/endtag-attr",
   "readers": {
    "frostwork": [
     "shown"
    ],
    "scrapy": [
     "shown"
    ],
    "scrapy(w3lib+parsel)": [
     "shown"
    ],
    "parsel(body=)": [
     "shown"
    ],
    "requests.text+lxml": [
     "shown"
    ],
    "requests.text+parsel": [
     "shown"
    ],
    "requests.text+bs4": [
     "shown"
    ],
    "requests+apparent": [
     "shown"
    ],
    "crawlee.py(bs4)": [
     "shown"
    ],
    "crawlee.py(parsel)": [
     "shown"
    ],
    "lxml(bytes)": [
     "shown"
    ],
    "html5lib": [
     "shown"
    ],
    "bs4+dammit": [
     "shown"
    ],
    "selectolax(lexbor)": [
     "shown"
    ],
    "fetch.text+cheerio": [
     "shown"
    ],
    "crawlee(cheerio)": [
     "shown",
     "hidden from real parsers"
    ],
    "crawlee(jsdom)": [
     "shown"
    ],
    "jsdom(bytes)": [
     "shown"
    ],
    "jsoup(bytes)": [
     "shown"
    ],
    "jsoup(http-charset)": [
     "shown"
    ],
    "jdk-http.ofString+jsoup": [
     "shown"
    ],
    "regex scraper": [
     "shown",
     "hidden from real parsers"
    ],
    "playwright(chromium)": [
     "shown"
    ],
    "playwright(firefox)": [
     "shown"
    ],
    "playwright(webkit)": [
     "shown"
    ],
    "crawlee.py(playwright)": [
     "shown"
    ],
    "selenium(chrome)": [
     "shown"
    ],
    "selenium(chrome)+bs4": [
     "shown"
    ],
    "scrapy-playwright": [
     "shown"
    ],
    "puppeteer": [
     "shown"
    ],
    "crawlee(playwright)": [
     "shown"
    ],
    "crawlee(playwright+cheerio)": [
     "shown"
    ],
    "scrapy+w3lib-2.4.1": [
     "shown"
    ]
   },
   "id": "endtag-attr",
   "title": "an end tag has a start tag's attribute states",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "#t::text",
   "mechanism": "tokenizer",
   "note": "the unterminated quoted value in an END tag runs to the next quote, swallowing every byte between. A `scan a name, skip to >` reader keeps markup no browser has",
   "nav": "iframe",
   "sha": "875f6eb2d57ea47a",
   "size": 144,
   "browser": {
    "values": [
     "shown"
    ],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/truncated-tag",
   "readers": {
    "frostwork": [],
    "scrapy": [],
    "scrapy(w3lib+parsel)": [],
    "parsel(body=)": [],
    "requests.text+lxml": [],
    "requests.text+parsel": [],
    "requests.text+bs4": [],
    "requests+apparent": [],
    "crawlee.py(bs4)": [],
    "crawlee.py(parsel)": [],
    "lxml(bytes)": [],
    "html5lib": [],
    "bs4+dammit": [],
    "selectolax(lexbor)": [],
    "fetch.text+cheerio": [],
    "crawlee(cheerio)": [],
    "crawlee(jsdom)": [],
    "jsdom(bytes)": [],
    "jsoup(bytes)": [],
    "jsoup(http-charset)": [],
    "jdk-http.ofString+jsoup": [],
    "regex scraper": [],
    "playwright(chromium)": [],
    "playwright(firefox)": [],
    "playwright(webkit)": [],
    "crawlee.py(playwright)": [],
    "selenium(chrome)": [],
    "selenium(chrome)+bs4": [],
    "scrapy-playwright": [],
    "puppeteer": [],
    "crawlee(playwright)": [],
    "crawlee(playwright+cheerio)": [],
    "scrapy+w3lib-2.4.1": []
   },
   "id": "truncated-tag",
   "title": "a start tag the response ends inside",
   "content_type": "text/html",
   "declares_content_type": false,
   "selector": "a::attr(data-junk)",
   "mechanism": "tokenizer",
   "note": "libxml2 and html5lib DROP the incomplete tag whole; keeping the attributes scanned so far reports an element holding the rest of the document",
   "nav": "iframe",
   "sha": "e0672c0753d48db3",
   "size": 74,
   "browser": {
    "values": [],
    "charset": "UTF-8",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/demo-price",
   "readers": {
    "frostwork": [
     "2.499,00 €"
    ],
    "scrapy": [
     "1.099,00 €",
     "2.499,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.099,00 €",
     "2.499,00 €"
    ],
    "parsel(body=)": [
     "1.099,00 ",
     "2.499,00 "
    ],
    "requests.text+lxml": [
     "1.099,00 ",
     "2.499,00 "
    ],
    "requests.text+parsel": [
     "1.099,00 ",
     "2.499,00 "
    ],
    "requests.text+bs4": [
     "2.499,00 "
    ],
    "requests+apparent": [
     "2.499,00 €"
    ],
    "crawlee.py(bs4)": [
     "2.499,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.099,00 €",
     "2.499,00 €"
    ],
    "lxml(bytes)": [
     "1.099,00 ",
     "2.499,00 "
    ],
    "html5lib": [
     "1.099,00 €",
     "2.499,00 €"
    ],
    "bs4+dammit": [
     "2.499,00 "
    ],
    "selectolax(lexbor)": [
     "2.499,00 �"
    ],
    "fetch.text+cheerio": [
     "1.099,00 �",
     "2.499,00 �"
    ],
    "crawlee(cheerio)": [
     "1.099,00 ",
     "2.499,00 "
    ],
    "crawlee(jsdom)": [
     "2.499,00 Â€"
    ],
    "jsdom(bytes)": [
     "2.499,00 €"
    ],
    "jsoup(bytes)": [
     "1.099,00 �",
     "2.499,00 �"
    ],
    "jsoup(http-charset)": [
     "1.099,00 ",
     "2.499,00 "
    ],
    "jdk-http.ofString+jsoup": [
     "1.099,00 ",
     "2.499,00 "
    ],
    "regex scraper": [
     "1.099,00 ",
     "2.499,00 "
    ],
    "playwright(chromium)": [
     "2.499,00 €"
    ],
    "playwright(firefox)": [
     "2.499,00 €"
    ],
    "playwright(webkit)": [
     "2.499,00 €"
    ],
    "crawlee.py(playwright)": [
     "2.499,00 €"
    ],
    "selenium(chrome)": [
     "2.499,00 €"
    ],
    "selenium(chrome)+bs4": [
     "2.499,00 €"
    ],
    "scrapy-playwright": [
     "1.099,00 €",
     "2.499,00 €"
    ],
    "puppeteer": [
     "2.499,00 €"
    ],
    "crawlee(playwright)": [
     "2.499,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.099,00 €",
     "2.499,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.099,00 €",
     "2.499,00 €"
    ]
   },
   "id": "demo-price",
   "title": "product page: a <template> price, an iso-8859-1 label and a <noscript>",
   "content_type": "text/html; charset=iso-8859-1",
   "declares_content_type": true,
   "selector": ".price::text",
   "mechanism": "assembled",
   "note": "template decoy + iso-8859-1 label + noscript, in one realistic page",
   "nav": "iframe",
   "sha": "351106e80ccc4622",
   "size": 520,
   "browser": {
    "values": [
     "2.499,00 €"
    ],
    "charset": "windows-1252",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/demo-range",
   "readers": {
    "frostwork": [
     "1.999–2.499"
    ],
    "scrapy": [
     "1.999–2.499"
    ],
    "scrapy(w3lib+parsel)": [
     "1.999–2.499"
    ],
    "parsel(body=)": [
     "1.9992.499"
    ],
    "requests.text+lxml": [
     "1.9992.499"
    ],
    "requests.text+parsel": [
     "1.9992.499"
    ],
    "requests.text+bs4": [
     "1.9992.499"
    ],
    "requests+apparent": [
     "1.999–2.499"
    ],
    "crawlee.py(bs4)": [
     "1.999–2.499"
    ],
    "crawlee.py(parsel)": [
     "1.999–2.499"
    ],
    "lxml(bytes)": [
     "1.9992.499"
    ],
    "html5lib": [
     "1.999–2.499"
    ],
    "bs4+dammit": [
     "1.9992.499"
    ],
    "selectolax(lexbor)": [
     "1.999�2.499"
    ],
    "fetch.text+cheerio": [
     "1.999�2.499"
    ],
    "crawlee(cheerio)": [
     "1.9992.499"
    ],
    "crawlee(jsdom)": [
     "1.999Â–2.499"
    ],
    "jsdom(bytes)": [
     "1.999–2.499"
    ],
    "jsoup(bytes)": [
     "1.999�2.499"
    ],
    "jsoup(http-charset)": [
     "1.9992.499"
    ],
    "jdk-http.ofString+jsoup": [
     "1.9992.499"
    ],
    "regex scraper": [
     "1.9992.499"
    ],
    "playwright(chromium)": [
     "1.999–2.499"
    ],
    "playwright(firefox)": [
     "1.999–2.499"
    ],
    "playwright(webkit)": [
     "1.999–2.499"
    ],
    "crawlee.py(playwright)": [
     "1.999–2.499"
    ],
    "selenium(chrome)": [
     "1.999–2.499"
    ],
    "selenium(chrome)+bs4": [
     "1.999–2.499"
    ],
    "scrapy-playwright": [
     "1.999–2.499"
    ],
    "puppeteer": [
     "1.999–2.499"
    ],
    "crawlee(playwright)": [
     "1.999–2.499"
    ],
    "crawlee(playwright+cheerio)": [
     "1.999–2.499"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.999–2.499"
    ]
   },
   "id": "demo-range",
   "title": "product page: a price range joined by 0x96",
   "content_type": "text/html; charset=iso-8859-1",
   "declares_content_type": true,
   "selector": ".range::text",
   "mechanism": "assembled",
   "note": "template decoy + iso-8859-1 label + noscript, in one realistic page",
   "nav": "iframe",
   "sha": "351106e80ccc4622",
   "size": 520,
   "browser": {
    "values": [
     "1.999–2.499"
    ],
    "charset": "windows-1252",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/demo-stock",
   "readers": {
    "frostwork": [
     "In stock"
    ],
    "scrapy": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "scrapy(w3lib+parsel)": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "parsel(body=)": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "requests.text+lxml": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "requests.text+parsel": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "requests.text+bs4": [
     "In stock",
     "Out of stock"
    ],
    "requests+apparent": [
     "In stock",
     "Out of stock"
    ],
    "crawlee.py(bs4)": [
     "In stock",
     "Out of stock"
    ],
    "crawlee.py(parsel)": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "lxml(bytes)": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "html5lib": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "bs4+dammit": [
     "In stock",
     "Out of stock"
    ],
    "selectolax(lexbor)": [
     "In stock",
     "Out of stock"
    ],
    "fetch.text+cheerio": [
     "In stock",
     "In stock"
    ],
    "crawlee(cheerio)": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "crawlee(jsdom)": [
     "In stock",
     "Out of stock"
    ],
    "jsdom(bytes)": [
     "In stock",
     "Out of stock"
    ],
    "jsoup(bytes)": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "jsoup(http-charset)": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "jdk-http.ofString+jsoup": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "regex scraper": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "playwright(chromium)": [
     "In stock"
    ],
    "playwright(firefox)": [
     "In stock"
    ],
    "playwright(webkit)": [
     "In stock"
    ],
    "crawlee.py(playwright)": [
     "In stock"
    ],
    "selenium(chrome)": [
     "In stock"
    ],
    "selenium(chrome)+bs4": [
     "In stock",
     "Out of stock"
    ],
    "scrapy-playwright": [
     "In stock",
     "In stock",
     "Out of stock"
    ],
    "puppeteer": [
     "In stock"
    ],
    "crawlee(playwright)": [
     "In stock"
    ],
    "crawlee(playwright+cheerio)": [
     "In stock",
     "In stock"
    ],
    "scrapy+w3lib-2.4.1": [
     "In stock",
     "In stock",
     "Out of stock"
    ]
   },
   "id": "demo-stock",
   "title": "product page: stock level, with a second one in <noscript>",
   "content_type": "text/html; charset=iso-8859-1",
   "declares_content_type": true,
   "selector": ".stock::text",
   "mechanism": "assembled",
   "note": "template decoy + iso-8859-1 label + noscript, in one realistic page",
   "nav": "iframe",
   "sha": "351106e80ccc4622",
   "size": 520,
   "browser": {
    "values": [
     "In stock"
    ],
    "charset": "windows-1252",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/fake-price",
   "readers": {
    "frostwork": [
     "1­2­99,00 €"
    ],
    "scrapy": [
     "1­2­99,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1­2­99,00 €"
    ],
    "parsel(body=)": [
     "1�2�99,00 �"
    ],
    "requests.text+lxml": [
     "1­2­99,00 "
    ],
    "requests.text+parsel": [
     "1­2­99,00 "
    ],
    "requests.text+bs4": [
     "1­2­99,00 "
    ],
    "requests+apparent": [
     "1¡2¡99,00 Ç"
    ],
    "crawlee.py(bs4)": [
     "1­2­99,00 €"
    ],
    "crawlee.py(parsel)": [
     "1­2­99,00 €"
    ],
    "lxml(bytes)": [
     "1­2­99,00 €"
    ],
    "html5lib": [
     "1­2­99,00 €"
    ],
    "bs4+dammit": [
     "1¡2¡99,00 Ç"
    ],
    "selectolax(lexbor)": [
     "1­2­99,00 €"
    ],
    "fetch.text+cheerio": [
     "1�2�99,00 �"
    ],
    "crawlee(cheerio)": [
     "1�2�99,00 �"
    ],
    "crawlee(jsdom)": [
     "1­2­99,00 €"
    ],
    "jsdom(bytes)": [
     "1­2­99,00 €"
    ],
    "jsoup(bytes)": [
     "1­2­99,00 €"
    ],
    "jsoup(http-charset)": [
     "1­2­99,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1�2�99,00 �"
    ],
    "regex scraper": [
     "1�2�99,00 �"
    ],
    "playwright(chromium)": [
     "1­2­99,00 €"
    ],
    "playwright(firefox)": [
     "1­2­99,00 €"
    ],
    "playwright(webkit)": [
     "1­2­99,00 €"
    ],
    "crawlee.py(playwright)": [
     "1­2­99,00 €"
    ],
    "selenium(chrome)": [
     "1­2­99,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1­2­99,00 €"
    ],
    "scrapy-playwright": [
     "1­2­99,00 €"
    ],
    "puppeteer": [
     "1­2­99,00 €"
    ],
    "crawlee(playwright)": [
     "1­2­99,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1­2­99,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1񩻱9,00 �"
    ]
   },
   "id": "fake-price",
   "title": "a commented-out gb18030 <meta> and soft hyphens inside a price",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": ".price::text",
   "mechanism": "assembled",
   "note": "gb18030 4-byte form swallows two digits that windows-1252 renders as invisible soft hyphens; a commented-out <meta charset> steers w3lib away from the browser's answer",
   "nav": "iframe",
   "sha": "382efab060c8fc67",
   "size": 331,
   "browser": {
    "values": [
     "1­2­99,00 €"
    ],
    "charset": "windows-1252",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/fake-rating",
   "readers": {
    "frostwork": [
     "4,­9­1"
    ],
    "scrapy": [
     "4,­9­1"
    ],
    "scrapy(w3lib+parsel)": [
     "4,­9­1"
    ],
    "parsel(body=)": [
     "4,�9�1"
    ],
    "requests.text+lxml": [
     "4,­9­1"
    ],
    "requests.text+parsel": [
     "4,­9­1"
    ],
    "requests.text+bs4": [
     "4,­9­1"
    ],
    "requests+apparent": [
     "4,¡9¡1"
    ],
    "crawlee.py(bs4)": [
     "4,­9­1"
    ],
    "crawlee.py(parsel)": [
     "4,­9­1"
    ],
    "lxml(bytes)": [
     "4,­9­1"
    ],
    "html5lib": [
     "4,­9­1"
    ],
    "bs4+dammit": [
     "4,¡9¡1"
    ],
    "selectolax(lexbor)": [
     "4,­9­1"
    ],
    "fetch.text+cheerio": [
     "4,�9�1"
    ],
    "crawlee(cheerio)": [
     "4,�9�1"
    ],
    "crawlee(jsdom)": [
     "4,­9­1"
    ],
    "jsdom(bytes)": [
     "4,­9­1"
    ],
    "jsoup(bytes)": [
     "4,­9­1"
    ],
    "jsoup(http-charset)": [
     "4,­9­1"
    ],
    "jdk-http.ofString+jsoup": [
     "4,�9�1"
    ],
    "regex scraper": [
     "4,�9�1"
    ],
    "playwright(chromium)": [
     "4,­9­1"
    ],
    "playwright(firefox)": [
     "4,­9­1"
    ],
    "playwright(webkit)": [
     "4,­9­1"
    ],
    "crawlee.py(playwright)": [
     "4,­9­1"
    ],
    "selenium(chrome)": [
     "4,­9­1"
    ],
    "selenium(chrome)+bs4": [
     "4,­9­1"
    ],
    "scrapy-playwright": [
     "4,­9­1"
    ],
    "puppeteer": [
     "4,­9­1"
    ],
    "crawlee(playwright)": [
     "4,­9­1"
    ],
    "crawlee(playwright+cheerio)": [
     "4,­9­1"
    ],
    "scrapy+w3lib-2.4.1": [
     "4,񬅝"
    ]
   },
   "id": "fake-rating",
   "title": "the same trick inside a star rating",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": ".rating::text",
   "mechanism": "assembled",
   "note": "gb18030 4-byte form swallows two digits that windows-1252 renders as invisible soft hyphens; a commented-out <meta charset> steers w3lib away from the browser's answer",
   "nav": "iframe",
   "sha": "382efab060c8fc67",
   "size": 331,
   "browser": {
    "values": [
     "4,­9­1"
    ],
    "charset": "windows-1252",
    "nav": "iframe",
    "build": "Chrome/148",
    "locale": null
   }
  },
  {
   "url": "/c/late-meta-1k",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 €"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 €"
    ],
    "lxml(bytes)": [
     "1.299,00 €"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 €"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 €"
    ],
    "jsdom(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "late-meta-1k",
   "title": "<meta charset> in the head, after a 900-byte comment",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "the same declaration, pushed progressively deeper behind a comment",
   "nav": "top-level",
   "sha": "3668b9222084ca28",
   "size": 1013,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "ISO-8859-15",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/late-meta-4k",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 �"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 �"
    ],
    "lxml(bytes)": [
     "1.299,00 €"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "late-meta-4k",
   "title": "<meta charset> in the head, after a 4,200-byte comment",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "the same declaration, pushed progressively deeper behind a comment",
   "nav": "top-level",
   "sha": "0e8317d1534ec8ae",
   "size": 4313,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "ISO-8859-15",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/late-meta-16k",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 ¤"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 ¤"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 �"
    ],
    "lxml(bytes)": [
     "1.299,00 €"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 ¤"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 �"
    ],
    "jsoup(http-charset)": [
     "1.299,00 �"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 ¤"
    ]
   },
   "id": "late-meta-16k",
   "title": "<meta charset> in the head, after a 16,384-byte comment",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "the same declaration, pushed progressively deeper behind a comment",
   "nav": "top-level",
   "sha": "b48950e9e6ea8610",
   "size": 16497,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "ISO-8859-15",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/late-meta-64k",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 ¤"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 ¤"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 �"
    ],
    "lxml(bytes)": [
     "1.299,00 €"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 ¤"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 �"
    ],
    "jsoup(http-charset)": [
     "1.299,00 �"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 ¤"
    ]
   },
   "id": "late-meta-64k",
   "title": "<meta charset> in the head, after a 65,536-byte comment",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "the same declaration, pushed progressively deeper behind a comment",
   "nav": "top-level",
   "sha": "fde12a141901f21c",
   "size": 65649,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "ISO-8859-15",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/late-meta-256k",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 ¤"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 ¤"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 �"
    ],
    "lxml(bytes)": [
     "1.299,00 €"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 ¤"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 �"
    ],
    "jsoup(http-charset)": [
     "1.299,00 �"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 ¤"
    ]
   },
   "id": "late-meta-256k",
   "title": "<meta charset> in the head, after a 262,144-byte comment",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "the same declaration, pushed progressively deeper behind a comment",
   "nav": "top-level",
   "sha": "d140c39a7da5f9d0",
   "size": 262257,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "ISO-8859-15",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/late-meta-1m",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 ¤"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 ¤"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 �"
    ],
    "lxml(bytes)": [
     "1.299,00 €"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 ¤"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 �"
    ],
    "jsoup(http-charset)": [
     "1.299,00 �"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 ¤"
    ]
   },
   "id": "late-meta-1m",
   "title": "<meta charset> in the head, after a 1,048,576-byte comment",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "the same declaration, pushed progressively deeper behind a comment",
   "nav": "top-level",
   "sha": "13aacdec6475eb8c",
   "size": 1048689,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "ISO-8859-15",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/body-meta-0",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 €"
    ],
    "lxml(bytes)": [
     "1.299,00 ¤"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 €"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 €"
    ],
    "jsdom(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "body-meta-0",
   "title": "<meta charset> in the body, straight after the text it decodes",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "a declaration in the BODY, behind increasing amounts of real content",
   "nav": "top-level",
   "sha": "fd8b7a22f47f631c",
   "size": 122,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "ISO-8859-15",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/body-meta-100",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 €"
    ],
    "lxml(bytes)": [
     "1.299,00 ¤"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 €"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 €"
    ],
    "jsdom(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "body-meta-100",
   "title": "<meta charset> in the body, after 90 bytes of content",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "a declaration in the BODY, behind increasing amounts of real content",
   "nav": "top-level",
   "sha": "41c481605045e6bb",
   "size": 212,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "ISO-8859-15",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/body-meta-512",
   "readers": {
    "frostwork": [
     "1.299,00 €"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 €"
    ],
    "lxml(bytes)": [
     "1.299,00 ¤"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 €"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 €"
    ],
    "jsdom(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 €"
    ],
    "playwright(firefox)": [
     "1.299,00 €"
    ],
    "playwright(webkit)": [
     "1.299,00 €"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 €"
    ],
    "selenium(chrome)": [
     "1.299,00 €"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 €"
    ],
    "scrapy-playwright": [
     "1.299,00 €"
    ],
    "puppeteer": [
     "1.299,00 €"
    ],
    "crawlee(playwright)": [
     "1.299,00 €"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 €"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "body-meta-512",
   "title": "<meta charset> in the body, after 495 bytes of content",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "a declaration in the BODY, behind increasing amounts of real content",
   "nav": "top-level",
   "sha": "52ddf0d71ffa380c",
   "size": 617,
   "browser": {
    "values": [
     "1.299,00 €"
    ],
    "charset": "ISO-8859-15",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/body-meta-1k",
   "readers": {
    "frostwork": [
     "1.299,00 ¤"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 €"
    ],
    "lxml(bytes)": [
     "1.299,00 ¤"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 ¤"
    ],
    "playwright(firefox)": [
     "1.299,00 ¤"
    ],
    "playwright(webkit)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 ¤"
    ],
    "scrapy-playwright": [
     "1.299,00 ¤"
    ],
    "puppeteer": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright)": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 ¤"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "body-meta-1k",
   "title": "<meta charset> in the body, after 1,035 bytes of content",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "a declaration in the BODY, behind increasing amounts of real content",
   "nav": "top-level",
   "sha": "0b056b16c2c2705d",
   "size": 1157,
   "browser": {
    "values": [
     "1.299,00 ¤"
    ],
    "charset": "windows-1252",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/body-meta-2k",
   "readers": {
    "frostwork": [
     "1.299,00 ¤"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 €"
    ],
    "lxml(bytes)": [
     "1.299,00 ¤"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 ¤"
    ],
    "playwright(firefox)": [
     "1.299,00 ¤"
    ],
    "playwright(webkit)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 ¤"
    ],
    "scrapy-playwright": [
     "1.299,00 ¤"
    ],
    "puppeteer": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright)": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 ¤"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "body-meta-2k",
   "title": "<meta charset> in the body, after 2,070 bytes of content",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "a declaration in the BODY, behind increasing amounts of real content",
   "nav": "top-level",
   "sha": "5d2118f0236e2fe0",
   "size": 2192,
   "browser": {
    "values": [
     "1.299,00 ¤"
    ],
    "charset": "windows-1252",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/body-meta-3k",
   "readers": {
    "frostwork": [
     "1.299,00 ¤"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 €"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 €"
    ],
    "lxml(bytes)": [
     "1.299,00 ¤"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 ¤"
    ],
    "playwright(firefox)": [
     "1.299,00 ¤"
    ],
    "playwright(webkit)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 ¤"
    ],
    "scrapy-playwright": [
     "1.299,00 ¤"
    ],
    "puppeteer": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright)": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 ¤"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "body-meta-3k",
   "title": "<meta charset> in the body, after 3,105 bytes of content",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "a declaration in the BODY, behind increasing amounts of real content",
   "nav": "top-level",
   "sha": "e51d2f3474747892",
   "size": 3227,
   "browser": {
    "values": [
     "1.299,00 ¤"
    ],
    "charset": "windows-1252",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/body-meta-4k",
   "readers": {
    "frostwork": [
     "1.299,00 ¤"
    ],
    "scrapy": [
     "1.299,00 €"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 €"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 �"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 �"
    ],
    "lxml(bytes)": [
     "1.299,00 ¤"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 €"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 €"
    ],
    "jsoup(http-charset)": [
     "1.299,00 €"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 ¤"
    ],
    "playwright(firefox)": [
     "1.299,00 ¤"
    ],
    "playwright(webkit)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 ¤"
    ],
    "scrapy-playwright": [
     "1.299,00 ¤"
    ],
    "puppeteer": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright)": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 ¤"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 €"
    ]
   },
   "id": "body-meta-4k",
   "title": "<meta charset> in the body, after 4,185 bytes of content",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "a declaration in the BODY, behind increasing amounts of real content",
   "nav": "top-level",
   "sha": "28e1c46e1d1bcd59",
   "size": 4307,
   "browser": {
    "values": [
     "1.299,00 ¤"
    ],
    "charset": "windows-1252",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/body-meta-64k",
   "readers": {
    "frostwork": [
     "1.299,00 ¤"
    ],
    "scrapy": [
     "1.299,00 ¤"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 ¤"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 �"
    ],
    "lxml(bytes)": [
     "1.299,00 ¤"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 ¤"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 �"
    ],
    "jsoup(http-charset)": [
     "1.299,00 �"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 ¤"
    ],
    "playwright(firefox)": [
     "1.299,00 ¤"
    ],
    "playwright(webkit)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)": [
     "1.299,00 ¤"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 ¤"
    ],
    "scrapy-playwright": [
     "1.299,00 ¤"
    ],
    "puppeteer": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright)": [
     "1.299,00 ¤"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 ¤"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 ¤"
    ]
   },
   "id": "body-meta-64k",
   "title": "<meta charset> in the body, after 67,005 bytes of content",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "a declaration in the BODY, behind increasing amounts of real content",
   "nav": "top-level",
   "sha": "a8a84b3c4d6b0543",
   "size": 67127,
   "browser": {
    "values": [
     "1.299,00 ¤"
    ],
    "charset": "windows-1252",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  },
  {
   "url": "/c/body-meta-512k",
   "readers": {
    "frostwork": [
     "1.299,00 ¤"
    ],
    "scrapy": [
     "1.299,00 ¤"
    ],
    "scrapy(w3lib+parsel)": [
     "1.299,00 �"
    ],
    "parsel(body=)": [
     "1.299,00 �"
    ],
    "requests.text+lxml": [
     "1.299,00 ¤"
    ],
    "requests.text+parsel": [
     "1.299,00 ¤"
    ],
    "requests.text+bs4": [
     "1.299,00 ¤"
    ],
    "requests+apparent": [
     "1.299,00 ¤"
    ],
    "crawlee.py(bs4)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(parsel)": [
     "1.299,00 �"
    ],
    "lxml(bytes)": [
     "1.299,00 ¤"
    ],
    "html5lib": [
     "1.299,00 €"
    ],
    "bs4+dammit": [
     "1.299,00 ¤"
    ],
    "selectolax(lexbor)": [
     "1.299,00 �"
    ],
    "fetch.text+cheerio": [
     "1.299,00 �"
    ],
    "crawlee(cheerio)": [
     "1.299,00 �"
    ],
    "crawlee(jsdom)": [
     "1.299,00 ¤"
    ],
    "jsdom(bytes)": [
     "1.299,00 ¤"
    ],
    "jsoup(bytes)": [
     "1.299,00 �"
    ],
    "jsoup(http-charset)": [
     "1.299,00 �"
    ],
    "jdk-http.ofString+jsoup": [
     "1.299,00 �"
    ],
    "regex scraper": [
     "1.299,00 �"
    ],
    "playwright(chromium)": [
     "1.299,00 ค"
    ],
    "playwright(firefox)": [
     "1.299,00 ¤"
    ],
    "playwright(webkit)": [
     "1.299,00 ¤"
    ],
    "crawlee.py(playwright)": [
     "1.299,00 ค"
    ],
    "selenium(chrome)": [
     "1.299,00 ค"
    ],
    "selenium(chrome)+bs4": [
     "1.299,00 ค"
    ],
    "scrapy-playwright": [
     "1.299,00 ค"
    ],
    "puppeteer": [
     "1.299,00 ค"
    ],
    "crawlee(playwright)": [
     "1.299,00 ค"
    ],
    "crawlee(playwright+cheerio)": [
     "1.299,00 ค"
    ],
    "scrapy+w3lib-2.4.1": [
     "1.299,00 ¤"
    ]
   },
   "id": "body-meta-512k",
   "title": "<meta charset> in the body, after 536,175 bytes of content",
   "content_type": "text/html",
   "declares_content_type": true,
   "selector": "#t::text",
   "mechanism": "assembled",
   "note": "a declaration in the BODY, behind increasing amounts of real content",
   "nav": "top-level",
   "sha": "5b022c195bd676a6",
   "size": 536297,
   "browser": {
    "values": [
     "1.299,00 ค"
    ],
    "charset": "windows-874",
    "nav": "top-level",
    "build": "Chrome/156.0.8078.80",
    "locale": "en-GB"
   }
  }
 ],
 "held_back": {
  "late-meta": "decoy target is the fallback encoding",
  "past-4096": "decoy target is the fallback encoding",
  "invalid-then-valid": "decoy target is the fallback encoding",
  "x-user-defined": "rewrite target is windows-1252 by definition; the note must say so"
 }
}