PHPackages                             rodrigoaramburu/scraphp - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. rodrigoaramburu/scraphp

ActiveLibrary

rodrigoaramburu/scraphp
=======================

Biblioteca para raspagem de dados na web

0.2.2(2y ago)110MITPHP

Since Jan 20Pushed 2y ago1 watchersCompare

[ Source](https://github.com/rodrigoaramburu/scraphp)[ Packagist](https://packagist.org/packages/rodrigoaramburu/scraphp)[ RSS](/packages/rodrigoaramburu-scraphp/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)Dependencies (7)Versions (5)Used By (0)

[![example workflow](https://github.com/rodrigoaramburu/scraphp/actions/workflows/main.yml/badge.svg)](https://github.com/rodrigoaramburu/scraphp/actions/workflows/main.yml/badge.svg)

ScraPHP
=======

[](#scraphp)

O *ScraPHP* é uma ferramenta desenvolvida em *PHP* com o objetivo de facilitar a extração de dados (*web scraping*) de páginas da web. Utilizando seletores *CSS*, o *ScraPHP* simplifica o processo de raspagem e permite que os dados sejam salvos em formatos como *JSON*, *CSV* ou diretamente em um Banco de Dados.

Por padrão, o *ScraPHP* utiliza o componente *Guzzle* para realizar requisições às páginas. No entanto, oferece suporte para a utilização do *WebDriver Selenium* (*chrome*) em estágio inicial, permitindo o acesso a páginas que contenham conteúdo carregado através de *Javascript*.

Instalação
==========

[](#instalação)

```
composer require rodrigoaramburu/scraphp

```

Explicação rápida
-----------------

[](#explicação-rápida)

Para um uso simplificado utilizamos o método `go` para acessar um endereço web, fornecendo a URL e uma função *closure* para processar o retorno da página. Dentro da *closure*, temos acesso ao objeto `Page`, que oferece métodos como `filterCSS` e `filterCSSEach` para extrair informações da página usando seletores *CSS*. Uma vez obtidas as informações desejadas, podemos armazená-las utilizando o objeto `Writer`.

Podemos configurar o `Writer` durante a criação do objeto `ScraPHP` por meio dos métodos `withJsonWriter` para salvar em formato *JSON*, `withCSVWriter` para *CSV*, e `withDatabaseWriter` para gravar em um banco de dados (onde é necessário fornecer um objeto `PDO` com a conexão a ser utitlizada e o nome da tabela).

```
$scraphp = ScraPHP::build()
    ->withJsonWriter('posts-botecodigital.json')
    ->create();

$scraphp->go('https://www.botecodigital.dev.br/', function(Page $page){

    $page->filterCSSEach('.post-chamada', function(FilteredElement $element){
        $link = $element->filterCSS('h1 a')->link()->uri();

        if( !$this->writer()->exists(['link' => $link]) )
        {
            $this->logger()->info('Writing: ' . $link);

            $chamada = $element->filterCSS('h1 a')->text();
            $link = $element->filterCSS('h1 a')->link()->uri();
            $autor = $element->filterCSS('.author')->text();

            $imageSource = $element->filterCSS('img')->image()->source();

            $imagemPath = $this->saveAsset($imageSource, 'imgs/');

            $this->writer()->write( compact('chamada','link','autor','imageSource','imagemPath'));
        }
    });
});

```

O método `filterCSS` aceita um seletor *CSS* e retorna um objeto `FilteredElement`. Este objeto possui diversos métodos que possibilitam a recuperação de informações específicas do elemento. Por exemplo, utilizando `text()`, podemos obter o texto do elemento, enquanto `attr('nome-atributo')` nos retorna o valor de um atributo. Se o elemento for um *link*, é possível adquirir sua URL com o método `link()->uri()`, ou, no caso de uma imagem, obter o endereço dela utilizando `image()->source()`.

O método `filterCSSEach` é semelhante ao `filterCSS`, com a diferença de que ele realiza uma iteração sobre todos os elementos que correspondem ao seletor *CSS* fornecido. Cada um desses elementos é então enviado como um objeto `FilteredElement` para a função que é passada como parâmetro para que cada um deles possa ser processado. O método `filterCSSEach` retorna um *array* com todos os valores retornados pela função.

Também é fácil realizar o download de arquivo/imagem, o objeto `Page` possui um método `saveAsset()` que recebe o endereço que se deseja baixar e o diretório de destino do arquivo.

Efetuar o *download* de arquivos ou imagens é igualmente simples no *ScraPHP*. O objeto `Page` oferece um método chamado `saveAsset()`, o qual recebe o endereço do arquivo desejado e o diretório de destino para armazenamento do arquivo.

Executar Selenium
=================

[](#executar-selenium)

Para realizar as requisições utilizando o *WebDriver Selenium Chrome* primeiro devemos o web driver rodando, no caso podemos fazer isso facilmente como o docker.

```
docker run --rm --net=host --shm-size="2g" selenium/standalone-chrome:latest

```

Então quando criamos o *ScraPHP* utilizamos o método `withWebDriver()` para ele utilizar o Client Web Driver em vez do Guzzle que é o padrão.

```
$scrap = ScraPHP::build()
    ->withWebDriver()
    ->create();

```

###  Health Score

18

—

LowBetter than 8% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

3

Last Release

836d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/0f110334568d29fc9abc433301d4edbe2f36aeebfc23a526cd9a24509285bc7f?d=identicon)[rodrigoaramburu](/maintainers/rodrigoaramburu)

---

Top Contributors

[![rodrigoaramburu](https://avatars.githubusercontent.com/u/389627?v=4)](https://github.com/rodrigoaramburu "rodrigoaramburu (34 commits)")

---

Tags

scrape

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/rodrigoaramburu-scraphp/health.svg)

```
[![Health](https://phpackages.com/badges/rodrigoaramburu-scraphp/health.svg)](https://phpackages.com/packages/rodrigoaramburu-scraphp)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M2.6k](/packages/craftcms-cms)[spatie/crawler

Crawl all internal links found on a website

2.8k16.3M52](/packages/spatie-crawler)[silverstripe/framework

The SilverStripe framework

7213.5M2.5k](/packages/silverstripe-framework)[ec-cube/ec-cube

EC-CUBE EC open platform.

78527.0k1](/packages/ec-cube-ec-cube)[magento/magento2-functional-testing-framework

Magento2 Functional Testing Framework

15511.5M30](/packages/magento-magento2-functional-testing-framework)[spatie/laravel-pjax

A pjax middleware for Laravel 5

513371.8k11](/packages/spatie-laravel-pjax)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
