diff --git a/README.md b/README.md index a34bacca..3187ec84 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ To create and run Actors through Apify Console, see the [Console documentation](https://docs.apify.com/academy/getting-started/creating-actors#choose-your-template). To create and run Python Actors locally, check the documentation for -[how to create and run Python Actors locally](https://docs.apify.com/sdk/python/docs/quick-start). +[how to create and run Python Actors locally](https://docs.apify.com/sdk/python/docs/overview/running-locally). ## Guides diff --git a/docs/01_introduction/index.mdx b/docs/01_introduction/index.mdx deleted file mode 100644 index 3303b0d1..00000000 --- a/docs/01_introduction/index.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: introduction -title: Overview -sidebar_label: Overview -description: 'The official library for creating Apify Actors in Python, providing tools for web scraping, automation, and data storage integration.' ---- - -The Apify SDK for Python is the official library for creating [Apify Actors](https://docs.apify.com/platform/actors) in Python. - -It provides tools and classes for web scraping and automation, allowing you to manage Actor lifecycles, handle data storage, work with proxies, and integrate with popular Python libraries. - -## Example - -Here's a simple example of an Actor that scrapes a web page and stores the result: - -```py -from apify import Actor -from bs4 import BeautifulSoup -import requests - -async def main(): - async with Actor: - input = await Actor.get_input() - response = requests.get(input['url']) - soup = BeautifulSoup(response.content, 'html.parser') - await Actor.push_data({ 'url': input['url'], 'title': soup.title.string }) -``` - -## Features - -The Apify SDK for Python provides: - -- **Actor lifecycle management** - Handle initialization, teardown, and graceful shutdowns -- **Storage management** - Work with Datasets, Key-Value Stores, and Request Queues -- **Event handling** - Respond to Actor events like migration, abort, and system info -- **Proxy management** - Rotate and manage proxies for web scraping -- **Platform integration** - Interact with other Actors, webhooks, and the Apify API -- **Framework compatibility** - Integrate with BeautifulSoup, Playwright, Selenium, Scrapy, and Crawlee - -## Next steps - -- **[Installation](./installation)** - Install the SDK and set up your development environment -- **[Quick start](./quick-start)** - Create and run your first Actor -- **[Concepts](../concepts/actor-lifecycle)** - Learn about core SDK concepts -- **[Guides](../guides/beautiful-soup)** - See how to integrate with popular libraries diff --git a/docs/01_introduction/installation.mdx b/docs/01_introduction/installation.mdx deleted file mode 100644 index e8d6c765..00000000 --- a/docs/01_introduction/installation.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Installation -sidebar_label: Installation -description: 'Learn how to install the Apify SDK for Python using pip and manage dependencies for your Actor projects.' ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import CodeBlock from '@theme/CodeBlock'; - -## Requirements - -The Apify SDK requires Python version 3.10 or above to run Python Actors locally. - -## Installation - -The Apify Python SDK is available as [`apify`](https://pypi.org/project/apify/) package on PyPi. To install it, run: - -```bash -pip install apify -``` - -When you create an Actor using the Apify CLI, the Apify SDK for Python is installed for you automatically. - -If you are not developing Apify Actors and you just need to access the Apify API from Python, -consider using the [Apify API client for Python](/api/client/python) directly. - -## Adding dependencies - -First, add the dependencies in the [`requirements.txt`](https://pip.pypa.io/en/stable/reference/requirements-file-format/) file in the Actor source folder. - -Then activate the virtual environment in `.venv`: - - - - { -`source .venv/bin/activate` - } - - - { -`.venv\\Scripts\\activate` - } - - - -Finally, install the dependencies: - -```bash -python -m pip install -r requirements.txt -``` diff --git a/docs/01_introduction/code/01_introduction.py b/docs/01_overview/code/01_introduction.py similarity index 100% rename from docs/01_introduction/code/01_introduction.py rename to docs/01_overview/code/01_introduction.py diff --git a/docs/01_introduction/code/actor_structure/__init__.py b/docs/01_overview/code/actor_structure/__init__.py similarity index 100% rename from docs/01_introduction/code/actor_structure/__init__.py rename to docs/01_overview/code/actor_structure/__init__.py diff --git a/docs/01_introduction/code/actor_structure/__main__.py b/docs/01_overview/code/actor_structure/__main__.py similarity index 100% rename from docs/01_introduction/code/actor_structure/__main__.py rename to docs/01_overview/code/actor_structure/__main__.py diff --git a/docs/01_introduction/code/actor_structure/main.py b/docs/01_overview/code/actor_structure/main.py similarity index 100% rename from docs/01_introduction/code/actor_structure/main.py rename to docs/01_overview/code/actor_structure/main.py diff --git a/docs/01_introduction/code/actor_structure/py.typed b/docs/01_overview/code/actor_structure/py.typed similarity index 100% rename from docs/01_introduction/code/actor_structure/py.typed rename to docs/01_overview/code/actor_structure/py.typed diff --git a/docs/01_introduction/images/apify-create.gif b/docs/01_overview/images/apify-create.gif similarity index 100% rename from docs/01_introduction/images/apify-create.gif rename to docs/01_overview/images/apify-create.gif diff --git a/docs/01_introduction/quick-start.mdx b/docs/01_overview/index.mdx similarity index 68% rename from docs/01_introduction/quick-start.mdx rename to docs/01_overview/index.mdx index 1ebfca8d..f9ab4741 100644 --- a/docs/01_introduction/quick-start.mdx +++ b/docs/01_overview/index.mdx @@ -1,18 +1,47 @@ --- -title: Quick start -sidebar_label: Quick start -description: 'Get started with the Apify SDK for Python by creating your first Actor and learning the basics.' ---- - -Learn how to create and run Actors using the Apify SDK for Python. - +title: Overview +sidebar_label: Overview --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; -## Step 1: Creating Actors +The Apify SDK for Python is the official library for creating [Apify Actors](https://docs.apify.com/platform/actors) in Python. + +```py +from apify import Actor +from bs4 import BeautifulSoup +import requests + +async def main(): + async with Actor: + input = await Actor.get_input() + response = requests.get(input['url']) + soup = BeautifulSoup(response.content, 'html.parser') + await Actor.push_data({ 'url': input['url'], 'title': soup.title.string }) +``` + +## Requirements + +The Apify SDK requires Python version 3.10 or above to run Python Actors locally. + +## Installation + +The Apify Python SDK is available as [`apify`](https://pypi.org/project/apify/) package on PyPi. To install it, run: + +```bash +pip install apify +``` + +When you create an Actor using the Apify CLI, the Apify SDK for Python is installed for you automatically. + +If you are not developing Apify Actors and you just need to access the Apify API from Python, +consider using the [Apify API client for Python](/api/client/python) directly. + +## Quick start + +### Creating Actors To create and run Actors in Apify Console, refer to the [Console documentation](/platform/actors/development/quick-start/web-ide). @@ -26,9 +55,9 @@ apify create my-first-actor --template python-start This will create a new folder called `my-first-actor`, download and extract the "Getting started with Python" Actor template there, create a virtual environment in `my-first-actor/.venv`, and install the Actor dependencies in it. -![actor create command run](./images/apify-create.gif) +![actor create command run](../01_overview/images/apify-create.gif) -## Step 2: Running the Actor +#### Running the Actor To run the Actor, you can use the [`apify run` command](/cli/docs/reference#apify-run): @@ -45,7 +74,7 @@ This command: The Actor input, for example, will be in `storage/key_value_stores/default/INPUT.json`. -## Step 3: Understanding Actor structure +## Actor structure All Python Actor templates follow the same structure. @@ -93,6 +122,31 @@ asyncio.run(main())` If you want to modify the Actor structure, you need to make sure that your Actor is executable as a module, via `python -m src`, as that is the command started by `apify run` in the Apify CLI. We recommend keeping the entrypoint for the Actor in the `src/__main__.py` file. +## Adding dependencies + +First, add the dependencies in the [`requirements.txt`](https://pip.pypa.io/en/stable/reference/requirements-file-format/) file in the Actor source folder. + +Then activate the virtual environment in `.venv`: + + + + { +`source .venv/bin/activate` + } + + + { +`.venv\\Scripts\\activate` + } + + + +Finally, install the dependencies: + +```bash +python -m pip install -r requirements.txt +``` + ## Next steps ### Guides diff --git a/docs/03_guides/07_running_webserver.mdx b/docs/02_concepts/09_running_webserver.mdx similarity index 95% rename from docs/03_guides/07_running_webserver.mdx rename to docs/02_concepts/09_running_webserver.mdx index d9deedc1..30a80722 100644 --- a/docs/03_guides/07_running_webserver.mdx +++ b/docs/02_concepts/09_running_webserver.mdx @@ -5,7 +5,7 @@ title: Running webserver in your Actor import RunnableCodeBlock from '@site/src/components/RunnableCodeBlock'; -import WebserverExample from '!!raw-loader!roa-loader!./code/07_webserver.py'; +import WebserverExample from '!!raw-loader!roa-loader!./code/09_webserver.py'; Each Actor run on the Apify platform is assigned a unique hard-to-guess URL (for example `https://8segt5i81sokzm.runs.apify.net`), which enables HTTP access to an optional web server running inside the Actor run's container. diff --git a/docs/02_concepts/09_logging.mdx b/docs/02_concepts/10_logging.mdx similarity index 96% rename from docs/02_concepts/09_logging.mdx rename to docs/02_concepts/10_logging.mdx index c1bd26c6..6bdb754b 100644 --- a/docs/02_concepts/09_logging.mdx +++ b/docs/02_concepts/10_logging.mdx @@ -5,10 +5,10 @@ title: Logging import RunnableCodeBlock from '@site/src/components/RunnableCodeBlock'; -import LogConfigExample from '!!raw-loader!roa-loader!./code/09_log_config.py'; -import LoggerUsageExample from '!!raw-loader!roa-loader!./code/09_logger_usage.py'; -import RedirectLog from '!!raw-loader!roa-loader!./code/09_redirect_log.py'; -import RedirectLogExistingRun from '!!raw-loader!roa-loader!./code/09_redirect_log_existing_run.py'; +import LogConfigExample from '!!raw-loader!roa-loader!./code/10_log_config.py'; +import LoggerUsageExample from '!!raw-loader!roa-loader!./code/10_logger_usage.py'; +import RedirectLog from '!!raw-loader!roa-loader!./code/10_redirect_log.py'; +import RedirectLogExistingRun from '!!raw-loader!roa-loader!./code/10_redirect_log_existing_run.py'; The Apify SDK is logging useful information through the [`logging`](https://docs.python.org/3/library/logging.html) module from Python's standard library, into the logger with the name `apify`. diff --git a/docs/02_concepts/10_configuration.mdx b/docs/02_concepts/11_configuration.mdx similarity index 96% rename from docs/02_concepts/10_configuration.mdx rename to docs/02_concepts/11_configuration.mdx index 4d1e83e8..bcc4ea00 100644 --- a/docs/02_concepts/10_configuration.mdx +++ b/docs/02_concepts/11_configuration.mdx @@ -5,7 +5,7 @@ title: Actor configuration import RunnableCodeBlock from '@site/src/components/RunnableCodeBlock'; -import ConfigExample from '!!raw-loader!roa-loader!./code/10_config.py'; +import ConfigExample from '!!raw-loader!roa-loader!./code/11_config.py'; The [`Actor`](../../reference/class/Actor) class gets configured using the [`Configuration`](../../reference/class/Configuration) class, which initializes itself based on the provided environment variables. diff --git a/docs/02_concepts/11_pay_per_event.mdx b/docs/02_concepts/12_pay_per_event.mdx similarity index 97% rename from docs/02_concepts/11_pay_per_event.mdx rename to docs/02_concepts/12_pay_per_event.mdx index e51938b3..1c1653b1 100644 --- a/docs/02_concepts/11_pay_per_event.mdx +++ b/docs/02_concepts/12_pay_per_event.mdx @@ -4,8 +4,8 @@ title: Pay-per-event monetization description: Monetize your Actors using the pay-per-event pricing model --- -import ActorChargeSource from '!!raw-loader!roa-loader!./code/11_actor_charge.py'; -import ConditionalActorChargeSource from '!!raw-loader!roa-loader!./code/11_conditional_actor_charge.py'; +import ActorChargeSource from '!!raw-loader!roa-loader!./code/12_actor_charge.py'; +import ConditionalActorChargeSource from '!!raw-loader!roa-loader!./code/12_conditional_actor_charge.py'; import ApiLink from '@site/src/components/ApiLink'; import RunnableCodeBlock from '@site/src/components/RunnableCodeBlock'; diff --git a/docs/03_guides/code/07_webserver.py b/docs/02_concepts/code/09_webserver.py similarity index 100% rename from docs/03_guides/code/07_webserver.py rename to docs/02_concepts/code/09_webserver.py diff --git a/docs/02_concepts/code/09_log_config.py b/docs/02_concepts/code/10_log_config.py similarity index 100% rename from docs/02_concepts/code/09_log_config.py rename to docs/02_concepts/code/10_log_config.py diff --git a/docs/02_concepts/code/09_logger_usage.py b/docs/02_concepts/code/10_logger_usage.py similarity index 100% rename from docs/02_concepts/code/09_logger_usage.py rename to docs/02_concepts/code/10_logger_usage.py diff --git a/docs/02_concepts/code/09_redirect_log.py b/docs/02_concepts/code/10_redirect_log.py similarity index 100% rename from docs/02_concepts/code/09_redirect_log.py rename to docs/02_concepts/code/10_redirect_log.py diff --git a/docs/02_concepts/code/09_redirect_log_existing_run.py b/docs/02_concepts/code/10_redirect_log_existing_run.py similarity index 100% rename from docs/02_concepts/code/09_redirect_log_existing_run.py rename to docs/02_concepts/code/10_redirect_log_existing_run.py diff --git a/docs/02_concepts/code/10_config.py b/docs/02_concepts/code/11_config.py similarity index 100% rename from docs/02_concepts/code/10_config.py rename to docs/02_concepts/code/11_config.py diff --git a/docs/02_concepts/code/11_actor_charge.py b/docs/02_concepts/code/12_actor_charge.py similarity index 100% rename from docs/02_concepts/code/11_actor_charge.py rename to docs/02_concepts/code/12_actor_charge.py diff --git a/docs/02_concepts/code/11_conditional_actor_charge.py b/docs/02_concepts/code/12_conditional_actor_charge.py similarity index 100% rename from docs/02_concepts/code/11_conditional_actor_charge.py rename to docs/02_concepts/code/12_conditional_actor_charge.py diff --git a/pyproject.toml b/pyproject.toml index 743ebbd3..a6fa3265 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,7 +56,7 @@ scrapy = ["scrapy>=2.11.0"] "Apify Homepage" = "https://apify.com" "Changelog" = "https://docs.apify.com/sdk/python/docs/changelog" "Discord" = "https://discord.com/invite/jyEM2PRvMU" -"Documentation" = "https://docs.apify.com/sdk/python/docs/introduction" +"Documentation" = "https://docs.apify.com/sdk/python/docs/overview/introduction" "Homepage" = "https://docs.apify.com/sdk/python/" "Issue Tracker" = "https://github.com/apify/apify-sdk-python/issues" "Release Notes" = "https://docs.apify.com/sdk/python/docs/upgrading/upgrading-to-v2" diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 66f71a9b..8cf423ce 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -66,7 +66,7 @@ module.exports = { title: 'SDK for Python', items: [ { - to: 'docs/introduction', + to: 'docs/overview', label: 'Docs', position: 'left', activeBaseRegex: '/docs(?!/changelog)', diff --git a/website/sidebars.js b/website/sidebars.js index 6338267d..b5e55e1e 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -1,15 +1,8 @@ module.exports = { sidebar: [ { - type: 'category', - label: 'Introduction', - collapsed: false, - items: [ - { - type: 'autogenerated', - dirName: '01_introduction', - }, - ], + type: 'doc', + id: 'overview/index', }, { type: 'category', diff --git a/website/src/pages/index.js b/website/src/pages/index.js index f9261ba0..3ac15db1 100644 --- a/website/src/pages/index.js +++ b/website/src/pages/index.js @@ -35,7 +35,7 @@ function Hero() {
- Get Started + Get Started