1 - Clone the repository
git clone https://github.com/IllusoryTime/brand-scraper.git
2 - Create a virtual environment
python -m venv venv
3 - Activate the virtual environment
venv\Scripts\activate # Windows
source venv/bin/activate # MacOS/Linux
4 - Change the current working directory
cd brand-scraper
5 - Install requirements
pip install -r requirements.txt
6 - Configure the database
python manage.py migrate
To start this project you will need to have running Django and Scrapyd at the same time.
To run Django
python manage.py runserver
To run Scrapyd
cd scraper
scrapyd
Django is running on: http://127.0.0.1:8000. Scrapyd is running on: http://localhost:6800
There are a couple of libraries/frameworks for scraping, the two most popular are BeautifulSoup and Scrapy. The thought process behind choosing Scrapy is described below:
- Scrapy is feature heavy, has better performance, can scale well, and is easily extendable.
- Scrapy runs asynchronously on its own thread out-of-the-box. This is an important feature because we do not want to block our main Django server thread doing a heavy CPU-intensive task. I believe we can achieve this BeautifulSoup with multi-threading/Celery.
- When a client sends a request, we schedule a task for Scrapy and return a task_id to the client. Scraping will be done in the background. In the real world we should notify the user via email or webhook, Scrapy has built-in support for this.
- Scrapy has an Image pipeline that downloads the images and stores them to a file server i.e, an S3 bucket. However, we are storing images on the local server for this application.
- Scrapy has thumbnail generation feature. If images are queried frequently we can generate a thumbnail after downloading the images. It improves performance significantly.
- Pagination of list APIs.
- Introduce logging for better debugging and issue investigation.
- Add testing coverage in critical areas like image scraping, downloading, and thumbnail generation.
- API documentation using Swagger.
- Use Static Typing throughout the project, this is optional but good to have.
- Use an S3 bucket for storing images instead local server.
- Add Authentication/Authorization.
- Generate thumbnail of frequently queried images and serve them via CDN i.e, CloudFront.
- Implement a webhook to notify users when scraping is completed.
- Most popular websites have anti-bot mechanisms enabled which make scraping harder. Implement a custom rotating proxy and user agent through Scrapy middleware to bypass this.
Takes an URL, and returns the task_id
and status
. Note that this API doesn't wait for scraping to be finished.
Scraping will run in the background and after finishing images will be stored in the local server and metadata will be
stored in the database.
{
"url": "https://en.wikipedia.org/wiki/Main_Page"
}
Status Code: HTTP 200 OK
{
"task_id": "c3aab132162c11edb8e9e75cc558e41f",
"status": "started"
}
Returns image metadata if a valid id is given, otherwise, HTTP 404 Not Found will be returned. Note that the image id is a UUID field.
Example: /image/metadata/34acb4e1-5209-4d4d-be25-3c64dd1bbe1c
Status Code: HTTP 200 OK
{
"id": "34acb4e1-5209-4d4d-be25-3c64dd1bbe1c",
"web_page": "https://en.wikipedia.org/wiki/Karaoke",
"file_name": "full/c9dda8156d98b1812988afbd29b76da10b0a5d0c.jpg",
"height": 165,
"width": 220,
"scrape_date": "2022-08-07",
"file_size": 10.6,
"mode": "RGB",
"format": "JPEG"
}
Returns a list of image metadata if ORIGINAL_URL (URL that was used to scrape images) is matched in the database.
Example: /image/metadata/?url=https://en.wikipedia.org/wiki/Main_Page
Status Code: HTTP 200 OK
[
{
"id": "bf7ad778-fa9d-4bbb-b9f4-4a98b93a023c",
"web_page": "https://en.wikipedia.org/wiki/Main_Page",
"file_name": "full/4acad00c5eb18ee4f9d0b40755e05d61b38c7cac.jpg",
"height": 114,
"width": 171,
"scrape_date": "2022-08-07",
"file_size": 5.47,
"mode": "RGB",
"format": "JPEG"
},
{
"id": "ec1508bb-b344-4829-b106-90d3d1d7221e",
"web_page": "https://en.wikipedia.org/wiki/Main_Page",
"file_name": "full/35a9fc2721ea28f976f3ad70621efb4c585c3614.jpg",
"height": 122,
"width": 162,
"scrape_date": "2022-08-07",
"file_size": 2.35,
"mode": "RGB",
"format": "JPEG"
}
]
Returns image base64 string if a valid id is given, otherwise, HTTP 404 Not Found will be returned. Note that the image
id is a UUID field. An optional query parameter size
can be sent.
Example: /image/34acb4e1-5209-4d4d-be25-3c64dd1bbe1c
Status Code: HTTP 200 OK
"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"
Returns a list of image base64 string if ORIGINAL_URL (URL that was used to scrape images) is mathced in the database.
An optional query parameter size
can be sent.
Example: /image/?url=https://en.wikipedia.org/wiki/Main_Page&size=small
Status Code: HTTP 200 OK
[
"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"
]