1from apify_client import ApifyClient
2
3
4
5client = ApifyClient("<YOUR_API_TOKEN>")
6
7
8run_input = {
9 "buildNumbers": [
10 "0.3.67",
11 "canary",
12 ],
13 "actorId": "apify/website-content-crawler",
14 "actorInput": {
15 "maxResults": 1,
16 "blockMedia": True,
17 "clickElementsCssSelector": "[aria-expanded=\"false\"]",
18 "clientSideMinChangePercentage": 15,
19 "crawlerType": "playwright:adaptive",
20 "proxyConfiguration": { "useApifyProxy": True },
21 "readableTextCharThreshold": 100,
22 "removeElementsCssSelector": """nav, footer, script, style, noscript, svg, img[src^='data:'],
23[role=\"alert\"],
24[role=\"banner\"],
25[role=\"dialog\"],
26[role=\"alertdialog\"],
27[role=\"region\"][aria-label*=\"skip\" i],
28[aria-modal=\"true\"]""",
29 "renderingTypeDetectionPercentage": 10,
30 "respectRobotsTxtFile": True,
31 "reuseStoredDetectionResults": False,
32 "signHttpRequests": False,
33 "startUrls": [{ "url": "https://docs.apify.com/academy/scraping-basics-javascript" }],
34 "storeSkippedUrls": False,
35 "useLlmsTxt": False,
36 "useSitemaps": False,
37 "keepUrlFragments": False,
38 "ignoreCanonicalUrl": False,
39 "ignoreHttpsErrors": False,
40 "removeCookieWarnings": True,
41 "expandIframes": True,
42 "aggressivePrune": False,
43 "debugMode": False,
44 "debugLog": False,
45 "saveHtml": False,
46 "saveHtmlAsFile": False,
47 "saveMarkdown": True,
48 "saveFiles": False,
49 "saveScreenshots": False,
50 },
51 "extractRunData": """async ({ run, client, utils }) => {
52 const durationSecs = (new Date(run.finishedAt) - new Date(run.startedAt)) / 1000;
53
54 let itemCount = 0;
55 for await (const _item of client.dataset(run.defaultDatasetId).listItems()) {
56 itemCount++;
57 }
58
59 const totalCost = run.usageTotalUsd ?? 0;
60 return {
61 durationSecs: utils.round(durationSecs, 2),
62 itemCount,
63 totalCost: utils.round(totalCost, 6),
64 itemsPerSecond: utils.round(durationSecs > 0 ? itemCount / durationSecs : 0, 4),
65 costPerItem: utils.round(itemCount > 0 ? totalCost / itemCount : 0, 8),
66 };
67}
68""",
69 "aggregate": """({ runs, utils }) => {
70 const average = (field, decimals) => utils.round(utils.mean(runs.map((run) => run[field])), decimals);
71
72 return {
73 durationSecs: average('durationSecs', 2),
74 itemCount: average('itemCount', 2),
75 totalCost: average('totalCost', 6),
76 itemsPerSecond: average('itemsPerSecond', 4),
77 costPerItem: average('costPerItem', 8),
78 };
79}
80""",
81}
82
83
84run = client.actor("apify/actor-benchmark").call(run_input=run_input)
85
86
87print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
88for item in client.dataset(run.default_dataset_id).iterate_items():
89 print(item)
90
91