Skip to main content

Python package, scraping recipes from all over the internet

Project description

Github Version Downloads GitHub Actions Unittests Coveralls License Codacy Badge

A simple web scraping tool for recipe sites.

pip install recipe-scrapers

then:

from recipe_scrapers import scrape_me

scraper = scrape_me('https://www.allrecipes.com/recipe/158968/spinach-and-feta-turkey-burgers/')

# Q: What if the recipe site I want to extract information from is not listed below?
# A: You can give it a try with the wild_mode option! If there is Schema/Recipe available it will work just fine.
scraper = scrape_me('https://www.feastingathome.com/tomato-risotto/', wild_mode=True)

scraper.host()
scraper.title()
scraper.total_time()
scraper.image()
scraper.ingredients()
scraper.instructions()
scraper.instructions_list()
scraper.yields()
scraper.to_json()
scraper.links()
scraper.nutrients()  # if available

You also have an option to scrape html-like content

import requests
from recipe_scrapers import scrape_html

url = "https://www.allrecipes.com/recipe/158968/spinach-and-feta-turkey-burgers/"
html = requests.get(url).content

scraper = scrape_html(html=html, org_url=url)

scraper.title()
scraper.total_time()
# etc...

Notes:

  • scraper.links() returns a list of dictionaries containing all of the <a> tag attributes. The attribute names are the dictionary keys.

Scrapers available for:

(*) offline saved files only

Contribute

If you spot a design change (or something else) that makes the scraper unable to work for a given site - please fire an issue asap.

If you are programmer PRs with fixes are warmly welcomed and acknowledged with a virtual beer.

If you want a scraper for a new site added

  • Open an Issue providing us the site name, as well as a recipe link from it.

  • You are a developer and want to code the scraper on your own:

    • If Schema is available on the site - you can go like this.

    • Otherwise, scrape the HTML - like this

    • Generating a new scraper class:

      python generate.py <ClassName> <URL>
      • ClassName: The name of the new scraper class.

      • URL: The URL of an example recipe from the target site. The content will be stored in test_data to be used with the test class.

For Devs / Contribute

Assuming you have >=python3.7 installed, navigate to the directory where you want this project to live in and drop these lines

git clone git@github.com:hhursev/recipe-scrapers.git &&
cd recipe-scrapers &&
python3 -m venv .venv &&
source .venv/bin/activate &&
python -m pip install --upgrade pip &&
pip install -r requirements-dev.txt &&
pip install pre-commit &&
pre-commit install &&
python -m unittest

In case you want to run a single unittest for a newly developed scraper

python -m unittest tests.test_myscraper

FAQ

  • How do I know if a website has a Recipe Schema? Run in python shell:

from recipe_scrapers import scrape_me
scraper = scrape_me('<url of a recipe from the site>', wild_mode=True)
# if no error is raised - there's schema available:
scraper.title()
scraper.instructions()  # etc.

Netiquette

If you’re using this library to collect large numbers of recipes from the web, please use the software responsibly and try to avoid creating high volumes of network traffic.

Python’s standard library provides a robots.txt parser that may be helpful to automatically follow common instructions specified by websites for web crawlers.

Another parser option – particularly if you find that many web requests from urllib.robotparser are blocked – is the robotexclusionrulesparser library.

Special thanks to:

All the contributors that helped improving the package. You are awesome!

Extra:

You want to gather recipes data?
You have an idea you want to implement?
Check out our “Share a project” wall - it may save you time and spark ideas!

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

recipe_scrapers-14.31.0.tar.gz (73.8 kB view details)

Uploaded Source

Built Distribution

recipe_scrapers-14.31.0-py3-none-any.whl (158.0 kB view details)

Uploaded Python 3

File details

Details for the file recipe_scrapers-14.31.0.tar.gz.

File metadata

  • Download URL: recipe_scrapers-14.31.0.tar.gz
  • Upload date:
  • Size: 73.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.1

File hashes

Hashes for recipe_scrapers-14.31.0.tar.gz
Algorithm Hash digest
SHA256 d3b54247e47a7d2a528bb94616ad273d028c655208f01b31ccea7e5cb74104b3
MD5 0f960965b43204d9280b798ee7e3c601
BLAKE2b-256 255287da7ba102c86ddbb3269534e7606788e8d280783e43688f3f35cc84b121

See more details on using hashes here.

File details

Details for the file recipe_scrapers-14.31.0-py3-none-any.whl.

File metadata

File hashes

Hashes for recipe_scrapers-14.31.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0944a20fdd464f563329326fe940b12d36fa915a12b54e91c62c86f7ce3c61b8
MD5 1769b5e36e45874c334302794342d19d
BLAKE2b-256 612b91b0a5d7e19c64f9f8969af193f83e05b36e3954fecd20cf384f78dca188

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page