<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dynamodb on Jonathan Franklin</title><link>https://jonnie.github.io/tags/dynamodb/</link><description>Recent content in Dynamodb on Jonathan Franklin</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 08 Jun 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://jonnie.github.io/tags/dynamodb/index.xml" rel="self" type="application/rss+xml"/><item><title>Product Web Crawler</title><link>https://jonnie.github.io/work/product-web-crawler/</link><pubDate>Tue, 08 Jun 2021 00:00:00 +0000</pubDate><guid>https://jonnie.github.io/work/product-web-crawler/</guid><description>&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;&#10;&lt;p&gt;Pricesearcher&amp;rsquo;s price comparison service used merchant websites as a source of product data. The crawl pipeline read sitemaps, found product pages and extracted structured data, with separate deployments for environments and AWS regions. Maintaining it meant handling differences between merchant sites and balancing crawl frequency against the cost of repeated requests.&lt;/p&gt;&#10;&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;&#10;&lt;p&gt;The Python crawler ran on AWS and tracked crawl state and cycles in DynamoDB. Sitemaps stored in S3 fed product-page crawling, while a management API behind Cognito and API Gateway managed merchants and ingestion sources. A companion crawler collected website metadata for the data platform.&lt;/p&gt;</description></item></channel></rss>