From 4ec66874fd36a6a66118a43423eddf6f764437a3 Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Thu, 16 Oct 2025 09:38:26 +0200 Subject: [PATCH 1/4] style: make Vale happy about Gzip --- .../advanced_web_scraping/crawling/sitemaps-vs-search.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/academy/webscraping/advanced_web_scraping/crawling/sitemaps-vs-search.md b/sources/academy/webscraping/advanced_web_scraping/crawling/sitemaps-vs-search.md index f34b24d261..61c82b1ff3 100644 --- a/sources/academy/webscraping/advanced_web_scraping/crawling/sitemaps-vs-search.md +++ b/sources/academy/webscraping/advanced_web_scraping/crawling/sitemaps-vs-search.md @@ -31,7 +31,7 @@ Sitemap is usually a simple XML file that contains a list of all pages on the we - _Does not directly reflect the website_ - There is no way you can ensure that all pages on the website are in the sitemap. The sitemap also can contain pages that were already removed and will return 404s. This is a major downside of sitemaps which prevents us from using them as the only source of URLs. - _Updated in intervals_ - Sitemaps are usually not updated in real-time. This means that you might miss some pages if you scrape them too soon after they were added to the website. Common update intervals are 1 day or 1 week. - _Hard to find or unavailable_ - Sitemaps are not always trivial to locate. They can be deployed on a CDN with unpredictable URLs. Sometimes they are not available at all. -- _Streamed, compressed, and archived_ - Sitemaps are often streamed and archived with .tgz extensions and compressed with gzip. This means that you cannot use default HTTP client settings and must handle these cases with extra code or use a scraping framework. +- _Streamed, compressed, and archived_ - Sitemaps are often streamed and archived with .tgz extensions and compressed with Gzip. This means that you cannot use default HTTP client settings and must handle these cases with extra code or use a scraping framework. ## Pros and cons of categories, search, and filters From 056dc597017064b8edd1e3a06ab4f6bc17fd6e3c Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Thu, 16 Oct 2025 09:48:11 +0200 Subject: [PATCH 2/4] style: make Vale happy about H1s --- sources/academy/glossary/concepts/robot_process_automation.md | 4 +--- .../tutorials/node_js/analyzing_pages_and_fixing_errors.md | 2 -- .../academy/tutorials/node_js/dealing_with_dynamic_pages.md | 2 -- .../webscraping/anti_scraping/mitigation/using_proxies.md | 2 -- .../puppeteer_playwright/executing_scripts/extracting_data.md | 2 -- sources/academy/webscraping/puppeteer_playwright/index.md | 4 +--- .../puppeteer_playwright/page/interacting_with_a_page.md | 4 +--- 7 files changed, 3 insertions(+), 17 deletions(-) diff --git a/sources/academy/glossary/concepts/robot_process_automation.md b/sources/academy/glossary/concepts/robot_process_automation.md index 27d61dcdee..8695285fdd 100644 --- a/sources/academy/glossary/concepts/robot_process_automation.md +++ b/sources/academy/glossary/concepts/robot_process_automation.md @@ -1,12 +1,10 @@ --- -title: Robotic process automation +title: What is robotic process automation (RPA) description: Learn the basics of robotic process automation. Make your processes on the web and other software more efficient by automating repetitive tasks. sidebar_position: 8.7 slug: /concepts/robotic-process-automation --- -# What is robotic process automation (RPA)? {#what-is-robotic-process-automation-rpa} - **Learn the basics of robotic process automation. Make your processes on the web and other software more efficient by automating repetitive tasks.** --- diff --git a/sources/academy/tutorials/node_js/analyzing_pages_and_fixing_errors.md b/sources/academy/tutorials/node_js/analyzing_pages_and_fixing_errors.md index 892a3dd59b..316beb5ee2 100644 --- a/sources/academy/tutorials/node_js/analyzing_pages_and_fixing_errors.md +++ b/sources/academy/tutorials/node_js/analyzing_pages_and_fixing_errors.md @@ -5,8 +5,6 @@ sidebar_position: 14.1 slug: /node-js/analyzing-pages-and-fixing-errors --- -# How to analyze and fix errors when scraping a website {#scraping-with-sitemaps} - **Learn how to deal with random crashes in your web-scraping and automation jobs. Find out the essentials of debugging and fixing problems in your crawlers.** --- diff --git a/sources/academy/tutorials/node_js/dealing_with_dynamic_pages.md b/sources/academy/tutorials/node_js/dealing_with_dynamic_pages.md index 21b8aee9a7..f5a691fdeb 100644 --- a/sources/academy/tutorials/node_js/dealing_with_dynamic_pages.md +++ b/sources/academy/tutorials/node_js/dealing_with_dynamic_pages.md @@ -7,8 +7,6 @@ slug: /node-js/dealing-with-dynamic-pages import Example from '!!raw-loader!roa-loader!./dealing_with_dynamic_pages.js'; -# How to scrape from dynamic pages {#dealing-with-dynamic-pages} - **Learn about dynamic pages and dynamic content. How can we find out if a page is dynamic? How do we programmatically scrape dynamic content?** --- diff --git a/sources/academy/webscraping/anti_scraping/mitigation/using_proxies.md b/sources/academy/webscraping/anti_scraping/mitigation/using_proxies.md index 819a50c6fc..f824153761 100644 --- a/sources/academy/webscraping/anti_scraping/mitigation/using_proxies.md +++ b/sources/academy/webscraping/anti_scraping/mitigation/using_proxies.md @@ -5,8 +5,6 @@ sidebar_position: 2 slug: /anti-scraping/mitigation/using-proxies --- -# Using proxies {#using-proxies} - **Learn how to use and automagically rotate proxies in your scrapers by using Crawlee, and a bit about how to obtain pools of proxies.** --- diff --git a/sources/academy/webscraping/puppeteer_playwright/executing_scripts/extracting_data.md b/sources/academy/webscraping/puppeteer_playwright/executing_scripts/extracting_data.md index 4fb52aa83a..95313816cb 100644 --- a/sources/academy/webscraping/puppeteer_playwright/executing_scripts/extracting_data.md +++ b/sources/academy/webscraping/puppeteer_playwright/executing_scripts/extracting_data.md @@ -8,8 +8,6 @@ slug: /puppeteer-playwright/executing-scripts/collecting-data import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Extracting data {#extracting-data} - **Learn how to extract data from a page with evaluate functions, then how to parse it by using a second library called Cheerio.** --- diff --git a/sources/academy/webscraping/puppeteer_playwright/index.md b/sources/academy/webscraping/puppeteer_playwright/index.md index 77f8781993..939b1712ac 100644 --- a/sources/academy/webscraping/puppeteer_playwright/index.md +++ b/sources/academy/webscraping/puppeteer_playwright/index.md @@ -1,5 +1,5 @@ --- -title: Puppeteer & Playwright +title: Puppeteer & Playwright course description: Learn in-depth how to use two of the most popular Node.js libraries for controlling a headless browser - Puppeteer and Playwright. sidebar_position: 3 category: web scraping & automation @@ -9,8 +9,6 @@ slug: /puppeteer-playwright import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Puppeteer & Playwright course {#puppeteer-playwright-course} - **Learn in-depth how to use two of the most popular Node.js libraries for controlling a headless browser - Puppeteer and Playwright.** --- diff --git a/sources/academy/webscraping/puppeteer_playwright/page/interacting_with_a_page.md b/sources/academy/webscraping/puppeteer_playwright/page/interacting_with_a_page.md index ec1c5d0db7..99d0ecbbbb 100644 --- a/sources/academy/webscraping/puppeteer_playwright/page/interacting_with_a_page.md +++ b/sources/academy/webscraping/puppeteer_playwright/page/interacting_with_a_page.md @@ -8,15 +8,13 @@ slug: /puppeteer-playwright/page/interacting-with-a-page import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Interacting with a page {#interacting-with-a-page} - **Learn how to programmatically do actions on a page such as clicking, typing, and pressing keys. Also, discover a common roadblock that comes up when automating.** --- The **Page** object has a whole boat-load of functions which can be used to interact with the loaded page. We're not going to go over every single one of them right now, but we _will_ use a few of the most common ones to add some functionality to our current project. -Let's say that we want to automate searching for **hello world** on Google, then click on the first result and log the title of the page to the console, then take a screenshot and write it it to the filesystem. In order to understand how we're going to automate this, let's break down how we would do it manually: +Let's say that we want to automate searching for **hello world** on Google, then click on the first result and log the title of the page to the console, then take a screenshot and write it to the filesystem. In order to understand how we're going to automate this, let's break down how we would do it manually: 1. Click on the button which accepts Google's cookies policy (To see how it looks, open Google in an anonymous window.) 2. Type **hello world** into the search bar From 6d669b07de0040dd01da2504444fde15f611dc1d Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Thu, 16 Oct 2025 09:47:43 +0200 Subject: [PATCH 3/4] style: make Vale happy about H1s --- .../platform/expert_scraping_with_apify/actors_webhooks.md | 5 ++--- .../expert_scraping_with_apify/apify_api_and_client.md | 5 ++--- .../expert_scraping_with_apify/bypassing_anti_scraping.md | 5 ++--- .../expert_scraping_with_apify/managing_source_code.md | 5 ++--- .../migrations_maintaining_state.md | 5 ++--- .../expert_scraping_with_apify/saving_useful_stats.md | 7 +++---- .../solutions/handling_migrations.md | 5 ++--- .../platform/expert_scraping_with_apify/solutions/index.md | 2 -- .../solutions/integrating_webhooks.md | 5 ++--- .../solutions/managing_source.md | 5 ++--- .../solutions/rotating_proxies.md | 5 ++--- .../expert_scraping_with_apify/solutions/saving_stats.md | 5 ++--- .../solutions/using_api_and_client.md | 5 ++--- .../solutions/using_storage_creating_tasks.md | 5 ++--- .../expert_scraping_with_apify/tasks_and_storage.md | 5 ++--- 15 files changed, 29 insertions(+), 45 deletions(-) diff --git a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md index 53814c0033..974f363e40 100644 --- a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md +++ b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md @@ -1,12 +1,11 @@ --- -title: I - Webhooks & advanced Actor overview +title: Webhooks & advanced Actor overview description: Learn more advanced details about Actors, how they work, and the default configurations they can take. Also, learn how to integrate your Actor with webhooks. sidebar_position: 6.1 +sidebar_label: I - Webhooks & advanced Actor overview slug: /expert-scraping-with-apify/actors-webhooks --- -# Webhooks & advanced Actor overview {#webhooks-and-advanced-actors} - **Learn more advanced details about Actors, how they work, and the default configurations they can take. Also, learn how to integrate your Actor with webhooks.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/apify_api_and_client.md b/sources/academy/platform/expert_scraping_with_apify/apify_api_and_client.md index 02e55777f3..15e5e42266 100644 --- a/sources/academy/platform/expert_scraping_with_apify/apify_api_and_client.md +++ b/sources/academy/platform/expert_scraping_with_apify/apify_api_and_client.md @@ -1,12 +1,11 @@ --- -title: IV - Apify API & client +title: Apify API & client description: Gain an in-depth understanding of the two main ways of programmatically interacting with the Apify platform - through the API, and through a client. sidebar_position: 6.4 +sidebar_label: IV - Apify API & client slug: /expert-scraping-with-apify/apify-api-and-client --- -# Apify API & client {#api-and-client} - **Gain an in-depth understanding of the two main ways of programmatically interacting with the Apify platform - through the API, and through a client.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/bypassing_anti_scraping.md b/sources/academy/platform/expert_scraping_with_apify/bypassing_anti_scraping.md index ccc9c62f3e..e5f034e1aa 100644 --- a/sources/academy/platform/expert_scraping_with_apify/bypassing_anti_scraping.md +++ b/sources/academy/platform/expert_scraping_with_apify/bypassing_anti_scraping.md @@ -1,12 +1,11 @@ --- -title: VI - Bypassing anti-scraping methods +title: Bypassing anti-scraping methods description: Learn about bypassing anti-scraping methods using proxies and proxy/session rotation together with Crawlee and the Apify SDK. sidebar_position: 6.6 +sidebar_label: VI - Bypassing anti-scraping methods slug: /expert-scraping-with-apify/bypassing-anti-scraping --- -# Bypassing anti-scraping methods {#bypassing-anti-scraping-methods} - **Learn about bypassing anti-scraping methods using proxies and proxy/session rotation together with Crawlee and the Apify SDK.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md b/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md index 38d3fdaa95..e9cf36d342 100644 --- a/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md +++ b/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md @@ -1,12 +1,11 @@ --- -title: II - Managing source code +title: Managing source code description: Learn how to manage your Actor's source code more efficiently by integrating it with a GitHub repository. This is standard on the Apify platform. sidebar_position: 6.2 +sidebar_label: II - Managing source code slug: /expert-scraping-with-apify/managing-source-code --- -# Managing source code {#managing-source-code} - **Learn how to manage your Actor's source code more efficiently by integrating it with a GitHub repository. This is standard on the Apify platform.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/migrations_maintaining_state.md b/sources/academy/platform/expert_scraping_with_apify/migrations_maintaining_state.md index c59da80531..707e64fd7d 100644 --- a/sources/academy/platform/expert_scraping_with_apify/migrations_maintaining_state.md +++ b/sources/academy/platform/expert_scraping_with_apify/migrations_maintaining_state.md @@ -1,12 +1,11 @@ --- -title: V - Migrations & maintaining state +title: Migrations & maintaining state description: Learn about what Actor migrations are and how to handle them properly so that the state is not lost and runs can safely be resurrected. sidebar_position: 6.5 +sidebar_label: V - Migrations & maintaining state slug: /expert-scraping-with-apify/migrations-maintaining-state --- -# Migrations & maintaining state {#migrations-maintaining-state} - **Learn about what Actor migrations are and how to handle them properly so that the state is not lost and runs can safely be resurrected.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/saving_useful_stats.md b/sources/academy/platform/expert_scraping_with_apify/saving_useful_stats.md index bcb7cee71d..6bc13433f1 100644 --- a/sources/academy/platform/expert_scraping_with_apify/saving_useful_stats.md +++ b/sources/academy/platform/expert_scraping_with_apify/saving_useful_stats.md @@ -1,19 +1,18 @@ --- -title: VII - Saving useful run statistics +title: Saving useful run statistics description: Understand how to save statistics about an Actor's run, what types of statistics you can save, and why you might want to save them for a large-scale scraper. sidebar_position: 6.7 +sidebar_label: VII - Saving useful run statistics slug: /expert-scraping-with-apify/saving-useful-stats --- -# Saving useful run statistics {#savings-useful-run-statistics} - **Understand how to save statistics about an Actor's run, what types of statistics you can save, and why you might want to save them for a large-scale scraper.** --- Using Crawlee and the Apify SDK, we are now able to collect and format data coming directly from websites and save it into a Key-Value store or Dataset. This is great, but sometimes, we want to store some extra data about the run itself, or about each request. We might want to store some extra general run information separately from our results or potentially include statistics about each request within its corresponding dataset item. -The types of values that are saved are totally up to you, but the most common are error scores, number of total saved items, number of request retries, number of captchas hit, etc. Storing these values is not always necessary, but can be valuable when debugging and maintaining an Actor. As your projects scale, this will become more and more useful and important. +The types of values that are saved are totally up to you, but the most common are error scores, number of total saved items, number of request retries, number of CAPTCHAs hit, etc. Storing these values is not always necessary, but can be valuable when debugging and maintaining an Actor. As your projects scale, this will become more and more useful and important. ## Learning 🧠 {#learning} diff --git a/sources/academy/platform/expert_scraping_with_apify/solutions/handling_migrations.md b/sources/academy/platform/expert_scraping_with_apify/solutions/handling_migrations.md index 635971ff65..24399f8df6 100644 --- a/sources/academy/platform/expert_scraping_with_apify/solutions/handling_migrations.md +++ b/sources/academy/platform/expert_scraping_with_apify/solutions/handling_migrations.md @@ -1,12 +1,11 @@ --- -title: V - Handling migrations +title: Handling migrations description: Get real-world experience of maintaining a stateful object stored in memory, which will be persisted through migrations and even graceful aborts. sidebar_position: 5 +sidebar_label: V - Handling migrations slug: /expert-scraping-with-apify/solutions/handling-migrations --- -# Handling migrations {#handling-migrations} - **Get real-world experience of maintaining a stateful object stored in memory, which will be persisted through migrations and even graceful aborts.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/solutions/index.md b/sources/academy/platform/expert_scraping_with_apify/solutions/index.md index e9d71e69db..171cfd8dc3 100644 --- a/sources/academy/platform/expert_scraping_with_apify/solutions/index.md +++ b/sources/academy/platform/expert_scraping_with_apify/solutions/index.md @@ -5,8 +5,6 @@ sidebar_position: 6.7 slug: /expert-scraping-with-apify/solutions --- -# Solutions - **View all of the solutions for all of the activities and tasks of this course. Please try to complete each task on your own before reading the solution!** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/solutions/integrating_webhooks.md b/sources/academy/platform/expert_scraping_with_apify/solutions/integrating_webhooks.md index 301eab24d2..a1e1e89b8a 100644 --- a/sources/academy/platform/expert_scraping_with_apify/solutions/integrating_webhooks.md +++ b/sources/academy/platform/expert_scraping_with_apify/solutions/integrating_webhooks.md @@ -1,12 +1,11 @@ --- -title: I - Integrating webhooks +title: Integrating webhooks description: Learn how to integrate webhooks into your Actors. Webhooks are a super powerful tool, and can be used to do almost anything! sidebar_position: 1 +sidebar_label: I - Integrating webhooks slug: /expert-scraping-with-apify/solutions/integrating-webhooks --- -# Integrating webhooks {#integrating-webhooks} - **Learn how to integrate webhooks into your Actors. Webhooks are a super powerful tool, and can be used to do almost anything!** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/solutions/managing_source.md b/sources/academy/platform/expert_scraping_with_apify/solutions/managing_source.md index 2273af81ed..9fed4b5d2d 100644 --- a/sources/academy/platform/expert_scraping_with_apify/solutions/managing_source.md +++ b/sources/academy/platform/expert_scraping_with_apify/solutions/managing_source.md @@ -1,12 +1,11 @@ --- -title: II - Managing source +title: Managing source description: View in-depth answers for all three of the quiz questions that were provided in the corresponding lesson about managing source code. sidebar_position: 2 +sidebar_label: II - Managing source slug: /expert-scraping-with-apify/solutions/managing-source --- -# Managing source - **View in-depth answers for all three of the quiz questions that were provided in the corresponding lesson about managing source code.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/solutions/rotating_proxies.md b/sources/academy/platform/expert_scraping_with_apify/solutions/rotating_proxies.md index 04fdd869d6..88755208eb 100644 --- a/sources/academy/platform/expert_scraping_with_apify/solutions/rotating_proxies.md +++ b/sources/academy/platform/expert_scraping_with_apify/solutions/rotating_proxies.md @@ -1,12 +1,11 @@ --- -title: VI - Rotating proxies/sessions +title: Rotating proxies/sessions description: Learn firsthand how to rotate proxies and sessions in order to avoid the majority of the most common anti-scraping protections. sidebar_position: 6 +sidebar_label: VI - Rotating proxies/sessions slug: /expert-scraping-with-apify/solutions/rotating-proxies --- -# Rotating proxies/sessions {#rotating-proxy-sessions} - **Learn firsthand how to rotate proxies and sessions in order to avoid the majority of the most common anti-scraping protections.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/solutions/saving_stats.md b/sources/academy/platform/expert_scraping_with_apify/solutions/saving_stats.md index a730536c7d..3915dee01c 100644 --- a/sources/academy/platform/expert_scraping_with_apify/solutions/saving_stats.md +++ b/sources/academy/platform/expert_scraping_with_apify/solutions/saving_stats.md @@ -1,12 +1,11 @@ --- -title: VII - Saving run stats +title: Saving run stats description: Implement the saving of general statistics about an Actor's run, as well as adding request-specific statistics to dataset items. sidebar_position: 7 +sidebar_label: VII - Saving run stats slug: /expert-scraping-with-apify/solutions/saving-stats --- -# Saving run stats {#saving-stats} - **Implement the saving of general statistics about an Actor's run, as well as adding request-specific statistics to dataset items.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/solutions/using_api_and_client.md b/sources/academy/platform/expert_scraping_with_apify/solutions/using_api_and_client.md index c5633be937..e2cf1cf0d3 100644 --- a/sources/academy/platform/expert_scraping_with_apify/solutions/using_api_and_client.md +++ b/sources/academy/platform/expert_scraping_with_apify/solutions/using_api_and_client.md @@ -1,12 +1,11 @@ --- -title: IV - Using the Apify API & JavaScript client +title: Using the Apify API & JavaScript client description: Learn how to interact with the Apify API directly through the well-documented RESTful routes, or by using the proprietary Apify JavaScript client. sidebar_position: 4 +sidebar_label: IV - Using the Apify API & JavaScript client slug: /expert-scraping-with-apify/solutions/using-api-and-client --- -# Using the Apify API & JavaScript client {#using-api-and-client} - **Learn how to interact with the Apify API directly through the well-documented RESTful routes, or by using the proprietary Apify JavaScript client.** --- diff --git a/sources/academy/platform/expert_scraping_with_apify/solutions/using_storage_creating_tasks.md b/sources/academy/platform/expert_scraping_with_apify/solutions/using_storage_creating_tasks.md index 5c01c45a8f..4df5c3d43f 100644 --- a/sources/academy/platform/expert_scraping_with_apify/solutions/using_storage_creating_tasks.md +++ b/sources/academy/platform/expert_scraping_with_apify/solutions/using_storage_creating_tasks.md @@ -1,12 +1,11 @@ --- -title: III - Using storage & creating tasks +title: Using storage & creating tasks description: Get quiz answers and explanations for the lesson about using storage and creating tasks on the Apify platform. sidebar_position: 3 +sidebar_label: III - Using storage & creating tasks slug: /expert-scraping-with-apify/solutions/using-storage-creating-tasks --- -# Using storage & creating tasks {#using-storage-creating-tasks} - ## Quiz answers 📝 {#quiz-answers} **Q: What is the relationship between Actors and tasks?** diff --git a/sources/academy/platform/expert_scraping_with_apify/tasks_and_storage.md b/sources/academy/platform/expert_scraping_with_apify/tasks_and_storage.md index d18009c241..ea5640c14d 100644 --- a/sources/academy/platform/expert_scraping_with_apify/tasks_and_storage.md +++ b/sources/academy/platform/expert_scraping_with_apify/tasks_and_storage.md @@ -1,12 +1,11 @@ --- -title: III - Tasks & storage +title: Tasks & storage description: Understand how to save the configurations for Actors with Actor tasks. Also, learn about storage and the different types Apify offers. sidebar_position: 6.3 +sidebar_label: III - Tasks & storage slug: /expert-scraping-with-apify/tasks-and-storage --- -# Tasks & storage {#tasks-and-storage} - **Understand how to save the configurations for Actors with Actor tasks. Also, learn about storage and the different types Apify offers.** --- From 592c3f20878a5708d407871def3006051d41c337 Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Thu, 16 Oct 2025 09:59:21 +0200 Subject: [PATCH 4/4] style: make the link more comprehensive --- .../platform/expert_scraping_with_apify/actors_webhooks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md index 974f363e40..fe698cb08d 100644 --- a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md +++ b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md @@ -14,7 +14,7 @@ Thus far, you've run Actors on the platform and written an Actor of your own, wh ## Advanced Actor overview {#advanced-actors} -In this course, we'll be working out of the Amazon scraper project from the **Web scraping basics for JavaScript devs** course. If you haven't already built that project, you can do it in three short lessons [here](../../webscraping/scraping_basics_javascript/challenge/index.md). We've made a few small modifications to the project with the Apify SDK, but 99% of the code is still the same. +In this course, we'll be working out of the Amazon scraper project from the **Web scraping basics for JavaScript devs** course. If you haven't already built that project, you can do it in [three short lessons](../../webscraping/scraping_basics_javascript/challenge/index.md). We've made a few small modifications to the project with the Apify SDK, but 99% of the code is still the same. Take another look at the files within your Amazon scraper project. You'll notice that there is a **Dockerfile**. Every single Actor has a Dockerfile (the Actor's **Image**) which tells Docker how to spin up a container on the Apify platform which can successfully run the Actor's code. "Apify Actors" is a serverless platform that runs multiple Docker containers. For a deeper understanding of Actor Dockerfiles, refer to the [Apify Actor Dockerfile docs](/sdk/js/docs/guides/docker-images#example-dockerfile).