PHPackages                             dminustin/serpscraper-ext - 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. [Search &amp; Filtering](/categories/search)
4. /
5. dminustin/serpscraper-ext

ActiveLibrary[Search &amp; Filtering](/categories/search)

dminustin/serpscraper-ext
=========================

PHP powered interface for querying the most popular Search Engines

112PHP

Since May 3Pushed 7y ago1 watchersCompare

[ Source](https://github.com/dminustin/serpscrapper-ext)[ Packagist](https://packagist.org/packages/dminustin/serpscraper-ext)[ RSS](/packages/dminustin-serpscraper-ext/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependenciesVersions (1)Used By (0)

SerpScraper
===========

[](#serpscraper)

Based on [https://github.com/Athlon1600/SerpScraper](Athlon1600/SerpScraper)

Changes by D. Minustin
======================

[](#changes-by-d-minustin)

Installation
------------

[](#installation)

The recommended way to install this is via Composer:

```
composer require dminustin/serpscraper-ext
```

### --- Bing search results (May 2019)

[](#----bing-search-results-may-2019)

Added Bing search snippets: now it grab title, snippet and Url instead just Url.

Regexp Replaced with Dom search

### --- Bing - added adult filter

[](#----bing---added-adult-filter)

It can be OFF, MEDIUM, STRICT

### --- Bing Images search

[](#----bing-images-search)

```
$bing = new \SerpScraper\Engine\BingImageSearch();
$bing->setAdult('OFF');
$results = array();

for($page = 1; $page < 10; $page++){

    $response = $bing->search("cats", $page);
    if($response->error == false){
        $results = array_merge($results, $response->results);
    }

    if($response->has_next_page == false){
        break;
    }
}

var_dump($results);
```

### --- Note

[](#----note)

I have tested only Bing results, it works correctly. I do not tested Google yet.

Original changes
================

[](#original-changes)

### --- reCAPTCHA V2 -- Feb 10, 2018 -- Fixed on March 3, 2018

[](#----recaptcha-v2----feb-10-2018----fixed-on-march-3-2018)

Google Search no longer uses its image-based captcha.
It has now moved on to its new reCAPTCHA v2 which makes it very difficult for robots and scripts to bypass.
We're looking for a solution. Stay tuned.

The purpose of this library is to provide an easy, undetectable, and captcha resistant way to extract data from all major search engines such as Google and Bing.

Extracting Search Results From Google
-------------------------------------

[](#extracting-search-results-from-google)

```
use SerpScraper\Engine\GoogleSearch;

$page = 1;

$google = new GoogleSearch();

// all available preferences for Google
$google->setPreference('results_per_page', 100);
//$google->setPreference('google_domain', 'google.lt');
//$google->setPreference('date_range', 'hour');

$results = array();

do {

	$response = $google->search("how to scrape google", $page);

	// error field must be empty otherwise query failed
	if($response->error == false){

		$results = array_merge($results, $response->results);
		$page++;

	} else if($response->error == 'captcha'){

		// assuming you have a subscription  to this captcha solving service: http://www.deathbycaptcha.com
		$status = $google->solveCaptcha("dbc_username", "dbc_password");

		if($status){
			$page++;
		}

		continue;

	}

} while ($response->has_next_page);
```

Extract Search Results from Bing
--------------------------------

[](#extract-search-results-from-bing)

```
use SerpScraper\Engine\BingSearch;

$bing = new BingSearch();
$results = array();

for($page = 1; $page < 10; $page++){

	$response = $bing->search("search bing using php", $page);
	if($response->error == false){
		$results = array_merge($results, $response->results);
	}

	if($response->has_next_page == false){
		break;
	}
}

var_dump($results);
```

###  Health Score

19

—

LowBetter than 9% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/2a61a1f065c8f27bb8fe832eb173ee339df40dadc8da4b4572be03e4879c9bed?d=identicon)[dminustin](/maintainers/dminustin)

### Embed Badge

![Health badge](/badges/dminustin-serpscraper-ext/health.svg)

```
[![Health](https://phpackages.com/badges/dminustin-serpscraper-ext/health.svg)](https://phpackages.com/packages/dminustin-serpscraper-ext)
```

###  Alternatives

[awesome-nova/dependent-filter

Dependent filters for Laravel Nova

26190.2k](/packages/awesome-nova-dependent-filter)[algolia/php-dom-parser

A simple tool to turn DOM into Algolia search friendly record objects.

181.8k](/packages/algolia-php-dom-parser)

PHPackages © 2026

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