<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lina Scott</title>
    <description>The latest articles on DEV Community by Lina Scott (@lina_scott_54a0bd6c06f67c).</description>
    <link>https://dev.to/lina_scott_54a0bd6c06f67c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3998304%2F86820d7d-07db-417e-a18f-f2750c28f9af.png</url>
      <title>DEV Community: Lina Scott</title>
      <link>https://dev.to/lina_scott_54a0bd6c06f67c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lina_scott_54a0bd6c06f67c"/>
    <language>en</language>
    <item>
      <title>A no-code way to scrape live World Cup betting odds</title>
      <dc:creator>Lina Scott</dc:creator>
      <pubDate>Mon, 13 Jul 2026 07:53:51 +0000</pubDate>
      <link>https://dev.to/lina_scott_54a0bd6c06f67c/a-no-code-way-to-scrape-live-world-cup-betting-odds-566g</link>
      <guid>https://dev.to/lina_scott_54a0bd6c06f67c/a-no-code-way-to-scrape-live-world-cup-betting-odds-566g</guid>
      <description>&lt;p&gt;This World Cup has been full of upsets — Norway knocking out Brazil, Cabo Verde drawing with both Spain and Uruguay, all four pre-tournament favorites needing a single-goal margin just to survive the Round of 16. Every one of those showed up in the odds boards first, often hours before kickoff.&lt;/p&gt;

&lt;p&gt;If you've ever wanted to capture that shift yourself — for a side project, some stats digging, or just curiosity — you've probably hit the same wall I did: writing and maintaining a scraper for a page you only need once or twice isn't worth the overhead. Selectors break, pages paginate, sites push back on bots.&lt;/p&gt;

&lt;p&gt;So instead of spinning up Playwright or BeautifulSoup for a one-off pull, I tried something different: describing what I want in plain language and letting an AI agent handle the extraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The workflow
&lt;/h2&gt;

&lt;p&gt;Using &lt;a href="https://chat4data.ai" rel="noopener noreferrer"&gt;Chat4Data&lt;/a&gt; as an example, here's the loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Describe the target and fields.&lt;/strong&gt; Point it at a live odds page (I used Polymarket's live sports markets) and describe what you want: event time, volume, location, participants, moneyline, spread, total.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Preview before extracting.&lt;/strong&gt; It shows a planned workflow and a data preview first. If fields are missing or mismapped, you just say so in plain language and it adjusts — no re-writing selectors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Confirm the schema&lt;/strong&gt;, then generate the collection plan.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Review one more preview&lt;/strong&gt; to catch mislabeled columns before committing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Extract&lt;/strong&gt;, and export to CSV, JSON, or Excel.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The part that actually surprised me: the conversation persists. For a tournament running over weeks, I don't re-describe the extraction each time — I reopen the same thread and re-run it against the current page state.&lt;/p&gt;

&lt;p&gt;(If you want to see this step-by-step with actual screenshots before trying it yourself, &lt;a href="https://chat4data.ai/blog/2026-world-cup-odds" rel="noopener noreferrer"&gt;the full walkthrough is here&lt;/a&gt;.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest comparison: this vs. a hand-rolled scraper
&lt;/h2&gt;

&lt;p&gt;I want to be specific about the trade-off instead of just saying "it's easier."&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Writing your own scraper&lt;/th&gt;
&lt;th&gt;Describing it to an agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Setup&lt;/td&gt;
&lt;td&gt;Pick a lib (Playwright/Selenium/BS4), write selectors per field&lt;/td&gt;
&lt;td&gt;One sentence describing the fields you want&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Site changes a class name&lt;/td&gt;
&lt;td&gt;You debug and patch selectors&lt;/td&gt;
&lt;td&gt;You just re-describe or nudge in plain language&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pagination / dynamic loading&lt;/td&gt;
&lt;td&gt;You write handling logic&lt;/td&gt;
&lt;td&gt;Handled as part of the extraction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeat runs (e.g. daily during a tournament)&lt;/td&gt;
&lt;td&gt;Re-run your script, hope nothing broke&lt;/td&gt;
&lt;td&gt;Reopen the same conversation, run again&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time for a one-off pull&lt;/td&gt;
&lt;td&gt;Anywhere from 20 minutes to a couple hours, depending on the page&lt;/td&gt;
&lt;td&gt;A few minutes, mostly spent describing fields and checking the preview&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;None of this replaces a real scraping pipeline if you need scheduled, high-volume, multi-site collection — see the next section. But for the "I just need this table, once or a few times" case, the setup cost difference is the whole pitch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this fits (and where it doesn't)
&lt;/h2&gt;

&lt;p&gt;To be clear about the boundaries: this isn't a monitoring or polling system. It won't sit in a loop hitting an endpoint every few minutes, and it's not a fit if you're building an automated arbitrage pipeline across sportsbooks. For that, you still want scheduled infra of your own.&lt;/p&gt;

&lt;p&gt;Where it &lt;em&gt;is&lt;/em&gt; useful is the much more common case: you're looking at a page, you want the structured data that's on it, right now, and don't want to write single-use scraping code for it. That covers a lot of quick, exploratory, or personal-scale data pulls — not just betting odds, but any structured table on a live page.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ (from people who've asked)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraping legality?&lt;/strong&gt; Depends entirely on the target site's ToS and local regulation around betting data — worth checking before pulling from any site regularly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output formats?&lt;/strong&gt; CSV, JSON, or Excel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple rows/matches at once?&lt;/strong&gt; Yes, if the page renders a table, it extracts the whole table in one pass.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works on any site?&lt;/strong&gt; Built for standard HTML tables generally; if a page doesn't extract cleanly you can flag it for support.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're curious, you can just &lt;a href="https://chromewebstore.google.com/detail/cpnjplgolcfhabpjcnfopcmhbbciglif?authuser=0&amp;amp;hl=en" rel="noopener noreferrer"&gt;try the Chrome extension&lt;/a&gt; directly on tonight's match.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;For this kind of one-off, "I just need this table right now" need — do you usually reach for a script (Selenium/Playwright/BS4), a no-code tool like this, or just manually copy-paste? Curious what the actual split looks like in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>datascience</category>
      <category>saas</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
