121 lines
4.7 KiB
Markdown
121 lines
4.7 KiB
Markdown
# Wikipedia Car Spec Extraction
|
|
|
|
Extracting vehicle specifications (horsepower, engine, drivetrain) from Wikipedia when web_search/web_extract tools are unavailable.
|
|
|
|
## URL Pattern
|
|
|
|
Wikipedia car article URLs follow predictable patterns — no search needed:
|
|
|
|
```
|
|
https://en.wikipedia.org/wiki/{Make}_{Model}
|
|
https://en.wikipedia.org/wiki/{Make}_{Model}_(Year)
|
|
https://en.wikipedia.org/wiki/{Make}_{Generation_Code}
|
|
```
|
|
|
|
**Known patterns for current-gen hypercars (2024-2026):**
|
|
- `Ferrari_12Cilindri` — 6.5L V12, 819 hp
|
|
- `Ferrari_F80` — twin-turbo V6 PHEV, 1,184 hp
|
|
- `Ferrari_12Cilindri_Spider` — same specs, convertible body
|
|
- `Lamborghini_Temerario` — twin-turbo V8 PHEV, 907 hp
|
|
- `Bugatti_Tourbillon` — V16 hybrid PHEV, ~1,800 hp
|
|
- `Bugatti_Mistral` — quad-turbo W16, 1,600 hp
|
|
- `McLaren_W1` — twin-turbo V8 PHEV, 1,258 hp
|
|
- `Aston_Martin_Valhalla` — twin-turbo V8 PHEV, 1,079 hp
|
|
- `Aston_Martin_Vanquish` — twin-turbo V12, 824 hp (2025+)
|
|
- `Aston_Martin_Vanquish_(2025)` — separate page for the new gen
|
|
- `Koenigsegg_Gemera` — 1,400 hp (3-cyl) / 2,300 hp (V8)
|
|
- `Koenigsegg_Jesko` — twin-turbo V8, 1,603 hp
|
|
- `Koenigsegg_Jesko_Absolut` — variant, redirects to main Jesko page
|
|
- `Pagani_Utopia` — twin-turbo V12, 852 hp / 864 hp
|
|
- `Lotus_Emeya` — dual-motor EV, 600 hp / 918 hp (R)
|
|
- `Porsche_911_(992)` — entire 992 generation (use anchors like `#992.2`)
|
|
- `BMW_M5_(G90)` — 2025+ M5 (page may be new, watch for missing infobox)
|
|
- `Mercedes-AMG_GT_(C192)` — second-gen AMG GT
|
|
- `Maserati_MC20` — includes MC20 Cielo specs (MC20_Cielo redirects here)
|
|
|
|
## Extraction Technique
|
|
|
|
### Step 1: Download the page
|
|
|
|
```bash
|
|
curl -sL --max-time 20 -H "User-Agent: Mozilla/5.0" \
|
|
"https://en.wikipedia.org/wiki/Ferrari_12Cilindri" -o /tmp/car_page.html
|
|
```
|
|
|
|
### Step 2a: Quick HP check via grep
|
|
|
|
```bash
|
|
# Find all HP/PS/bhp numbers
|
|
grep -oP '\d{3,4}\s*(hp|PS|bhp)' /tmp/car_page.html | head -10
|
|
```
|
|
|
|
### Step 2b: Find infobox and extract power specs
|
|
|
|
```bash
|
|
# Find infobox table and grep power-related data
|
|
grep -oP 'horsepower.*?(?=</td>)' /tmp/car_page.html
|
|
grep -oP '(?:Engine|Power|Layout).*?(?=</td>)' /tmp/car_page.html
|
|
```
|
|
|
|
### Step 2c: Extract full infobox as text
|
|
|
|
The infobox has class `infobox hproduct`. Extract it with a Python script to remove HTML:
|
|
|
|
```python
|
|
import re
|
|
with open('/tmp/car_page.html') as f:
|
|
html = f.read()
|
|
m = re.search(r'<table[^>]*class="infobox[^"]*"[^>]*>.*?</table>', html, re.DOTALL)
|
|
if m:
|
|
text = re.sub(r'<[^>]+>', '\n', m.group(0))
|
|
text = re.sub(r'\n+', '\n', text)
|
|
text = re.sub(r' ', ' ', text)
|
|
lines = [l.strip() for l in text.split('\n') if l.strip()]
|
|
for l in lines:
|
|
if any(k in l.lower() for k in ['hp', 'ps', 'kw', 'power', 'engine']):
|
|
print(l)
|
|
```
|
|
|
|
### Step 3: Context for specific models
|
|
|
|
For the Porsche 992 page (single page covers the entire generation), search within:
|
|
|
|
```bash
|
|
# Find power specs for specific 992.2 models
|
|
grep -oP '.{0,100}541.{0,200}' /tmp/porsche_992_2.html | grep -i 'hp\|ps\|power\|hybrid\|gts'
|
|
# 541 PS = 534 hp (992.2 Carrera GTS T-Hybrid)
|
|
# 711 PS = 701 hp (992.2 Turbo S)
|
|
# 394 PS = 389 hp (992.2 Carrera)
|
|
```
|
|
|
|
## Common Issues
|
|
|
|
- **Redirect pages** (page load returns content from another page) — check `<title>` tag to confirm
|
|
- **Missing infobox** — some brand-new pages haven't been fully templated yet (BMW M5 G90 as of Jul 2026)
|
|
- **PS vs hp** — Wikipedia often shows PS (metric horsepower) first. Convert: 1 PS ≈ 0.986 hp
|
|
- **Combined vs individual** — Hybrid cars show engine-only + motor-only + combined. Look for "combined" keyword on PHEVs
|
|
- **Multiple variants** — If a page covers multiple trims (e.g. Emeya 600 hp base / 918 hp R), power may appear multiple times. Verify which trim each spec belongs to
|
|
|
|
## Cross-Reference Against Local Database
|
|
|
|
When adding to a JSON vehicle database like the portal mockup (`/root/portal-mockup/vehicles.json`):
|
|
|
|
1. **Load the existing database** — read the full JSON to know what's already covered
|
|
2. **Check each found model** against the JSON keys (Make → Model → Year)
|
|
3. **Apply the new entry** only if it's truly missing — don't overwrite existing entries with the same year
|
|
4. **Add model year variants** — a car launched in 2025 should get entries for at least 2025, possibly 2026 if still in production
|
|
|
|
**The database schema is:** `{ "Make": { "Model": { "Year": HP, ... }, ... }, ... }`
|
|
|
|
Example add:
|
|
```json
|
|
"Ferrari": {
|
|
...existing entries...,
|
|
"12Cilindri": {"2025": 819}
|
|
}
|
|
```
|
|
|
|
## Sources
|
|
|
|
Wikipedia infoboxes are sourced from manufacturer press releases and are generally accurate for official HP figures. For track-oriented cars (GT3 RS, GT2 RS, STO, etc.), HP may differ from track-ready numbers if the manufacturer under-rates them — note this uncertainty rather than fabricating.
|