search-engine-parser


Namesearch-engine-parser JSON
Version 0.6.8 PyPI version JSON
download
home_pagehttps://github.com/bisoncorps/search-engine-parser
Summaryscrapes search engine pages for query titles, descriptions and links
upload_time2022-11-21 22:22:23
maintainer
docs_urlNone
authorDomnan Diretnan, Mmadu Manasseh
requires_python>=3.5
licenseMIT
keywords search-engine search parser google yahoo bing yandex stackoverflow github baidu
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Search Engine Parser

<span><i>"If it is a search engine, then it can be parsed"</i> - some random guy</span>

![Demo](https://github.com/bisoncorps/search-engine-parser/raw/master/assets/animate.gif)

[![Python 3.6|3.7|3.8|3.9](https://img.shields.io/badge/python-3.5%7C3.6%7C3.7%7C3.8-blue)](https://www.python.org/downloads/)
[![PyPI version](https://img.shields.io/pypi/v/search-engine-parser)](https://pypi.org/project/search-engine-parser/)
[![PyPI - Downloads](https://img.shields.io/pypi/dm/search-engine-parser)](https://pypi.org/project/search-engine-parser/)
[![Deploy to Pypi](https://github.com/bisohns/search-engine-parser/actions/workflows/deploy.yml/badge.svg)](https://github.com/bisohns/search-engine-parser/actions/workflows/deploy.yml)
[![Test](https://github.com/bisohns/search-engine-parser/actions/workflows/test.yml/badge.svg)](https://github.com/bisohns/search-engine-parser/actions/workflows/test.yml)
[![Documentation Status](https://readthedocs.org/projects/search-engine-parser/badge/?version=latest)](https://search-engine-parser.readthedocs.io/en/latest/?badge=latest)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg)](#contributors)
<hr/>

search-engine-parser is a package that lets you query popular search engines and scrape for result titles, links, descriptions and more. It aims to scrape the widest range of search engines.
View all supported engines [here.](https://github.com/bisoncorps/search-engine-parser/blob/master/docs/supported_engines.md)

- [Search Engine Parser](#search-engine-parser)
  - [Popular Supported Engines](#popular-supported-engines)
  - [Installation](#installation)
  - [Development](#development)
  - [Code Documentation](#code-documentation)
  - [Running the tests](#running-the-tests)
  - [Usage](#usage)
    - [Code](#code)
    - [Command line](#command-line)
  - [FAQ](docs/faq.md)
  - [Code of Conduct](#code-of-conduct)
  - [Contribution](#contribution)
  - [License (MIT)](#license-mit)

## Popular Supported Engines
Popular search engines supported include:

- Google
- DuckDuckGo
- GitHub
- StackOverflow
- Baidu
- YouTube

View all supported engines [here.](docs/supported_engines.md)

## Installation
Install from PyPi:

```bash
    # install only package dependencies
    pip install search-engine-parser
    # Installs `pysearch` cli  tool
    pip install "search-engine-parser[cli]"
```

or from master:
```bash
  pip install git+https://github.com/bisoncorps/search-engine-parser
```

## Development
Clone the repository:

```bash
    git clone git@github.com:bisoncorps/search-engine-parser.git
```

Then create a virtual environment and install the required packages:

```bash
    mkvirtualenv search_engine_parser
    pip install -r requirements/dev.txt
```


## Code Documentation
Code docs can be found on [Read the Docs](https://search-engine-parser.readthedocs.io/en/latest).

## Running the tests
```bash
    pytest
```

## Usage

### Code
Query results can be scraped from popular search engines, as shown in the example snippet below.

```python
  import pprint

  from search_engine_parser.core.engines.bing import Search as BingSearch
  from search_engine_parser.core.engines.google import Search as GoogleSearch
  from search_engine_parser.core.engines.yahoo import Search as YahooSearch

  search_args = ('preaching to the choir', 1)
  gsearch = GoogleSearch()
  ysearch = YahooSearch()
  bsearch = BingSearch()
  gresults = gsearch.search(*search_args)
  yresults = ysearch.search(*search_args)
  bresults = bsearch.search(*search_args)
  a = {
      "Google": gresults,
      "Yahoo": yresults,
      "Bing": bresults
      }

  # pretty print the result from each engine
  for k, v in a.items():
      print(f"-------------{k}------------")
      for result in v:
          pprint.pprint(result)

  # print first title from google search
  print(gresults["titles"][0])
  # print 10th link from yahoo search
  print(yresults["links"][9])
  # print 6th description from bing search
  print(bresults["descriptions"][5])

  # print first result containing links, descriptions and title
  print(gresults[0])
```

For localization, you can pass the `url` keyword and a localized url. This queries and parses the localized url using the same engine's parser:
```python
  # Use google.de instead of google.com
  results = gsearch.search(*search_args, url="google.de")
```

If you need results in a specific language you can pass the 'hl' keyword and the 2-letter country abbreviation (here's a [handy list](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)):
```python
  # Use 'it' to receive italian results
  results = gsearch.search(*search_args, hl="it")
```

#### Cache
The results are automatically cached for engine searches. You can either bypass the cache by adding `cache=False` to the `search` or `async_search` method or clear the engine's cache
```python
    from search_engine_parser.core.engines.github import Search as GitHub
    github = GitHub()
    # bypass the cache
    github.search("search-engine-parser", cache=False)

    #OR
    # clear cache before search
    github.clear_cache()
    github.search("search-engine-parser")
```

#### Proxy
Adding a proxy entails sending details to the search function
```python
    from search_engine_parser.core.engines.github import Search as GitHub
    github = GitHub()
    github.search("search-engine-parser",
        # http proxies supported only
        proxy='http://123.12.1.0',
        proxy_auth=('username', 'password'))
```


#### Async
search-engine-parser supports `async`:
```python
   results = await gsearch.async_search(*search_args)
```

#### Results
The `SearchResults` after searching:
```python
  >>> results = gsearch.search("preaching to the choir", 1)
  >>> results
  <search_engine_parser.core.base.SearchResult object at 0x7f907426a280>
  # the object supports retrieving individual results by iteration of just by type (links, descriptions, titles)
  >>> results[0] # returns the first <SearchItem>
  >>> results[0]["description"] # gets the description of the first item
  >>> results[0]["link"] # gets the link of the first item
  >>> results["descriptions"] # returns a list of all descriptions from all results
```
It can be iterated like a normal list to return individual `SearchItem`s.

### Command line

search-engine-parser comes with a CLI tool known as `pysearch`. You can use it as such:

```bash
pysearch --engine bing  --type descriptions "Preaching to the choir"
```

Result:

```bash
'Preaching to the choir' originated in the USA in the 1970s. It is a variant of the earlier 'preaching to the converted', which dates from England in the late 1800s and has the same meaning. Origin - the full story 'Preaching to the choir' (also sometimes spelled quire) is of US origin.
```

![Demo](https://github.com/bisoncorps/search-engine-parser/raw/master/assets/example.gif)

```bash
usage: pysearch [-h] [-V] [-e ENGINE] [--show-summary] [-u URL] [-p PAGE]
                [-t TYPE] [-cc] [-r RANK] [--proxy PROXY]
                [--proxy-user PROXY_USER] [--proxy-password PROXY_PASSWORD]
                query

SearchEngineParser

positional arguments:
  query                 Query string to search engine for

optional arguments:
  -h, --help            show this help message and exit
  -V, --version         show program's version number and exit
  -e ENGINE, --engine ENGINE
                        Engine to use for parsing the query e.g google, yahoo,
                        bing,duckduckgo (default: google)
  --show-summary        Shows the summary of an engine
  -u URL, --url URL     A custom link to use as base url for search e.g
                        google.de
  -p PAGE, --page PAGE  Page of the result to return details for (default: 1)
  -t TYPE, --type TYPE  Type of detail to return i.e full, links, desciptions
                        or titles (default: full)
  -cc, --clear-cache    Clear cache of engine before searching
  -r RANK, --rank RANK  ID of Detail to return e.g 5 (default: 0)
  --proxy PROXY         Proxy address to make use of
  --proxy-user PROXY_USER
                        Proxy user to make use of
  --proxy-password PROXY_PASSWORD
                        Proxy password to make use of
```



## Code of Conduct
Make sure to adhere to the [code of conduct](CODE_OF_CONDUCT.md) at all times.

## Contribution
Before making any contributions, please read the [contribution guide](CONTRIBUTING.md).

## License (MIT)
This project is licensed under the [MIT 2.0 License](LICENSE) which allows very broad use for both academic and commercial purposes.

## Contributors ✨

Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tr>
    <td align="center"><a href="https://github.com/Rexogamer"><img src="https://avatars0.githubusercontent.com/u/42586271?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ed Luff</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=Rexogamer" title="Code">πŸ’»</a></td>
    <td align="center"><a href="http://diretnandomnan.webnode.com"><img src="https://avatars3.githubusercontent.com/u/23453888?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Diretnan Domnan</b></sub></a><br /><a href="#infra-deven96" title="Infrastructure (Hosting, Build-Tools, etc)">πŸš‡</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=deven96" title="Tests">⚠️</a> <a href="#tool-deven96" title="Tools">πŸ”§</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=deven96" title="Code">πŸ’»</a></td>
    <td align="center"><a href="http://mensaah.github.io"><img src="https://avatars3.githubusercontent.com/u/24734308?v=4?s=100" width="100px;" alt=""/><br /><sub><b>MeNsaaH</b></sub></a><br /><a href="#infra-MeNsaaH" title="Infrastructure (Hosting, Build-Tools, etc)">πŸš‡</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=MeNsaaH" title="Tests">⚠️</a> <a href="#tool-MeNsaaH" title="Tools">πŸ”§</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=MeNsaaH" title="Code">πŸ’»</a></td>
    <td align="center"><a href="https://github.com/PalAditya"><img src="https://avatars2.githubusercontent.com/u/25523604?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Aditya Pal</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=PalAditya" title="Tests">⚠️</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=PalAditya" title="Code">πŸ’»</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=PalAditya" title="Documentation">πŸ“–</a></td>
    <td align="center"><a href="http://energized.pro"><img src="https://avatars1.githubusercontent.com/u/27774996?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Avinash Reddy</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/issues?q=author%3AAvinashReddy3108" title="Bug reports">πŸ›</a></td>
    <td align="center"><a href="https://github.com/Iamdavidonuh"><img src="https://avatars3.githubusercontent.com/u/37768509?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Onuh</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=Iamdavidonuh" title="Code">πŸ’»</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=Iamdavidonuh" title="Tests">⚠️</a></td>
    <td align="center"><a href="http://simakis.me"><img src="https://avatars2.githubusercontent.com/u/8322266?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Panagiotis Simakis</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=sp1thas" title="Code">πŸ’»</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=sp1thas" title="Tests">⚠️</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/reiarthur"><img src="https://avatars2.githubusercontent.com/u/20190646?v=4?s=100" width="100px;" alt=""/><br /><sub><b>reiarthur</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=reiarthur" title="Code">πŸ’»</a></td>
    <td align="center"><a href="http://ashokkumarta.blogspot.com/"><img src="https://avatars0.githubusercontent.com/u/5450267?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ashokkumar TA</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=ashokkumarta" title="Code">πŸ’»</a></td>
    <td align="center"><a href="https://github.com/ateuber"><img src="https://avatars2.githubusercontent.com/u/44349054?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andreas Teuber</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=ateuber" title="Code">πŸ’»</a></td>
    <td align="center"><a href="https://github.com/mi096684"><img src="https://avatars3.githubusercontent.com/u/22032932?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mi096684</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Ami096684" title="Bug reports">πŸ›</a></td>
    <td align="center"><a href="https://github.com/devajithvs"><img src="https://avatars1.githubusercontent.com/u/29475282?v=4?s=100" width="100px;" alt=""/><br /><sub><b>devajithvs</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=devajithvs" title="Code">πŸ’»</a></td>
    <td align="center"><a href="https://github.com/zakaryan2004"><img src="https://avatars3.githubusercontent.com/u/29994884?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Geg Zakaryan</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=zakaryan2004" title="Code">πŸ’»</a> <a href="https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Azakaryan2004" title="Bug reports">πŸ›</a></td>
    <td align="center"><a href="https://www.hakanbogan.com"><img src="https://avatars1.githubusercontent.com/u/24498747?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hakan Boğan</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Aredrussianarmy" title="Bug reports">πŸ›</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/NicKoehler"><img src="https://avatars3.githubusercontent.com/u/53040044?v=4?s=100" width="100px;" alt=""/><br /><sub><b>NicKoehler</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/issues?q=author%3ANicKoehler" title="Bug reports">πŸ›</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=NicKoehler" title="Code">πŸ’»</a></td>
    <td align="center"><a href="https://github.com/chris4540"><img src="https://avatars1.githubusercontent.com/u/12794588?v=4?s=100" width="100px;" alt=""/><br /><sub><b>ChrisLin</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Achris4540" title="Bug reports">πŸ›</a> <a href="https://github.com/bisoncorps/search-engine-parser/commits?author=chris4540" title="Code">πŸ’»</a></td>
    <td align="center"><a href="http://pete.world"><img src="https://avatars.githubusercontent.com/u/10454135?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Pietro</b></sub></a><br /><a href="https://github.com/bisoncorps/search-engine-parser/commits?author=pgrandinetti" title="Code">πŸ’»</a> <a href="https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Apgrandinetti" title="Bug reports">πŸ›</a></td>
  </tr>
</table>

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/bisoncorps/search-engine-parser",
    "name": "search-engine-parser",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.5",
    "maintainer_email": "",
    "keywords": "search-engine         search         parser         google         yahoo         bing         yandex         stackoverflow         github         baidu",
    "author": "Domnan Diretnan, Mmadu Manasseh",
    "author_email": "diretnandomnan@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/cf/83/510ce907753919812bec1a2e2a279443f50aadb1a64ab2adc16fca0b8dea/search-engine-parser-0.6.8.tar.gz",
    "platform": null,
    "description": "# Search Engine Parser\n\n<span><i>\"If it is a search engine, then it can be parsed\"</i> - some random guy</span>\n\n![Demo](https://github.com/bisoncorps/search-engine-parser/raw/master/assets/animate.gif)\n\n[![Python 3.6|3.7|3.8|3.9](https://img.shields.io/badge/python-3.5%7C3.6%7C3.7%7C3.8-blue)](https://www.python.org/downloads/)\n[![PyPI version](https://img.shields.io/pypi/v/search-engine-parser)](https://pypi.org/project/search-engine-parser/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/search-engine-parser)](https://pypi.org/project/search-engine-parser/)\n[![Deploy to Pypi](https://github.com/bisohns/search-engine-parser/actions/workflows/deploy.yml/badge.svg)](https://github.com/bisohns/search-engine-parser/actions/workflows/deploy.yml)\n[![Test](https://github.com/bisohns/search-engine-parser/actions/workflows/test.yml/badge.svg)](https://github.com/bisohns/search-engine-parser/actions/workflows/test.yml)\n[![Documentation Status](https://readthedocs.org/projects/search-engine-parser/badge/?version=latest)](https://search-engine-parser.readthedocs.io/en/latest/?badge=latest)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg)](#contributors)\n<hr/>\n\nsearch-engine-parser is a package that lets you query popular search engines and scrape for result titles, links, descriptions and more. It aims to scrape the widest range of search engines.\nView all supported engines [here.](https://github.com/bisoncorps/search-engine-parser/blob/master/docs/supported_engines.md)\n\n- [Search Engine Parser](#search-engine-parser)\n  - [Popular Supported Engines](#popular-supported-engines)\n  - [Installation](#installation)\n  - [Development](#development)\n  - [Code Documentation](#code-documentation)\n  - [Running the tests](#running-the-tests)\n  - [Usage](#usage)\n    - [Code](#code)\n    - [Command line](#command-line)\n  - [FAQ](docs/faq.md)\n  - [Code of Conduct](#code-of-conduct)\n  - [Contribution](#contribution)\n  - [License (MIT)](#license-mit)\n\n## Popular Supported Engines\nPopular search engines supported include:\n\n- Google\n- DuckDuckGo\n- GitHub\n- StackOverflow\n- Baidu\n- YouTube\n\nView all supported engines [here.](docs/supported_engines.md)\n\n## Installation\nInstall from PyPi:\n\n```bash\n    # install only package dependencies\n    pip install search-engine-parser\n    # Installs `pysearch` cli  tool\n    pip install \"search-engine-parser[cli]\"\n```\n\nor from master:\n```bash\n  pip install git+https://github.com/bisoncorps/search-engine-parser\n```\n\n## Development\nClone the repository:\n\n```bash\n    git clone git@github.com:bisoncorps/search-engine-parser.git\n```\n\nThen create a virtual environment and install the required packages:\n\n```bash\n    mkvirtualenv search_engine_parser\n    pip install -r requirements/dev.txt\n```\n\n\n## Code Documentation\nCode docs can be found on [Read the Docs](https://search-engine-parser.readthedocs.io/en/latest).\n\n## Running the tests\n```bash\n    pytest\n```\n\n## Usage\n\n### Code\nQuery results can be scraped from popular search engines, as shown in the example snippet below.\n\n```python\n  import pprint\n\n  from search_engine_parser.core.engines.bing import Search as BingSearch\n  from search_engine_parser.core.engines.google import Search as GoogleSearch\n  from search_engine_parser.core.engines.yahoo import Search as YahooSearch\n\n  search_args = ('preaching to the choir', 1)\n  gsearch = GoogleSearch()\n  ysearch = YahooSearch()\n  bsearch = BingSearch()\n  gresults = gsearch.search(*search_args)\n  yresults = ysearch.search(*search_args)\n  bresults = bsearch.search(*search_args)\n  a = {\n      \"Google\": gresults,\n      \"Yahoo\": yresults,\n      \"Bing\": bresults\n      }\n\n  # pretty print the result from each engine\n  for k, v in a.items():\n      print(f\"-------------{k}------------\")\n      for result in v:\n          pprint.pprint(result)\n\n  # print first title from google search\n  print(gresults[\"titles\"][0])\n  # print 10th link from yahoo search\n  print(yresults[\"links\"][9])\n  # print 6th description from bing search\n  print(bresults[\"descriptions\"][5])\n\n  # print first result containing links, descriptions and title\n  print(gresults[0])\n```\n\nFor localization, you can pass the `url` keyword and a localized url. This queries and parses the localized url using the same engine's parser:\n```python\n  # Use google.de instead of google.com\n  results = gsearch.search(*search_args, url=\"google.de\")\n```\n\nIf you need results in a specific language you can pass the 'hl' keyword and the 2-letter country abbreviation (here's a [handy list](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)):\n```python\n  # Use 'it' to receive italian results\n  results = gsearch.search(*search_args, hl=\"it\")\n```\n\n#### Cache\nThe results are automatically cached for engine searches. You can either bypass the cache by adding `cache=False` to the `search` or `async_search` method or clear the engine's cache\n```python\n    from search_engine_parser.core.engines.github import Search as GitHub\n    github = GitHub()\n    # bypass the cache\n    github.search(\"search-engine-parser\", cache=False)\n\n    #OR\n    # clear cache before search\n    github.clear_cache()\n    github.search(\"search-engine-parser\")\n```\n\n#### Proxy\nAdding a proxy entails sending details to the search function\n```python\n    from search_engine_parser.core.engines.github import Search as GitHub\n    github = GitHub()\n    github.search(\"search-engine-parser\",\n        # http proxies supported only\n        proxy='http://123.12.1.0',\n        proxy_auth=('username', 'password'))\n```\n\n\n#### Async\nsearch-engine-parser supports `async`:\n```python\n   results = await gsearch.async_search(*search_args)\n```\n\n#### Results\nThe `SearchResults` after searching:\n```python\n  >>> results = gsearch.search(\"preaching to the choir\", 1)\n  >>> results\n  <search_engine_parser.core.base.SearchResult object at 0x7f907426a280>\n  # the object supports retrieving individual results by iteration of just by type (links, descriptions, titles)\n  >>> results[0] # returns the first <SearchItem>\n  >>> results[0][\"description\"] # gets the description of the first item\n  >>> results[0][\"link\"] # gets the link of the first item\n  >>> results[\"descriptions\"] # returns a list of all descriptions from all results\n```\nIt can be iterated like a normal list to return individual `SearchItem`s.\n\n### Command line\n\nsearch-engine-parser comes with a CLI tool known as `pysearch`. You can use it as such:\n\n```bash\npysearch --engine bing  --type descriptions \"Preaching to the choir\"\n```\n\nResult:\n\n```bash\n'Preaching to the choir' originated in the USA in the 1970s. It is a variant of the earlier 'preaching to the converted', which dates from England in the late 1800s and has the same meaning. Origin - the full story 'Preaching to the choir' (also sometimes spelled quire) is of US origin.\n```\n\n![Demo](https://github.com/bisoncorps/search-engine-parser/raw/master/assets/example.gif)\n\n```bash\nusage: pysearch [-h] [-V] [-e ENGINE] [--show-summary] [-u URL] [-p PAGE]\n                [-t TYPE] [-cc] [-r RANK] [--proxy PROXY]\n                [--proxy-user PROXY_USER] [--proxy-password PROXY_PASSWORD]\n                query\n\nSearchEngineParser\n\npositional arguments:\n  query                 Query string to search engine for\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -V, --version         show program's version number and exit\n  -e ENGINE, --engine ENGINE\n                        Engine to use for parsing the query e.g google, yahoo,\n                        bing,duckduckgo (default: google)\n  --show-summary        Shows the summary of an engine\n  -u URL, --url URL     A custom link to use as base url for search e.g\n                        google.de\n  -p PAGE, --page PAGE  Page of the result to return details for (default: 1)\n  -t TYPE, --type TYPE  Type of detail to return i.e full, links, desciptions\n                        or titles (default: full)\n  -cc, --clear-cache    Clear cache of engine before searching\n  -r RANK, --rank RANK  ID of Detail to return e.g 5 (default: 0)\n  --proxy PROXY         Proxy address to make use of\n  --proxy-user PROXY_USER\n                        Proxy user to make use of\n  --proxy-password PROXY_PASSWORD\n                        Proxy password to make use of\n```\n\n\n\n## Code of Conduct\nMake sure to adhere to the [code of conduct](CODE_OF_CONDUCT.md) at all times.\n\n## Contribution\nBefore making any contributions, please read the [contribution guide](CONTRIBUTING.md).\n\n## License (MIT)\nThis project is licensed under the [MIT 2.0 License](LICENSE) which allows very broad use for both academic and commercial purposes.\n\n## Contributors \u2728\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://github.com/Rexogamer\"><img src=\"https://avatars0.githubusercontent.com/u/42586271?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Ed Luff</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=Rexogamer\" title=\"Code\">\ud83d\udcbb</a></td>\n    <td align=\"center\"><a href=\"http://diretnandomnan.webnode.com\"><img src=\"https://avatars3.githubusercontent.com/u/23453888?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Diretnan Domnan</b></sub></a><br /><a href=\"#infra-deven96\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">\ud83d\ude87</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=deven96\" title=\"Tests\">\u26a0\ufe0f</a> <a href=\"#tool-deven96\" title=\"Tools\">\ud83d\udd27</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=deven96\" title=\"Code\">\ud83d\udcbb</a></td>\n    <td align=\"center\"><a href=\"http://mensaah.github.io\"><img src=\"https://avatars3.githubusercontent.com/u/24734308?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>MeNsaaH</b></sub></a><br /><a href=\"#infra-MeNsaaH\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">\ud83d\ude87</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=MeNsaaH\" title=\"Tests\">\u26a0\ufe0f</a> <a href=\"#tool-MeNsaaH\" title=\"Tools\">\ud83d\udd27</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=MeNsaaH\" title=\"Code\">\ud83d\udcbb</a></td>\n    <td align=\"center\"><a href=\"https://github.com/PalAditya\"><img src=\"https://avatars2.githubusercontent.com/u/25523604?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Aditya Pal</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=PalAditya\" title=\"Tests\">\u26a0\ufe0f</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=PalAditya\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=PalAditya\" title=\"Documentation\">\ud83d\udcd6</a></td>\n    <td align=\"center\"><a href=\"http://energized.pro\"><img src=\"https://avatars1.githubusercontent.com/u/27774996?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Avinash Reddy</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/issues?q=author%3AAvinashReddy3108\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n    <td align=\"center\"><a href=\"https://github.com/Iamdavidonuh\"><img src=\"https://avatars3.githubusercontent.com/u/37768509?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>David Onuh</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=Iamdavidonuh\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=Iamdavidonuh\" title=\"Tests\">\u26a0\ufe0f</a></td>\n    <td align=\"center\"><a href=\"http://simakis.me\"><img src=\"https://avatars2.githubusercontent.com/u/8322266?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Panagiotis Simakis</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=sp1thas\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=sp1thas\" title=\"Tests\">\u26a0\ufe0f</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"https://github.com/reiarthur\"><img src=\"https://avatars2.githubusercontent.com/u/20190646?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>reiarthur</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=reiarthur\" title=\"Code\">\ud83d\udcbb</a></td>\n    <td align=\"center\"><a href=\"http://ashokkumarta.blogspot.com/\"><img src=\"https://avatars0.githubusercontent.com/u/5450267?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Ashokkumar TA</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=ashokkumarta\" title=\"Code\">\ud83d\udcbb</a></td>\n    <td align=\"center\"><a href=\"https://github.com/ateuber\"><img src=\"https://avatars2.githubusercontent.com/u/44349054?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Andreas Teuber</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=ateuber\" title=\"Code\">\ud83d\udcbb</a></td>\n    <td align=\"center\"><a href=\"https://github.com/mi096684\"><img src=\"https://avatars3.githubusercontent.com/u/22032932?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>mi096684</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Ami096684\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n    <td align=\"center\"><a href=\"https://github.com/devajithvs\"><img src=\"https://avatars1.githubusercontent.com/u/29475282?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>devajithvs</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=devajithvs\" title=\"Code\">\ud83d\udcbb</a></td>\n    <td align=\"center\"><a href=\"https://github.com/zakaryan2004\"><img src=\"https://avatars3.githubusercontent.com/u/29994884?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Geg Zakaryan</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=zakaryan2004\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Azakaryan2004\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n    <td align=\"center\"><a href=\"https://www.hakanbogan.com\"><img src=\"https://avatars1.githubusercontent.com/u/24498747?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Hakan Bo\u011fan</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Aredrussianarmy\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"https://github.com/NicKoehler\"><img src=\"https://avatars3.githubusercontent.com/u/53040044?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>NicKoehler</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/issues?q=author%3ANicKoehler\" title=\"Bug reports\">\ud83d\udc1b</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=NicKoehler\" title=\"Code\">\ud83d\udcbb</a></td>\n    <td align=\"center\"><a href=\"https://github.com/chris4540\"><img src=\"https://avatars1.githubusercontent.com/u/12794588?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>ChrisLin</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Achris4540\" title=\"Bug reports\">\ud83d\udc1b</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=chris4540\" title=\"Code\">\ud83d\udcbb</a></td>\n    <td align=\"center\"><a href=\"http://pete.world\"><img src=\"https://avatars.githubusercontent.com/u/10454135?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Pietro</b></sub></a><br /><a href=\"https://github.com/bisoncorps/search-engine-parser/commits?author=pgrandinetti\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/bisoncorps/search-engine-parser/issues?q=author%3Apgrandinetti\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "scrapes search engine pages for query titles, descriptions and links",
    "version": "0.6.8",
    "project_urls": {
        "Documentation": "https://search-engine-parser.readthedocs.io/en/latest",
        "Homepage": "https://github.com/bisoncorps/search-engine-parser",
        "Source": "https://github.com/bisoncorps/search-engine-parser"
    },
    "split_keywords": [
        "search-engine",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "search",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "parser",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "google",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "yahoo",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "bing",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "yandex",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "stackoverflow",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "github",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "baidu"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e1ba34658d7432fe8d7b87eeeaea92cd853c962305876e9139c8e8f9e173f29c",
                "md5": "3a2871af120de6d123fbc245f3b86b39",
                "sha256": "ef5e046a2059e90d199c116f69277f6008e384c10363e483d020abfa305e5c8a"
            },
            "downloads": -1,
            "filename": "search_engine_parser-0.6.8-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3a2871af120de6d123fbc245f3b86b39",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.5",
            "size": 37933,
            "upload_time": "2022-11-21T22:22:21",
            "upload_time_iso_8601": "2022-11-21T22:22:21.939001Z",
            "url": "https://files.pythonhosted.org/packages/e1/ba/34658d7432fe8d7b87eeeaea92cd853c962305876e9139c8e8f9e173f29c/search_engine_parser-0.6.8-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cf83510ce907753919812bec1a2e2a279443f50aadb1a64ab2adc16fca0b8dea",
                "md5": "5d209d53424304d4f4504409f80785a5",
                "sha256": "26a28b9dee1ccf5f5c228dce697cc3c0dbe38cd68062c72d68da9a9ef434838f"
            },
            "downloads": -1,
            "filename": "search-engine-parser-0.6.8.tar.gz",
            "has_sig": false,
            "md5_digest": "5d209d53424304d4f4504409f80785a5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.5",
            "size": 29179,
            "upload_time": "2022-11-21T22:22:23",
            "upload_time_iso_8601": "2022-11-21T22:22:23.543146Z",
            "url": "https://files.pythonhosted.org/packages/cf/83/510ce907753919812bec1a2e2a279443f50aadb1a64ab2adc16fca0b8dea/search-engine-parser-0.6.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2022-11-21 22:22:23",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bisoncorps",
    "github_project": "search-engine-parser",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "search-engine-parser"
}
        
Elapsed time: 2.97005s