Metadata-Version: 2.4
Name: graph-crawler
Version: 5.4.3
Summary: Web crawler that builds a graph of a site. HTTP → TLS → browser escalation with pluggable browser engines.
Author: 0-EternalJunior-0
Maintainer: 0-EternalJunior-0
License-Expression: MIT
Project-URL: Homepage, https://gitlab.com/demoprogrammer/web_graf
Project-URL: Documentation, https://gitlab.com/demoprogrammer/web_graf/-/blob/main/web_graf/README.md
Project-URL: Repository, https://gitlab.com/demoprogrammer/web_graf
Project-URL: Changelog, https://gitlab.com/demoprogrammer/web_graf/-/blob/main/web_graf/CHANGELOG.md
Project-URL: Bug Tracker, https://gitlab.com/demoprogrammer/web_graf/-/issues
Keywords: web,crawler,scraper,graph,spider,playwright,anti-bot,tls-fingerprint
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiohttp>=3.13.0
Requires-Dist: backports.zstd>=1.6.0; python_version < "3.14"
Requires-Dist: Brotli
Requires-Dist: selectolax<1.0.0,>=0.4.0
Requires-Dist: defusedxml>=0.7.0
Requires-Dist: pydantic>=2.12.0
Requires-Dist: orjson>=3.11.0
Requires-Dist: aiofiles>=24.1.0
Requires-Dist: aiosqlite>=0.20.0
Requires-Dist: typing_extensions>=4.5; python_version < "3.12"
Requires-Dist: xxhash>=3.0.0
Requires-Dist: resilix<2,>=1.1
Provides-Extra: native
Requires-Dist: cython>=3.0.0; extra == "native"
Requires-Dist: mmh3>=5.0.0; extra == "native"
Provides-Extra: browser
Requires-Dist: playwright>=1.58.0; extra == "browser"
Provides-Extra: playwright
Requires-Dist: graph-crawler[browser]; extra == "playwright"
Provides-Extra: tls
Requires-Dist: curl_cffi>=0.7; extra == "tls"
Provides-Extra: stealth
Requires-Dist: patchright>=1.52; extra == "stealth"
Requires-Dist: playwright-stealth>=1.0; extra == "stealth"
Provides-Extra: cloak
Requires-Dist: cloakbrowser>=0.5; extra == "cloak"
Requires-Dist: playwright>=1.58.0; extra == "cloak"
Provides-Extra: undetected
Requires-Dist: nodriver>=0.38; extra == "undetected"
Provides-Extra: antidetect
Requires-Dist: graph-crawler[browser,cloak,stealth,tls,undetected]; extra == "antidetect"
Provides-Extra: server
Requires-Dist: fastapi>=0.135.0; extra == "server"
Requires-Dist: uvicorn>=0.30; extra == "server"
Requires-Dist: websockets>=13; extra == "server"
Provides-Extra: text
Requires-Dist: tiktoken>=0.13.0; extra == "text"
Requires-Dist: stop-words>=2018.7.23; extra == "text"
Provides-Extra: captcha
Provides-Extra: mongodb
Requires-Dist: pymongo[srv]>=4.9.0; extra == "mongodb"
Provides-Extra: postgresql
Requires-Dist: asyncpg>=0.30.0; extra == "postgresql"
Provides-Extra: newspaper
Requires-Dist: newspaper3k>=0.2.8; extra == "newspaper"
Provides-Extra: goose
Requires-Dist: goose3>=3.1.0; extra == "goose"
Provides-Extra: readability
Requires-Dist: readability-lxml>=0.8.0; extra == "readability"
Provides-Extra: markdown
Requires-Dist: html2md-clean>=0.5.0; extra == "markdown"
Requires-Dist: markdown-it-py>=4.0.0; extra == "markdown"
Provides-Extra: sitemap-fast
Requires-Dist: lxml>=5.1.0; extra == "sitemap-fast"
Provides-Extra: articles
Requires-Dist: newspaper3k>=0.2.8; extra == "articles"
Requires-Dist: goose3>=3.1.0; extra == "articles"
Requires-Dist: readability-lxml>=0.8.0; extra == "articles"
Provides-Extra: viz
Requires-Dist: pyvis>=0.3.0; extra == "viz"
Requires-Dist: networkx>=3.6; extra == "viz"
Provides-Extra: celery
Requires-Dist: celery>=5.5.0; extra == "celery"
Requires-Dist: redis>=5.2.0; extra == "celery"
Provides-Extra: performance
Requires-Dist: aiodns>=3.6.0; extra == "performance"
Requires-Dist: uvloop>=0.22.0; platform_system != "Windows" and extra == "performance"
Provides-Extra: fuzzy
Requires-Dist: rapidfuzz>=3.6.0; extra == "fuzzy"
Provides-Extra: dev
Requires-Dist: pytest>=9.0.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.24.0; extra == "dev"
Requires-Dist: pytest-cov>=7.0.0; extra == "dev"
Requires-Dist: black>=24.0.0; extra == "dev"
Requires-Dist: ruff>=0.8.0; extra == "dev"
Requires-Dist: mypy>=1.13.0; extra == "dev"
Requires-Dist: psutil; extra == "dev"
Requires-Dist: rapidfuzz>=3.6.0; extra == "dev"
Requires-Dist: pytest-timeout>=2.3.0; extra == "dev"
Requires-Dist: pytest-xdist>=3.5.0; extra == "dev"
Requires-Dist: build>=1.2.0; extra == "dev"
Requires-Dist: twine>=5.0.0; extra == "dev"
Requires-Dist: playwright>=1.58.0; extra == "dev"
Requires-Dist: curl_cffi>=0.7; extra == "dev"
Requires-Dist: html2md-clean>=0.5.0; extra == "dev"
Requires-Dist: markdown-it-py>=4.0.0; extra == "dev"
Requires-Dist: tiktoken>=0.13.0; extra == "dev"
Requires-Dist: stop-words>=2018.7.23; extra == "dev"
Requires-Dist: fastapi>=0.135.0; extra == "dev"
Requires-Dist: httpx>=0.28; extra == "dev"
Provides-Extra: system
Requires-Dist: psutil>=5.9.0; extra == "system"
Provides-Extra: all
Requires-Dist: graph-crawler[antidetect,articles,celery,fuzzy,markdown,mongodb,performance,postgresql,server,sitemap-fast,system,text,viz]; extra == "all"
Dynamic: license-file

# graph-crawler

Веб-краулер, що будує граф сайту (сторінки — ноди, посилання — ребра) з ескалацією HTTP → TLS-fingerprint → браузер.

```bash
pip install graph-crawler            # лише HTTP
pip install "graph-crawler[browser]"  # + Playwright
```
