Search¶
The search layer abstracts web search engines behind a common interface.
BingEngine is the built-in backend; custom engines can be plugged in by
subclassing BaseSearchEngine.
BingEngine¶
Bases: BaseSearchEngine
Search engine backend powered by Bing.
Fetches the Bing search results page for a given query and scrapes the top organic results. Bing encodes destination URLs in a base64 tracking wrapper — this is decoded transparently so callers always receive the real destination URL.
Attributes:
| Name | Type | Description |
|---|---|---|
BASE_URL |
Bing search URL template. |
Example
from go2web.search.engines.bing import BingEngine engine = BingEngine() results = engine.search("python packaging", limit=3) for r in results: ... print(r.rank, r.title)
Source code in src/go2web/search/engines/bing.py
__init__(client=None)
¶
Initialise the engine.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
client
|
HTTPClient | None
|
An :class: |
None
|
Source code in src/go2web/search/engines/bing.py
search(query, limit=10)
¶
Query Bing and return up to limit organic results.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
query
|
str
|
The search query string. |
required |
limit
|
int
|
Maximum number of results to return (default |
10
|
Returns:
| Type | Description |
|---|---|
list[SearchResult]
|
A list of :class: |
list[SearchResult]
|
ordered by their position on the results page. |
Source code in src/go2web/search/engines/bing.py
SearchResult¶
A single search engine result.
Attributes:
| Name | Type | Description |
|---|---|---|
rank |
int
|
1-based position on the results page. |
title |
str
|
The page title as displayed in search results. |
url |
str
|
The destination URL after Bing tracking is decoded. |
Example
from go2web.search.result import SearchResult r = SearchResult(rank=1, title="Python.org", url="https://python.org") r.rank 1
Source code in src/go2web/search/result.py
BaseSearchEngine (abstract)¶
Bases: ABC
Interface for web search engine backends.
Subclass :class:BaseSearchEngine to add support for a new search
provider. The only required method is :meth:search.
Example
A minimal custom engine:
from go2web.search.engines.base import BaseSearchEngine from go2web.search.result import SearchResult
class MyEngine(BaseSearchEngine): ... def search(self, query: str, limit: int = 10) -> list[SearchResult]: ... return [SearchResult(rank=1, title="Example", url="https://example.com")]
Source code in src/go2web/search/engines/base.py
search(query, limit=10)
abstractmethod
¶
Search for query and return up to limit results.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
query
|
str
|
The search query string. |
required |
limit
|
int
|
Maximum number of results to return. |
10
|
Returns:
| Type | Description |
|---|---|
list[SearchResult]
|
A list of :class: |
list[SearchResult]
|
ordered by relevance rank. |