[{"data":1,"prerenderedAt":1221},["ShallowReactive",2],{"content-\u002Fblog\u002Fweb-scraping-in-one-line-of-code":3,"content-doc-\u002Fblog\u002Fweb-scraping-in-one-line-of-code-inline":3,"author-Alex Barlow":723,"current-doc":733,"related-posts":741,"doc-nav-siblings:%2Fblog%2Fweb-scraping-in-one-line-of-code":742,"hero-media-\u002Fblog\u002Fweb-scraping-in-one-line-of-code":745},{"id":4,"title":5,"author":6,"body":7,"date":701,"description":702,"draft":703,"extension":704,"meta":705,"navigation":251,"path":719,"seo":720,"stem":721,"__hash__":722},"blog\u002Fblog\u002Fweb-scraping-in-one-line-of-code.md","Web scraping in one line of code (or zero)","Alex Barlow",{"type":8,"value":9,"toc":691},"minimark",[10,14,17,31,34,39,69,79,83,102,105,108,135,138,141,145,148,157,160,210,213,217,224,448,462,468,472,486,489,508,608,616,641,645,649,652,656,659,662,670,687],[11,12,13],"p",{},"You can code a scraper. You can ask Claude to code a scraper. Writing the code is not the blocker. The challenge is everything around it: adding the waits, testing the code, even just running it. Sometimes you want the data quickly, without the fuss.",[15,16],"hero-media",{},[11,18,19,20,25,26,30],{},"We took the power of axiom's ",[21,22,24],"a",{"href":23},"\u002Fbuild-with-no-code\u002Fstep-by-step","no-code builder"," steps, the ones that let you build a web scraper in just a few steps, and exposed them via an API: the ",[21,27,29],{"href":28},"\u002Fdocs\u002Fdeveloper-hub\u002Fapi\u002Fstep-functions","Step API",".",[11,32,33],{},"One line drops a scraper into your code: it paginates on its own and stops at the result count you set. Or call the step over MCP: a URL and a selector gets you the data in seconds. Zero lines.",[35,36,38],"h2",{"id":37},"an-entire-scraper-in-one-line","An entire scraper in one line",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-javascript shiki shiki-themes github-light-default github-dark-default","await axiom.scrape(url, selector, pager, max_results, settings);\n","javascript","",[47,48,49],"code",{"__ignoreMap":45},[50,51,54,58,62,66],"span",{"class":52,"line":53},"line",1,[50,55,57],{"class":56},"sjeE4","await",[50,59,61],{"class":60},"s4rv2"," axiom.",[50,63,65],{"class":64},"sbjLL","scrape",[50,67,68],{"class":60},"(url, selector, pager, max_results, settings);\n",[11,70,71,72,78],{},"That's the scraper: one line, simple to use. Pass in one or several selectors for the content you want scraped, add a selector for the pager, and set max results. In your code, you'll still need to open and close the browser session around it. (Over MCP it drops to zero lines: you describe the scrape in a prompt. More on that below.) But all the fiddly bits you'd normally spend your time writing and maintaining are gone: the pagination loop, the load waits, the retry logic. When the ",[21,73,75],{"href":74},"\u002Fdocs\u002Fdeveloper-hub\u002Fapi\u002Fstep-functions\u002Fscrape",[47,76,77],{},"scraper()"," finishes, it returns a 2D array of the scraped data for you to use in your build.",[35,80,82],{"id":81},"what-the-step-api-is","What the Step API is",[11,84,85,86,90,91,90,95,90,99,101],{},"The Step API is axiom’s no-code tool, available to all. It’s a set of around 20 functions, each step performs a complete browser action: ",[21,87,89],{"href":88},"\u002Fdocs\u002Fdeveloper-hub\u002Fapi\u002Fstep-functions\u002Fgoto","goto",", ",[21,92,94],{"href":93},"\u002Fdocs\u002Fdeveloper-hub\u002Fapi\u002Fstep-functions\u002Fclick","click",[21,96,98],{"href":97},"\u002Fdocs\u002Fdeveloper-hub\u002Fapi\u002Fstep-functions\u002Fenter-text","enterText",[21,100,65],{"href":74},", and so on. These aren't low-level primitives like “dispatch a keypress”: each function does the whole job and returns when it’s actually done. goto() doesn’t resolve until the page has settled. scrape() pages through results on its own.",[11,103,104],{},"Steps wait and retry - functionality you normally write waitForSelector calls for, the step does that internally.",[11,106,107],{},"You can call the steps three ways, all with the same API key, against cloud or desktop browsers:",[109,110,111,119,122],"ul",{},[112,113,114,115,118],"li",{},"The ",[21,116,117],{"href":28},"Node library",": import the client and call step functions directly from your code.",[112,120,121],{},"An MCP server: expose the steps as tools so Claude or another LLM client can drive a session.",[112,123,124,125,129,130,134],{},"In an existing script: connect your ",[21,126,128],{"href":127},"\u002Fbuild-with-code\u002Fpuppeteer","Puppeteer"," or ",[21,131,133],{"href":132},"\u002Fbuild-with-code\u002Fplaywright","Playwright"," code to an axiom.ai browser and mix in step calls.",[11,136,137],{},"Note: these functions come from the engine that runs axiom.ai’s no-code tool. Hundreds of thousands of users have been running that engine against real sites for years: slow pages, awkward pagination. Every failure mode they hit, we fixed. The Step API exposes that engine directly to code.",[11,139,140],{},"As the no-code tool evolves, we’ll be exposing more steps through the Step API.",[35,142,144],{"id":143},"scraping-over-mcp-zero-lines","Scraping over MCP: zero lines",[11,146,147],{},"Over MCP, zero code. You don't write the scrape call; you prompt. Connect the axiom.ai MCP server to Claude and describe what you want:",[11,149,150,151,156],{},"\"Go to ",[21,152,153],{"href":153,"rel":154},"https:\u002F\u002Fwww.bbc.co.uk\u002Fsearch?d=SPORT_PS&q=Harry+Kane",[155],"nofollow",", scrape the titles and links of articles, and save them as a CSV\"",[11,158,159],{},"Under the hood, the MCP server runs the steps you'd otherwise have written:",[40,161,163],{"className":42,"code":162,"language":44,"meta":45,"style":45},"const rows = await axiom.scrape(\"https:\u002F\u002Fwww.bbc.co.uk\u002Fsearch?d=SPORT_PS&q=Harry+Kane\", \"[role='list'] li a\",null,2, {});\n",[47,164,165],{"__ignoreMap":45},[50,166,167,170,174,177,180,182,184,187,191,193,196,199,202,204,207],{"class":52,"line":53},[50,168,169],{"class":56},"const",[50,171,173],{"class":172},"sHrmB"," rows",[50,175,176],{"class":56}," =",[50,178,179],{"class":56}," await",[50,181,61],{"class":60},[50,183,65],{"class":64},[50,185,186],{"class":60},"(",[50,188,190],{"class":189},"sSVrQ","\"https:\u002F\u002Fwww.bbc.co.uk\u002Fsearch?d=SPORT_PS&q=Harry+Kane\"",[50,192,90],{"class":60},[50,194,195],{"class":189},"\"[role='list'] li a\"",[50,197,198],{"class":60},",",[50,200,201],{"class":172},"null",[50,203,198],{"class":60},[50,205,206],{"class":172},"2",[50,208,209],{"class":60},", {});\n",[11,211,212],{},"The run ends with listings.csv, a file anyone can open in a spreadsheet. A browser opens, scrape() collects the rows, outputs a CSV. You don't code a scraper, you describe one. Zero code.",[35,214,216],{"id":215},"adding-the-step-api-to-existing-code","Adding the Step API to existing code",[11,218,219,220,223],{},"If you already have a Puppeteer or Playwright script, there's no need to rewrite it. Connect it to an axiom.ai browser and the script runs on our cloud or desktop infrastructure. The Step API is available in that same session, so you can drop a ",[47,221,222],{},"scrape()"," call where the extraction logic would have gone and use the rows it returns in the code you already have.",[40,225,227],{"className":42,"code":226,"language":44,"meta":45,"style":45},"import { AxiomApi } from '@axiom_ai\u002Fapi';\n\nconst axiom = new AxiomApi('eyJ1c2VyX2lkIjoyMzI5LCJ0b2tlbiI6IjIzMjk1YzQ5NjU5ZjVjOWRiYmFkIn0=');\n\nawait axiom.browserOpen();\ntry {\n  const rows = await axiom.scrape(\n    'https:\u002F\u002Fwww.bbc.co.uk\u002Fsearch?q=Harry+Kane&d=NEWS_PS',\n    [\n      { selector: '[data-testid=\"default-promo\"] p[class*=\"PromoHeadline\"]', resultType: 'textContent' },\n      { selector: '[data-testid=\"default-promo\"] a[href]',                   resultType: 'link' },\n    ],\n    'nav div:nth-child(4) a[href^=\"\u002Fsearch?q=Harry+Kane&d=NEWS_PS&page=\"]',\n    50,\n    {}\n  );\n  console.log(rows);\n} finally {\n  await axiom.browserClose();\n}\n",[47,228,229,246,253,277,282,295,304,323,332,338,356,372,378,386,394,400,406,418,429,442],{"__ignoreMap":45},[50,230,231,234,237,240,243],{"class":52,"line":53},[50,232,233],{"class":56},"import",[50,235,236],{"class":60}," { AxiomApi } ",[50,238,239],{"class":56},"from",[50,241,242],{"class":189}," '@axiom_ai\u002Fapi'",[50,244,245],{"class":60},";\n",[50,247,249],{"class":52,"line":248},2,[50,250,252],{"emptyLinePlaceholder":251},true,"\n",[50,254,256,258,261,263,266,269,271,274],{"class":52,"line":255},3,[50,257,169],{"class":56},[50,259,260],{"class":172}," axiom",[50,262,176],{"class":56},[50,264,265],{"class":56}," new",[50,267,268],{"class":64}," AxiomApi",[50,270,186],{"class":60},[50,272,273],{"class":189},"'eyJ1c2VyX2lkIjoyMzI5LCJ0b2tlbiI6IjIzMjk1YzQ5NjU5ZjVjOWRiYmFkIn0='",[50,275,276],{"class":60},");\n",[50,278,280],{"class":52,"line":279},4,[50,281,252],{"emptyLinePlaceholder":251},[50,283,285,287,289,292],{"class":52,"line":284},5,[50,286,57],{"class":56},[50,288,61],{"class":60},[50,290,291],{"class":64},"browserOpen",[50,293,294],{"class":60},"();\n",[50,296,298,301],{"class":52,"line":297},6,[50,299,300],{"class":56},"try",[50,302,303],{"class":60}," {\n",[50,305,307,310,312,314,316,318,320],{"class":52,"line":306},7,[50,308,309],{"class":56},"  const",[50,311,173],{"class":172},[50,313,176],{"class":56},[50,315,179],{"class":56},[50,317,61],{"class":60},[50,319,65],{"class":64},[50,321,322],{"class":60},"(\n",[50,324,326,329],{"class":52,"line":325},8,[50,327,328],{"class":189},"    'https:\u002F\u002Fwww.bbc.co.uk\u002Fsearch?q=Harry+Kane&d=NEWS_PS'",[50,330,331],{"class":60},",\n",[50,333,335],{"class":52,"line":334},9,[50,336,337],{"class":60},"    [\n",[50,339,341,344,347,350,353],{"class":52,"line":340},10,[50,342,343],{"class":60},"      { selector: ",[50,345,346],{"class":189},"'[data-testid=\"default-promo\"] p[class*=\"PromoHeadline\"]'",[50,348,349],{"class":60},", resultType: ",[50,351,352],{"class":189},"'textContent'",[50,354,355],{"class":60}," },\n",[50,357,359,361,364,367,370],{"class":52,"line":358},11,[50,360,343],{"class":60},[50,362,363],{"class":189},"'[data-testid=\"default-promo\"] a[href]'",[50,365,366],{"class":60},",                   resultType: ",[50,368,369],{"class":189},"'link'",[50,371,355],{"class":60},[50,373,375],{"class":52,"line":374},12,[50,376,377],{"class":60},"    ],\n",[50,379,381,384],{"class":52,"line":380},13,[50,382,383],{"class":189},"    'nav div:nth-child(4) a[href^=\"\u002Fsearch?q=Harry+Kane&d=NEWS_PS&page=\"]'",[50,385,331],{"class":60},[50,387,389,392],{"class":52,"line":388},14,[50,390,391],{"class":172},"    50",[50,393,331],{"class":60},[50,395,397],{"class":52,"line":396},15,[50,398,399],{"class":60},"    {}\n",[50,401,403],{"class":52,"line":402},16,[50,404,405],{"class":60},"  );\n",[50,407,409,412,415],{"class":52,"line":408},17,[50,410,411],{"class":60},"  console.",[50,413,414],{"class":64},"log",[50,416,417],{"class":60},"(rows);\n",[50,419,421,424,427],{"class":52,"line":420},18,[50,422,423],{"class":60},"} ",[50,425,426],{"class":56},"finally",[50,428,303],{"class":60},[50,430,432,435,437,440],{"class":52,"line":431},19,[50,433,434],{"class":56},"  await",[50,436,61],{"class":60},[50,438,439],{"class":64},"browserClose",[50,441,294],{"class":60},[50,443,445],{"class":52,"line":444},20,[50,446,447],{"class":60},"}\n",[449,450,451],"blockquote",{},[11,452,453,457,458,461],{},[454,455,456],"strong",{},"Note:"," the key is written into the file here only to keep the example short. Never do this in real code — an API key is a secret, and anything committed to a repo or pasted into a doc should be treated as public. Read it from an environment variable (",[47,459,460],{},"process.env.AXIOM_API_KEY",") or a secrets manager instead.",[11,463,464,465,467],{},"Two selectors, so each row comes back with two columns — the headline text and the article link. The third argument is the pager: ",[47,466,222],{}," follows it until it has 50 results.",[35,469,471],{"id":470},"getting-started","Getting started",[11,473,474,475,480,481,485],{},"You'll need an API key from the ",[21,476,479],{"href":477,"rel":478},"https:\u002F\u002Fcode.axiom.ai",[155],"Code dashboard"," or the ",[21,482,484],{"href":483},"\u002Fbuild-with-no-code","no-code tool",". New accounts get 2 free hours of browser runtime, no card required. The Step API is open to everyone with an axiom.ai account, no-code and Code tool users alike.",[11,487,488],{},"Install the client then you can run this minimal example:",[40,490,494],{"className":491,"code":492,"language":493,"meta":45,"style":45},"language-bash shiki shiki-themes github-light-default github-dark-default","npm install @axiom_ai\u002Fapi\n","bash",[47,495,496],{"__ignoreMap":45},[50,497,498,502,505],{"class":52,"line":53},[50,499,501],{"class":500},"sTDnQ","npm",[50,503,504],{"class":189}," install",[50,506,507],{"class":189}," @axiom_ai\u002Fapi\n",[40,509,511],{"className":42,"code":510,"language":44,"meta":45,"style":45},"import { AxiomApi } from '@axiom_ai\u002Fapi';\n\nconst axiom = new AxiomApi(process.env.AXIOM_API_KEY);\n\nawait axiom.browserOpen();\nconst rows = await axiom.scrape(\"https:\u002F\u002Fexample.com\u002Fproducts\", \".product-card\", null, 200, {});\nawait axiom.browserClose();\n",[47,512,513,525,529,549,553,563,598],{"__ignoreMap":45},[50,514,515,517,519,521,523],{"class":52,"line":53},[50,516,233],{"class":56},[50,518,236],{"class":60},[50,520,239],{"class":56},[50,522,242],{"class":189},[50,524,245],{"class":60},[50,526,527],{"class":52,"line":248},[50,528,252],{"emptyLinePlaceholder":251},[50,530,531,533,535,537,539,541,544,547],{"class":52,"line":255},[50,532,169],{"class":56},[50,534,260],{"class":172},[50,536,176],{"class":56},[50,538,265],{"class":56},[50,540,268],{"class":64},[50,542,543],{"class":60},"(process.env.",[50,545,546],{"class":172},"AXIOM_API_KEY",[50,548,276],{"class":60},[50,550,551],{"class":52,"line":279},[50,552,252],{"emptyLinePlaceholder":251},[50,554,555,557,559,561],{"class":52,"line":284},[50,556,57],{"class":56},[50,558,61],{"class":60},[50,560,291],{"class":64},[50,562,294],{"class":60},[50,564,565,567,569,571,573,575,577,579,582,584,587,589,591,593,596],{"class":52,"line":297},[50,566,169],{"class":56},[50,568,173],{"class":172},[50,570,176],{"class":56},[50,572,179],{"class":56},[50,574,61],{"class":60},[50,576,65],{"class":64},[50,578,186],{"class":60},[50,580,581],{"class":189},"\"https:\u002F\u002Fexample.com\u002Fproducts\"",[50,583,90],{"class":60},[50,585,586],{"class":189},"\".product-card\"",[50,588,90],{"class":60},[50,590,201],{"class":172},[50,592,90],{"class":60},[50,594,595],{"class":172},"200",[50,597,209],{"class":60},[50,599,600,602,604,606],{"class":52,"line":306},[50,601,57],{"class":56},[50,603,61],{"class":60},[50,605,439],{"class":64},[50,607,294],{"class":60},[11,609,610,611,615],{},"Five lines of code in total, one line of scraper. Always ",[21,612,614],{"href":613},"\u002Fdocs\u002Fdeveloper-hub\u002Fapi\u002Fstep-functions\u002Fclose-a-session","close the session","; open sessions consume your runtime quota.",[11,617,114,618,622,623,626,627,633,634,640],{},[21,619,621],{"href":620},"\u002Fdocs\u002Fdeveloper-hub\u002Fapi\u002Fquickstart","quickstart"," covers setup, and the ",[21,624,625],{"href":28},"step function reference"," lists all the step functions, including ",[21,628,630],{"href":629},"\u002Fdocs\u002Fdeveloper-hub\u002Fapi\u002Fstep-functions\u002Fscrape-metadata",[47,631,632],{},"scrapeMetadata"," for structured page fields, ",[21,635,637],{"href":636},"\u002Fdocs\u002Fdeveloper-hub\u002Fapi\u002Fstep-functions\u002Fintegrate-ai",[47,638,639],{},"integrateAI"," for inline LLM calls.",[35,642,644],{"id":643},"selecting-more-data-nd-different-types","Selecting more data nd different types",[35,646,648],{"id":647},"how-an-expert-in-browser-automation-at-axiom-uses-the-step-api","How an expert in browser automation at axiom uses the Step API",[11,650,651],{},"This is a relatively new feature and one I'm still discovering: the no-code steps exposed as an API to consume. Already I've used the scrape() function to build micro scrapers that extract data for reporting. Surprisingly though, the biggest impact on me so far is in no-code. With the scrape() function I fetch a page's HTML and have the LLM extract valid selectors from it. It saves me a lot of time, and it means I can build no-code axioms entirely from VS Code using Claude Code. My go-to method now is building by description in Claude, using MCP and the Step API to quickly scaffold automations that work out of the box.",[35,653,655],{"id":654},"wrapping-up-simple-scraping","Wrapping up simple scraping",[11,657,658],{},"Scraping doesn't have to mean lines of code, testing and fixing. With axiom's Step API you can plug a scraper straight into your own Puppeteer or Playwright scripts and skip the time you'd spend testing and ironing out bugs. It's a battle-tested system, with many users feeding back into it.",[11,660,661],{},"What should you use it for? Over MCP, generate selectors as mentioned above, or run micro scrapes that fetch data through the scrape step. The steps also fit well into custom scripts, giving you a high degree of flexibility. And this is where coders and no-coders work the same way: generate your selectors over MCP, then run the scraper wherever suits you, in the no-code builder or in your own script. Scrape isn't the only function in the Step API either. Other steps such as click and enterText cover all use cases. Over the coming months we'll also roll out settings to the Step API and add options such as 1Password integration.",[11,663,664,665,669],{},"Grab an API key, open a cloud browser, and go scrape something. If you're a new user, the ",[21,666,668],{"href":667},"\u002Fbuild-in-claude","Claude skill"," will take you through setting up a free account as well.",[11,671,672,673,677,678,682,683,30],{},"FYI: axiom v5.2, the ",[21,674,676],{"href":675},"\u002Fdocs\u002Fno-code-tool\u002Frelease-notes","next release",", ships an MCP server for the ",[21,679,681],{"href":680},"\u002Finfrastructure\u002Fdesktop","desktop"," and our ",[21,684,686],{"href":685},"\u002Finfrastructure\u002Fcloud","cloud",[688,689,690],"style",{},"html pre.shiki code .sjeE4, html code.shiki .sjeE4{--shiki-default:#CF222E;--shiki-dark:#FF7B72}html pre.shiki code .s4rv2, html code.shiki .s4rv2{--shiki-default:#1F2328;--shiki-dark:#E6EDF3}html pre.shiki code .sbjLL, html code.shiki .sbjLL{--shiki-default:#8250DF;--shiki-dark:#D2A8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHrmB, html code.shiki .sHrmB{--shiki-default:#0550AE;--shiki-dark:#79C0FF}html pre.shiki code .sSVrQ, html code.shiki .sSVrQ{--shiki-default:#0A3069;--shiki-dark:#A5D6FF}html pre.shiki code .sTDnQ, html code.shiki .sTDnQ{--shiki-default:#953800;--shiki-dark:#FFA657}",{"title":45,"searchDepth":255,"depth":255,"links":692},[693,694,695,696,697,698,699,700],{"id":37,"depth":248,"text":38},{"id":81,"depth":248,"text":82},{"id":143,"depth":248,"text":144},{"id":215,"depth":248,"text":216},{"id":470,"depth":248,"text":471},{"id":643,"depth":248,"text":644},{"id":647,"depth":248,"text":648},{"id":654,"depth":248,"text":655},"2026-08-10","Build a web scraper in one line with the axiom.ai Step API. Auto-pagination, MCP for LLMs, and a one-line drop-in for the Puppeteer script you already have.",false,"md",{"metaTitle":706,"read":707,"type":47,"tool":708,"category":709,"tags":711,"location":714,"featuredimg":715,"landingimg":716,"summary":717,"video":718},"Web scraping in one line of code (or zero) with axiom's Step API","6 min read",[29],[710],"Web scraping",[712,713],"automation","API","London","\u002Fblog\u002Fstep-api-scraping-post.webp","\u002Fblog\u002Fstep-api-scraping-sq.webp","One line of code, a selector, and a result count is a whole scraper with the axiom.ai Step API. Scrape over MCP to a webhook or CSV, or add scraping to the Puppeteer script you already have.","https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FHrDhVXuAKOQ?si=Bu5QjxpMYgABxVq8","\u002Fblog\u002Fweb-scraping-in-one-line-of-code",{"title":5,"description":702},"blog\u002Fweb-scraping-in-one-line-of-code","xa74xugbwmXUm90Zwm1cTTzhYWEGecKJc4w2VIW8a1k",{"id":724,"title":725,"bio":726,"body":727,"date":733,"description":30,"extension":704,"image":734,"linkedin":735,"meta":736,"name":6,"navigation":251,"order":733,"path":737,"seo":738,"stem":739,"__hash__":740},"authors\u002Fauthors\u002Falex-barlow.md","Co Founder","Alex spent 14 years automating repetitive tasks, before co-founding axiom.ai. He’s hands-on with users and enjoys learning from them. He creates intricate automation the no-code way, and empowered by generative AI, he's extending his skill set to include code. Outside of work, he loves exploring the Scottish Highlands with his daughter and making sandcastles on Firemore Beach.",{"type":8,"value":728,"toc":731},[729],[11,730,30],{},{"title":45,"searchDepth":255,"depth":255,"links":732},[],null,"\u002Fauthors\u002Falex-barlow.jpeg","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falex-barlow-9b489330\u002F",{},"\u002Fauthors\u002Falex-barlow",{"title":725,"description":30},"authors\u002Falex-barlow","mthwrlpXbshOSgAygqgpyg38ZdiM_P6DKRLDBGrqcOo",[],{"parent":743,"items":744},"\u002Fblog",[],{"id":4,"title":5,"author":6,"body":746,"date":701,"description":702,"draft":703,"extension":704,"meta":1216,"navigation":251,"path":719,"seo":1220,"stem":721,"__hash__":722},{"type":8,"value":747,"toc":1206},[748,750,752,758,760,762,776,782,784,794,796,798,812,814,816,818,820,825,827,863,865,867,871,1033,1041,1045,1047,1054,1056,1068,1162,1166,1180,1182,1184,1186,1188,1190,1192,1196,1204],[11,749,13],{},[15,751],{},[11,753,19,754,25,756,30],{},[21,755,24],{"href":23},[21,757,29],{"href":28},[11,759,33],{},[35,761,38],{"id":37},[40,763,764],{"className":42,"code":43,"language":44,"meta":45,"style":45},[47,765,766],{"__ignoreMap":45},[50,767,768,770,772,774],{"class":52,"line":53},[50,769,57],{"class":56},[50,771,61],{"class":60},[50,773,65],{"class":64},[50,775,68],{"class":60},[11,777,71,778,78],{},[21,779,780],{"href":74},[47,781,77],{},[35,783,82],{"id":81},[11,785,85,786,90,788,90,790,90,792,101],{},[21,787,89],{"href":88},[21,789,94],{"href":93},[21,791,98],{"href":97},[21,793,65],{"href":74},[11,795,104],{},[11,797,107],{},[109,799,800,804,806],{},[112,801,114,802,118],{},[21,803,117],{"href":28},[112,805,121],{},[112,807,124,808,129,810,134],{},[21,809,128],{"href":127},[21,811,133],{"href":132},[11,813,137],{},[11,815,140],{},[35,817,144],{"id":143},[11,819,147],{},[11,821,150,822,156],{},[21,823,153],{"href":153,"rel":824},[155],[11,826,159],{},[40,828,829],{"className":42,"code":162,"language":44,"meta":45,"style":45},[47,830,831],{"__ignoreMap":45},[50,832,833,835,837,839,841,843,845,847,849,851,853,855,857,859,861],{"class":52,"line":53},[50,834,169],{"class":56},[50,836,173],{"class":172},[50,838,176],{"class":56},[50,840,179],{"class":56},[50,842,61],{"class":60},[50,844,65],{"class":64},[50,846,186],{"class":60},[50,848,190],{"class":189},[50,850,90],{"class":60},[50,852,195],{"class":189},[50,854,198],{"class":60},[50,856,201],{"class":172},[50,858,198],{"class":60},[50,860,206],{"class":172},[50,862,209],{"class":60},[11,864,212],{},[35,866,216],{"id":215},[11,868,219,869,223],{},[47,870,222],{},[40,872,873],{"className":42,"code":226,"language":44,"meta":45,"style":45},[47,874,875,887,891,909,913,923,929,945,951,955,967,979,983,989,995,999,1003,1011,1019,1029],{"__ignoreMap":45},[50,876,877,879,881,883,885],{"class":52,"line":53},[50,878,233],{"class":56},[50,880,236],{"class":60},[50,882,239],{"class":56},[50,884,242],{"class":189},[50,886,245],{"class":60},[50,888,889],{"class":52,"line":248},[50,890,252],{"emptyLinePlaceholder":251},[50,892,893,895,897,899,901,903,905,907],{"class":52,"line":255},[50,894,169],{"class":56},[50,896,260],{"class":172},[50,898,176],{"class":56},[50,900,265],{"class":56},[50,902,268],{"class":64},[50,904,186],{"class":60},[50,906,273],{"class":189},[50,908,276],{"class":60},[50,910,911],{"class":52,"line":279},[50,912,252],{"emptyLinePlaceholder":251},[50,914,915,917,919,921],{"class":52,"line":284},[50,916,57],{"class":56},[50,918,61],{"class":60},[50,920,291],{"class":64},[50,922,294],{"class":60},[50,924,925,927],{"class":52,"line":297},[50,926,300],{"class":56},[50,928,303],{"class":60},[50,930,931,933,935,937,939,941,943],{"class":52,"line":306},[50,932,309],{"class":56},[50,934,173],{"class":172},[50,936,176],{"class":56},[50,938,179],{"class":56},[50,940,61],{"class":60},[50,942,65],{"class":64},[50,944,322],{"class":60},[50,946,947,949],{"class":52,"line":325},[50,948,328],{"class":189},[50,950,331],{"class":60},[50,952,953],{"class":52,"line":334},[50,954,337],{"class":60},[50,956,957,959,961,963,965],{"class":52,"line":340},[50,958,343],{"class":60},[50,960,346],{"class":189},[50,962,349],{"class":60},[50,964,352],{"class":189},[50,966,355],{"class":60},[50,968,969,971,973,975,977],{"class":52,"line":358},[50,970,343],{"class":60},[50,972,363],{"class":189},[50,974,366],{"class":60},[50,976,369],{"class":189},[50,978,355],{"class":60},[50,980,981],{"class":52,"line":374},[50,982,377],{"class":60},[50,984,985,987],{"class":52,"line":380},[50,986,383],{"class":189},[50,988,331],{"class":60},[50,990,991,993],{"class":52,"line":388},[50,992,391],{"class":172},[50,994,331],{"class":60},[50,996,997],{"class":52,"line":396},[50,998,399],{"class":60},[50,1000,1001],{"class":52,"line":402},[50,1002,405],{"class":60},[50,1004,1005,1007,1009],{"class":52,"line":408},[50,1006,411],{"class":60},[50,1008,414],{"class":64},[50,1010,417],{"class":60},[50,1012,1013,1015,1017],{"class":52,"line":420},[50,1014,423],{"class":60},[50,1016,426],{"class":56},[50,1018,303],{"class":60},[50,1020,1021,1023,1025,1027],{"class":52,"line":431},[50,1022,434],{"class":56},[50,1024,61],{"class":60},[50,1026,439],{"class":64},[50,1028,294],{"class":60},[50,1030,1031],{"class":52,"line":444},[50,1032,447],{"class":60},[449,1034,1035],{},[11,1036,1037,457,1039,461],{},[454,1038,456],{},[47,1040,460],{},[11,1042,464,1043,467],{},[47,1044,222],{},[35,1046,471],{"id":470},[11,1048,474,1049,480,1052,485],{},[21,1050,479],{"href":477,"rel":1051},[155],[21,1053,484],{"href":483},[11,1055,488],{},[40,1057,1058],{"className":491,"code":492,"language":493,"meta":45,"style":45},[47,1059,1060],{"__ignoreMap":45},[50,1061,1062,1064,1066],{"class":52,"line":53},[50,1063,501],{"class":500},[50,1065,504],{"class":189},[50,1067,507],{"class":189},[40,1069,1070],{"className":42,"code":510,"language":44,"meta":45,"style":45},[47,1071,1072,1084,1088,1106,1110,1120,1152],{"__ignoreMap":45},[50,1073,1074,1076,1078,1080,1082],{"class":52,"line":53},[50,1075,233],{"class":56},[50,1077,236],{"class":60},[50,1079,239],{"class":56},[50,1081,242],{"class":189},[50,1083,245],{"class":60},[50,1085,1086],{"class":52,"line":248},[50,1087,252],{"emptyLinePlaceholder":251},[50,1089,1090,1092,1094,1096,1098,1100,1102,1104],{"class":52,"line":255},[50,1091,169],{"class":56},[50,1093,260],{"class":172},[50,1095,176],{"class":56},[50,1097,265],{"class":56},[50,1099,268],{"class":64},[50,1101,543],{"class":60},[50,1103,546],{"class":172},[50,1105,276],{"class":60},[50,1107,1108],{"class":52,"line":279},[50,1109,252],{"emptyLinePlaceholder":251},[50,1111,1112,1114,1116,1118],{"class":52,"line":284},[50,1113,57],{"class":56},[50,1115,61],{"class":60},[50,1117,291],{"class":64},[50,1119,294],{"class":60},[50,1121,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150],{"class":52,"line":297},[50,1123,169],{"class":56},[50,1125,173],{"class":172},[50,1127,176],{"class":56},[50,1129,179],{"class":56},[50,1131,61],{"class":60},[50,1133,65],{"class":64},[50,1135,186],{"class":60},[50,1137,581],{"class":189},[50,1139,90],{"class":60},[50,1141,586],{"class":189},[50,1143,90],{"class":60},[50,1145,201],{"class":172},[50,1147,90],{"class":60},[50,1149,595],{"class":172},[50,1151,209],{"class":60},[50,1153,1154,1156,1158,1160],{"class":52,"line":306},[50,1155,57],{"class":56},[50,1157,61],{"class":60},[50,1159,439],{"class":64},[50,1161,294],{"class":60},[11,1163,610,1164,615],{},[21,1165,614],{"href":613},[11,1167,114,1168,622,1170,626,1172,633,1176,640],{},[21,1169,621],{"href":620},[21,1171,625],{"href":28},[21,1173,1174],{"href":629},[47,1175,632],{},[21,1177,1178],{"href":636},[47,1179,639],{},[35,1181,644],{"id":643},[35,1183,648],{"id":647},[11,1185,651],{},[35,1187,655],{"id":654},[11,1189,658],{},[11,1191,661],{},[11,1193,664,1194,669],{},[21,1195,668],{"href":667},[11,1197,672,1198,677,1200,682,1202,30],{},[21,1199,676],{"href":675},[21,1201,681],{"href":680},[21,1203,686],{"href":685},[688,1205,690],{},{"title":45,"searchDepth":255,"depth":255,"links":1207},[1208,1209,1210,1211,1212,1213,1214,1215],{"id":37,"depth":248,"text":38},{"id":81,"depth":248,"text":82},{"id":143,"depth":248,"text":144},{"id":215,"depth":248,"text":216},{"id":470,"depth":248,"text":471},{"id":643,"depth":248,"text":644},{"id":647,"depth":248,"text":648},{"id":654,"depth":248,"text":655},{"metaTitle":706,"read":707,"type":47,"tool":1217,"category":1218,"tags":1219,"location":714,"featuredimg":715,"landingimg":716,"summary":717,"video":718},[29],[710],[712,713],{"title":5,"description":702},1786455495021]