├── .gitignore ├── Examples ├── HeadlessBrowserExample │ └── HeadlessBrowserExample.swift ├── ImageScraperExample │ └── ImageScraperExample.swift ├── PagingScraperExample │ └── PagingScraperExample.swift └── ScraperExample │ └── ScraperExample.swift ├── LICENSE ├── Package.resolved ├── Package.swift ├── README.md ├── Sources ├── ActoCrawler │ ├── CrawlError.swift │ ├── CrawlEvent.swift │ ├── Crawler.htmlScraper.swift │ ├── Crawler.swift │ ├── CrawlerConfig.swift │ ├── Domain.swift │ ├── DomainQueueTable.swift │ ├── Internal │ │ ├── CrawlQueue.swift │ │ ├── Environment.swift │ │ ├── Logic.swift │ │ └── Regex.swift │ ├── NetworkSession.swift │ ├── Request.swift │ └── Response.swift ├── ActoCrawlerPlaywright │ ├── Crawler.withPlaywright.swift │ ├── PlaywrightActor.swift │ └── _exported.swift ├── AsyncChannel │ ├── AsyncChannel.swift │ ├── Locking.swift │ └── UnsafeResumption.swift └── PythonKitAsync │ ├── Bundle.swift │ ├── asPyAsync.swift │ └── pythonkit-async.py └── Tests └── ActoCrawlerTests ├── CrawlerTests.swift └── ReadMeExample.swift /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/.gitignore -------------------------------------------------------------------------------- /Examples/HeadlessBrowserExample/HeadlessBrowserExample.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Examples/HeadlessBrowserExample/HeadlessBrowserExample.swift -------------------------------------------------------------------------------- /Examples/ImageScraperExample/ImageScraperExample.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Examples/ImageScraperExample/ImageScraperExample.swift -------------------------------------------------------------------------------- /Examples/PagingScraperExample/PagingScraperExample.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Examples/PagingScraperExample/PagingScraperExample.swift -------------------------------------------------------------------------------- /Examples/ScraperExample/ScraperExample.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Examples/ScraperExample/ScraperExample.swift -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/LICENSE -------------------------------------------------------------------------------- /Package.resolved: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Package.resolved -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Package.swift -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/README.md -------------------------------------------------------------------------------- /Sources/ActoCrawler/CrawlError.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/CrawlError.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/CrawlEvent.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/CrawlEvent.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/Crawler.htmlScraper.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/Crawler.htmlScraper.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/Crawler.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/Crawler.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/CrawlerConfig.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/CrawlerConfig.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/Domain.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/Domain.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/DomainQueueTable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/DomainQueueTable.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/Internal/CrawlQueue.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/Internal/CrawlQueue.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/Internal/Environment.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/Internal/Environment.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/Internal/Logic.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/Internal/Logic.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/Internal/Regex.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/Internal/Regex.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/NetworkSession.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/NetworkSession.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/Request.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/Request.swift -------------------------------------------------------------------------------- /Sources/ActoCrawler/Response.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawler/Response.swift -------------------------------------------------------------------------------- /Sources/ActoCrawlerPlaywright/Crawler.withPlaywright.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawlerPlaywright/Crawler.withPlaywright.swift -------------------------------------------------------------------------------- /Sources/ActoCrawlerPlaywright/PlaywrightActor.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawlerPlaywright/PlaywrightActor.swift -------------------------------------------------------------------------------- /Sources/ActoCrawlerPlaywright/_exported.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/ActoCrawlerPlaywright/_exported.swift -------------------------------------------------------------------------------- /Sources/AsyncChannel/AsyncChannel.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/AsyncChannel/AsyncChannel.swift -------------------------------------------------------------------------------- /Sources/AsyncChannel/Locking.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/AsyncChannel/Locking.swift -------------------------------------------------------------------------------- /Sources/AsyncChannel/UnsafeResumption.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/AsyncChannel/UnsafeResumption.swift -------------------------------------------------------------------------------- /Sources/PythonKitAsync/Bundle.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/PythonKitAsync/Bundle.swift -------------------------------------------------------------------------------- /Sources/PythonKitAsync/asPyAsync.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/PythonKitAsync/asPyAsync.swift -------------------------------------------------------------------------------- /Sources/PythonKitAsync/pythonkit-async.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Sources/PythonKitAsync/pythonkit-async.py -------------------------------------------------------------------------------- /Tests/ActoCrawlerTests/CrawlerTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Tests/ActoCrawlerTests/CrawlerTests.swift -------------------------------------------------------------------------------- /Tests/ActoCrawlerTests/ReadMeExample.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Actomaton/ActoCrawler/HEAD/Tests/ActoCrawlerTests/ReadMeExample.swift --------------------------------------------------------------------------------