VOOZH about

URL: https://apify.com/lukaskrivka/rust-input-function-example

⇱ Rust Input Function Example · Apify


👁 Rust Input Function Example avatar

Rust Input Function Example

Pricing

Pay per usage

Go to Apify Store

Rust Input Function Example

Dynamically compile and run input-provided page function. Like Cheerio Scraper but in Rust.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

👁 Lukáš Křivka

Lukáš Křivka

Maintained by Community

Actor stats

2

Bookmarked

5

Total users

0

Monthly active users

2 months ago

Last modified

Share

Example actor showcasing running a user-provided function in a static-typed compiled language.

How does it work

  1. Reads the input from disk or via Apify API
  2. Extracts the page_function string from the input
  3. Stores the page_function string to the disk
  4. Spawns a system process using cargo to compile the page_function into a dynamic library
  5. Dynamically links the library and converts the page_function into a regular Rust function. It must adhere to predefined input/output types.
  6. The example code gets HTML from the input provided url and parses it into a document using the Scraper library
  7. The user-provided page_function gets the document as an input parameter and returns a JSON Value type using the json macro

Page function

Page function can use a predefined set of Rust libraries, currently only the Scraper library and serde_json for JSON Value type are provided.

TODO

But technically, thanks to dynamic compiling, we can enable users to provide a list of libraries to be used in the page_function.

Example page_function

useserde_json::{Value,json};
usescraper::{Html,Selector};
fnselector_to_text(document:&Html, selector:&str)->Option<String>{
document
.select(&Selector::parse(selector).unwrap())
.next()
.map(|el| el.text().next().unwrap().into())
}
#[no_mangle]
pubfnpage_function(document:&Html)->Value{
println!("page_function starting");
let title =selector_to_text(&document,"title");
println!("extracted title: {:?}", title);
let header =selector_to_text(&document,"h1");
println!("extracted header: {:?}", header);
let companies_using_apify = document
.select(&Selector::parse(".Logos__container").unwrap())
.next().unwrap()
.select(&Selector::parse("img").unwrap())
.map(|el| el.value().attr("alt").unwrap().to_string())
.collect::<Vec<String>>();
println!("extracted companies_using_apify: {:?}", companies_using_apify);
let output =json!({
"title": title,
"header": header,
"companies_using_apify": companies_using_apify,
});
println!("inside pageFunction output: {:?}", output);
output
}

You might also like

Actor in Rust Example

lukaskrivka/rust-actor-example

Example actor built in Rust programming language. Downloads HTML from any page. Works on Apify platform and locally.

👁 User avatar

Lukáš Křivka

14

Rust Scraper

lukaskrivka/rust-scraper

Speed of light scraping with Rust programming language! This is an early alpha version for experimenting, use at your own risk!

👁 User avatar

Lukáš Křivka

60

Rust-Crates-Scraper

sage_gate/rust-crates-scraper

Scrape Rust crates from crates.io. Get download stats, dependencies, health scores, and package metadata for supply chain analysis.

Example Secret Input

apify/example-secret-input

This Apify actor showcases how to use secret fields in the actor input.

Related articles

Web scraping with Cheerio in 2025
Read more
How I test my Apify Actors efficiently during development with JavaScript
Read more