MIL-002 scrape-price
Metadata
| Key |
Value |
| ID |
MIL-002 |
| CrossReference |
BC-001 |
| Language |
en |
| Domain |
it |
Version History
| Date |
Status |
Author |
Reviewer |
Change |
Commit |
| 2026-10-28 |
Accepted |
Jens Tirsvad Nielsen |
AI as stand-in for S01 |
Initial version Accepted after review (RC-005 Go) |
f9765fd |
Purpose
Decide whether Step 1 of the lecture (BeautifulSoup scrapes the price from the practice page) is complete.
Deliverable
Branch mil-002-scrape-price merged: a scraper that returns the title and the price as a float, a saved copy of the practice page used by tests, a screenshot of the step, and the README section for it.
Go / No-Go Criteria
| # |
Criterion (objectively checkable) |
Go |
No-Go |
| 1 |
Price from the saved practice page is 99.99 as a float |
pytest asserts it |
Wrong value or type |
| 2 |
Tests need no network access |
Run with the network off passes |
A test calls the network |
| 3 |
Function names follow the assignment (get_price, get_title) |
Names exist in the module |
Different names |
| 4 |
Step screenshot is in the README |
File exists and is linked |
Missing |
Dependencies
| Depends on |
Reason |
| MIL-001: project set-up must be accepted first |
Each step builds on the one before it |
Traceability
| Business Case objective / KPI / user story |
Reference |
| Objective 1 (price as a float) of BC-001 |
Tasks of this gateway |
Ownership
| Role |
Stakeholder ID (SA) |
| Owner |
S01 |
| Approving reviewer |
S01 |
Target Date
2026-10-29 — within the Business Case constraints (one branch and pull request per milestone).
Tasks
| # |
Task |
Summary |
Needs its own Use Case/User Story? |
Reference |
| 1 |
Save the practice page as a test fixture |
Store a copy of https://appbrewery.github.io/instant_pot/ under tests/fixtures/ so the parser is tested without the network. |
No |
|
| 2 |
Implement price and title parsing |
get_price(html) finds the price element, strips the currency sign (split or lstrip) and returns a float; get_title(html) returns the product title. Both use BeautifulSoup (lxml is not needed; html.parser). |
No |
|
| 3 |
Fetch the page and print the price in main |
main.py requests the URL from constants.py, parses it and prints the title and price. |
No |
|
| 4 |
Unit tests for the parser |
Tests for price as float, title text and a page without a price (clear error). |
No |
|
| 5 |
Screenshot and README for Step 1 |
Capture the run output and the practice page; save under docs/images/step-1-*.png; add the Step 1 section to the README. |
No |
|