Skip to content

gerapyvsgracy

MIT 74 4 3,495
514 (month) Jul 04 2017 0.9.13(2023-07-19 18:53:46 ago)
248 2 - MIT
Feb 05 2023 6.8 thousand (month) 1.34.0(2024-11-27 14:57:34 ago)

Gerapy is a Distributed Crawler Management Framework Based on Scrapy, Scrapyd, Scrapyd-Client, Scrapyd-API, Django and Vue.js.

It is built on top of the Scrapy framework and provides a simple and easy-to-use interface for performing web scraping tasks. Gerapy also includes features such as support for scheduling and distributed crawling, as well as a built-in web-based dashboard for monitoring and managing scraping tasks. Additionally, Gerapy is designed to be highly extensible, allowing users to easily create custom plugins and integrations.

Overall, Gerapy is a useful tool for those looking to automate web scraping tasks and extract data from websites.

Gracy is an API client library based on httpx that provides an extra stability layer with:

  • Retry logic
  • Logging
  • Connection throttling
  • Tracking/Middleware

In web scraping, Gracy can be a convenient tool for creating scraper based API clients.

Example Use


```python # 0. Import import asyncio from typing import Awaitable from gracy import BaseEndpoint, Gracy, GracyConfig, LogEvent, LogLevel # 1. Define your endpoints class PokeApiEndpoint(BaseEndpoint): GET_POKEMON = "/pokemon/{NAME}" # 👈 Put placeholders as needed # 2. Define your Graceful API class GracefulPokeAPI(Gracy[str]): class Config: # type: ignore BASE_URL = "https://pokeapi.co/api/v2/" # 👈 Optional BASE_URL # 👇 Define settings to apply for every request SETTINGS = GracyConfig( log_request=LogEvent(LogLevel.DEBUG), log_response=LogEvent(LogLevel.INFO, "{URL} took {ELAPSED}"), parser={ "default": lambda r: r.json() } ) async def get_pokemon(self, name: str) -> Awaitable[dict]: return await self.get(PokeApiEndpoint.GET_POKEMON, {"NAME": name}) # Note: since Gracy is based on httpx we can customized the used client with custom headers etc" def _create_client(self) -> httpx.AsyncClient: client = super()._create_client() client.headers = {"User-Agent": f"My Scraper"} return client pokeapi = GracefulPokeAPI() async def main(): try: pokemon = await pokeapi.get_pokemon("pikachu") print(pokemon) finally: pokeapi.report_status("rich") asyncio.run(main()) ```

Alternatives / Similar


Was this page helpful?