Website parserDevelopment & Customization

A website parser in Python that collects public data from pages into CSV or Excel: prices, catalogues, listings

Usually ready in 15 minutesRevisions includedQuality check
Packages
Payment protectionDetails
  • Revisions within the package are free.
  • If you do not respond within 3 days of delivery, the work is accepted automatically.

The money is reserved when you pay and released only once you accept the work.

A website parser in Python that collects public data from pages into CSV or Excel: prices, catalogues, listings

Example result

Example for the Standard package

Parser of a garden tools supplier's catalog into Excel

What the result looks like

ArticleNamePriceIn stockWeightPhoto
GT-1042Pruning shears, 20 mm18.90Yes0.24 kg…/gt-1042.jpg
GT-1187Folding saw, 210 mm24.50Yes0.31 kg…/gt-1187.jpg
GT-2210Hedge shears, wavy blade39.00No1.10 kg…/gt-2210.jpg
GT-3305Hand trowel, stainless9.80Yes0.18 kg…/gt-3305.jpg
GT-4120Garden hose 25 m, 1/2"42.00Yes2.90 kg…/gt-4120.jpg

The file in the example has 1,236 products from 52 list pages.

A part of the code

def product_links(list_url: str) -> Iterator[str]:
    """Product page links from every page of the list, following 'Next'."""
    url: str | None = list_url
    while url:
        page = fetch(url)
        for card in page.select("div.product-card a.title"):
            yield urljoin(url, card["href"])
        next_link = page.select_one("a.pagination-next")
        url = urljoin(url, next_link["href"]) if next_link else None


def fetch(url: str) -> BeautifulSoup:
    """One open page, at a polite pace: a pause between requests and a few tries on errors."""
    for attempt in range(3):
        time.sleep(settings.delay_seconds)
        response = session.get(url, timeout=30)
        if response.status_code == 200:
            return BeautifulSoup(response.text, "html.parser")
        log.warning("%s answered %s, try %d of 3", url, response.status_code, attempt + 1)
    raise ScraperError(f"{url} did not open after 3 tries")

Files: a ZIP archive with scraper.py, settings.ini (the start page, the pause between requests, the file name), requirements.txt and a README on installing and running it. It reads only open pages, one every 2 seconds, and checks the site's robots.txt first. The client runs it on their own computer.

Client: an online garden shop that resells a supplier's tools; the supplier has an open catalog on its website but no price list file. Task: go through the catalog's list pages, open every product page and save the article number, name, price, stock, weight and main photo link to Excel, to compare prices once a week.

The client and all details are made up.

About this service

A parser collects data you can see on public web pages and saves it as a table: prices and stock of products, a supplier's catalogue for your shop, listings, job posts, events or articles. Tell us the site and the pages, list the fields you need (name, price, link, picture and so on) and send one or two of those pages saved from your browser (File > Save page as) or screenshots of them. We write the parser in Python by the real structure of those pages, and it saves the results as CSV, Excel or JSON. You get an archive with the code, a settings file with the addresses and the pause between pages, and a README that explains how to install Python and run it. You run the parser on your own computer, so the data goes straight to you; we do not collect it for you or keep it. It reads only open pages, at a polite pace, and never logs in, gets around captchas or other protection, or collects personal data such as people's names, emails or phone numbers. When a site changes its layout, the parser may need an update. Whether you may collect and use a site's data under its terms is your responsibility.

What is included

  • What you getA ZIP archive with the Python code, a settings file and a README with step-by-step instructions; the code is also shown on the order page.
  • Your fields, your tableColumns in the order you need
  • Built on the real pagesWritten by the structure of the pages you send
  • Polite paceA pause between pages, set in the settings
  • Runs on your computerWindows, macOS or Linux, with Python
  • A plain guideWhat to install and how to run it, step by step

How it works

  1. 1
    PagesYou give the site, the fields and one or two saved pages
  2. 2
    ParserWe write the code and the guide to running it
  3. 3
    RunYou run it and check the first rows of the table
  4. 4
    ChangesYou ask for changes within your package and send any error message

What we need from you

The site and the exact pages: a link to a list and to an item page, and roughly how many pages there are. The fields you need, in the order of your table, with an example of each. One or two of those pages saved from your browser as HTML (File > Save page as) or screenshots, so the parser follows their real structure. The results file you need (CSV, Excel or JSON) and where you will run it.

We will ask you:

  • Which site and which pages?
  • The fields you need
  • How many pages roughly?
  • The results file
  • Anything else it should do

Compare packages

PackagesBasicParser for one kind of page$25StandardList and item pages$49PremiumSeveral sites or page kinds$89
Deadline1 day2 days3 days
Revisions123
Sites11up to 3
Kinds of page12 (list and item)up to 3
Fieldsup to 10up to 25up to 25 on each
Goes through the pages of a listNoYesYes
Results fileCSVExcel or CSVExcel, CSV or JSON
Duplicates removed, resumes where it stoppedNoNoYes
Order BasicOrder StandardOrder Premium

Payment protection

You pay when you order, but the money is released only for accepted work.

  • Fixed priceThe package price does not change after you pay.
  • The money is reservedWhen you pay, the amount is only reserved. It is released to the service once you accept the work.
  • Checked before deliveryEvery result goes through a quality check before it reaches you, and you see it on the order page before accepting it.
  • Free revisionsAsk for changes within your brief as many times as the package allows.
  • Acceptance after 3 daysIf within 3 days of delivery you neither accept the work nor ask for changes, it is accepted automatically. If you write in the order chat after delivery, the order waits; once we answer, we may start the 3 days again and will say so in the chat.
  • Redo or a full refundIf the result does not match your brief and the revisions did not fix it, or the work takes more than twice its deadline, write in the order chat: we will redo the work or refund the payment in full.
How it works →

Questions and answers

Is it legal to parse a site?

Collecting public data is allowed in many cases, but sites' terms of use and data laws differ between countries, so you decide whether you may collect and use the data. The parser never logs in, gets around protection or collects personal data, which keeps it on the safe side.

Will you collect the data for me?

No. You get the parser and run it yourself, so the results go straight to you and you can run it again whenever you need fresh data.

What if the site changes or blocks the parser?

The parser works by the pages as they are now. If the site changes its layout later, the parser needs an update, which is a new order. It reads at a polite pace, but a site may still limit visits; it does not get around such limits.

Can it parse Amazon, Google or social networks?

No. Their terms forbid collecting their data this way, many of their pages need signing in, and they hold people's personal data. For such data, use the official API or export of the service.

Do I need to know programming?

No. The README explains how to install Python once, install what the parser needs with one command and run it. For pages that build their content with JavaScript, the parser uses a browser library (Playwright), which the README also covers.

Did not find your answer?

Packages