> For the complete documentation index, see [llms.txt](https://developers.oxylabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.oxylabs.io/integrations/pt-br/web-unblocker-integrations/scrapy.md).

# Scrapy

Siga um guia passo a passo em Python para integrar o Web Unblocker da Oxylabs com o Scrapy

Integrar [Scrapy](https://www.scrapy.org/) com [Oxylabs Web Unblocker](https://oxylabs.io/products/web-unblocker) para melhorar o acesso à web, lidar com CAPTCHAs e executar a renderização de JavaScript automaticamente. Este guia cobre Metadados da Requisição e Middleware personalizado do Downloader.

{% stepper %}
{% step %}

### Escolha o método de integração

O Scrapy oferece suporte a dois métodos para rotear o tráfego pelo Web Unblocker: Parâmetro Meta da Requisição (configuração por requisição) e Middleware personalizado do Downloader (configuração em nível de projeto).

#### **Método 1: Parâmetro Meta da Request**

Passe os detalhes de autenticação do Web Unblocker diretamente para instâncias individuais `scrapy.Request` usando o `meta` dicionário. Você também pode fornecer cabeçalhos de recursos personalizados do Web Unblocker dentro do parâmetro da requisição `cabeçalhos` parâmetro.

```python
import scrapy

class UnblockerSpider(scrapy.Spider):
    name = "unblocker_spider"

    def start_requests(self):
        url = "https://sandbox.oxylabs.io/products"
        proxy_uri = "http://YOUR_USERNAME:YOUR_PASSWORD@unblock.oxylabs.io:60000"
        
        # Cabeçalhos personalizados opcionais do Web Unblocker
        headers = {
            "x-oxylabs-render": "html",           # Ativar renderização de JavaScript
            "X-Oxylabs-Geo-Location": "Germany",  # Definir segmentação geográfica
        }

        yield scrapy.Request(
            url=url,
            callback=self.parse,
            headers=headers,
            meta={"proxy": proxy_uri}
        )

    def parse(self, response):
        for product in response.css(".product-card"):
            yield {
                "title": product.css(".title::text").get(),
                "price": product.css(".price-wrapper::text").get(),
            }
```

#### **Método 2: Middleware personalizado do Downloader (recomendado)**

Para rotear todas as requisições do spider pelo Web Unblocker globalmente, sem modificar métodos de requisição individuais, implemente um Scrapy Downloader Middleware personalizado.

Abra o arquivo do seu projeto Scrapy `middlewares.py` arquivo e adicione o `OxylabsWebUnblockerMiddleware` classe:

```python
class OxylabsWebUnblockerMiddleware:
    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings)

    def __init__(self, settings):
        self.username = settings.get("OXYLABS_UNBLOCKER_USER")
        self.password = settings.get("OXYLABS_UNBLOCKER_PASS")
        self.endpoint = settings.get("OXYLABS_UNBLOCKER_ENDPOINT", "unblock.oxylabs.io:60000")

    def process_request(self, request, spider):
        proxy_uri = f"http://{self.username}:{self.password}@{self.endpoint}"
        request.meta["proxy"] = proxy_uri
```

Em seguida, registre o middleware e especifique suas credenciais em `settings.py`:

```python
# Configurações do Web Unblocker
OXYLABS_UNBLOCKER_USER = "YOUR_USERNAME"
OXYLABS_UNBLOCKER_PASS = "YOUR_PASSWORD"
OXYLABS_UNBLOCKER_ENDPOINT = "unblock.oxylabs.io:60000"

# Enable Downloader Middleware
DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.OxylabsWebUnblockerMiddleware": 100,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 110,
}
```

{% endstep %}

{% step %}

### Insira credenciais e cabeçalhos personalizados

Web Unblocker usa um único ponto de entrada centralizado para todas as requisições:

**Host:** `unblock.oxylabs.io`

**Porta:** `60000`

**Nome de usuário:** `YOUR_USERNAME`

**Senha:** `YOUR_PASSWORD`

Web Unblocker usa IA para gerar fingerprints do navegador e cabeçalhos de requisição ideais automaticamente. Portanto, evite passar cabeçalhos padrão do navegador (como strings personalizadas de User-Agent), a menos que seja necessário. Para controlar o comportamento do Web Unblocker, passe os seguintes cabeçalhos personalizados em suas requisições: `User-Agent` strings) a menos que seja necessário. Para controlar o comportamento do Web Unblocker, passe os seguintes cabeçalhos personalizados em suas requisições:

<table><thead><tr><th width="219">Cabeçalho personalizado</th><th>Descrição</th><th width="141">Valor de exemplo</th></tr></thead><tbody><tr><td><code>x-oxylabs-render</code></td><td>Força a renderização de navegador headless para sites dinâmicos e pesados em JavaScript. Saiba mais <a href="/products/pt-br/web-unblocker/custom-browser-instructions.md">aqui</a>.</td><td><code>html</code></td></tr><tr><td><code>X-Oxylabs-Geo-Location</code></td><td>Define segmentação geográfica (aceita nomes de países, estados ou CEPs). Saiba mais <a href="/products/pt-br/web-unblocker/making-requests/geo-location.md">aqui</a>.</td><td><code>Estados Unidos</code></td></tr><tr><td><code>X-Oxylabs-Session-Id</code></td><td>Reutiliza o mesmo endereço IP e sessão em requisições sequenciais. Saiba mais <a href="/products/pt-br/web-unblocker/making-requests/session.md">aqui</a>.</td><td><code>session_abc123</code></td></tr><tr><td><code>x-oxylabs-force-headers</code></td><td>Força o Web Unblocker a passar seus cabeçalhos de requisição personalizados para o destino.</td><td><code>1</code></td></tr><tr><td><code>x-oxylabs-force-cookies</code></td><td>Força o Web Unblocker a preservar e enviar cookies personalizados para o site de destino.</td><td><code>1</code></td></tr></tbody></table>
{% endstep %}

{% step %}

### Configurar timeouts de resposta

Ao ativar a renderização de JavaScript (`x-oxylabs-render: html`), o Web Unblocker usa uma instância interna de navegador headless para executar scripts da página e aguardar o carregamento de elementos dinâmicos do DOM.

Como a renderização do navegador leva mais tempo do que requisições HTTP GET padrão, ajuste o timeout de download do Scrapy em `settings.py` para evitar que as requisições sejam descartadas:

```python
DOWNLOAD_TIMEOUT = 180
```

{% endstep %}

{% step %}

### Execute a spider

Execute seu spider do Scrapy pela linha de comando:

```bash
scrapy crawl unblocker_spider
```

O Web Unblocker processará a requisição por meio de sua infraestrutura de proxy com IA, gerenciará o fingerprinting do navegador e as tentativas, e retornará o conteúdo final da página HTML diretamente ao seu método parse do Scrapy.
{% endstep %}
{% endstepper %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://developers.oxylabs.io/integrations/pt-br/web-unblocker-integrations/scrapy.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
