# Overview

Skrape{it} offers an unified, intuitive and DSL-controlled way to make parsing of websites as comfortable as possible.&#x20;

* [x] [Http-Client DSL](/docs/1.0.x/http-client/parse-html-from-web.md) without verbosity and ceremony to make requests and corresponding request options like headers, cookies etc. in a fluent style interface.&#x20;
* [x] [Pre-configure a client](/docs/1.0.x/http-client/pre-configure-client.md) once to either reuse it or adjust only the things that differ at certain requests - especially handy while working with authentication flows or custom headers.
* [x] Can [handle client side rendered web pages](/docs/1.0.x/http-client/browserfetcher.md) (e.g. pages created with frameworks like React.js, Angular or Vue.js or pages manipulated with jQuery or other javascript)

A Http request is done as easy as in the given example. Just call the `skrape` function wherever you want in your code. It will force you to pass a [fetcher](/docs/1.0.x/http-client/overview.md#the-different-fetchers) and make further[ request option](/docs/1.0.x/http-client/parse-html-from-web.md) available in the clojure.

```kotlin
skrape(HttpFetcher) { // <-- pass any Fetcher, e.g. HttpFetcher, BrowserFetcher, ...
    // ... request options goes here, e.g the most basic would be url
    url = "https://docs.skrape.it"
    
    expect {}
    extract {}
}
```

{% hint style="info" %}
The http-request is only executed after either the [**`extract`**](/docs/1.0.x/dsl/extracting-data-from-websites.md) or [**`expect`**](/docs/1.0.x/dsl/basic-test-scenario.md) function has been called. This behaviour also allows to[ preconfigure the http-client](/docs/1.0.x/http-client/pre-configure-client.md) for multiple calls. If you use expect as well as extract it will only make 1 request.
{% endhint %}

### The Different Fetchers

Skrape{it} provides different types of Fetchers (aka Http-Clients) that can be passed to its DSL. All of them will execute http requests but each of them handles a different use-case.&#x20;

#### You want to scrape a simple HTML page, easy, as fast as possible, but with deactivated Javascript?

{% content-ref url="/pages/-MXYEil07evZ1rCjanN8" %}
[HttpFetcher](/docs/1.0.x/http-client/httpfetcher.md)
{% endcontent-ref %}

#### You want to scrape a complex website, maybe a SPA app that has been written with frameworks like React.js, Angular or Vue.js or at least rely on javascript a lot?

{% content-ref url="/pages/-MXYEsPty7Wu7XbfoBsF" %}
[BrowserFetcher](/docs/1.0.x/http-client/browserfetcher.md)
{% endcontent-ref %}

#### You want to scrape multiple HTML pages in parallel from inside a coroutine?

{% content-ref url="/pages/-MXYEqJcsvMzKYnghEq3" %}
[AsyncFetcher](/docs/1.0.x/http-client/asyncfetcher.md)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.skrape.it/docs/1.0.x/http-client/overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
