phone-specs-scraper
phone-specs-scraper extracts detailed smartphone specifications from GSM Arena, PhoneDB, PhoneArena, and other phone database websites. Use this skill when comparing phone models, researching device features before purchase, building phone comparison tools, or gathering technical specifications from multiple sources for analysis and documentation.
git clone --depth 1 https://github.com/besoeasy/open-skills /tmp/phone-specs-scraper && cp -r /tmp/phone-specs-scraper/skills/phone-specs-scraper ~/.claude/skills/phone-specs-scraperSKILL.md
# Phone Specifications Scraper
Extract detailed smartphone specs from popular phone database websites for comparison and research.
## When to use
- User asks to compare phone specifications
- Researching device features before purchase
- Building phone comparison tools or databases
- Finding detailed technical specifications
## Required tools / APIs
- No external API required
- Web scraping tools: curl, wget, or Playwright/Puppeteer
- HTML parsing: BeautifulSoup (Python), cheerio (Node.js), or grep/sed (bash)
## Phone Spec Websites
### Primary Sources
**1. GSM Arena (gsmarena.com)**
- Largest phone database with detailed specs
- URL pattern: `https://www.gsmarena.com/[brand]_[model]-[id].php`
- Example: `https://www.gsmarena.com/google_pixel_9-13242.php`
**2. PhoneDB (phonedb.net)**
- Detailed device specifications database
- URL pattern: `https://phonedb.net/index.php?m=device&s=query&d=[device-name]`
**3. PhoneArena (phonearena.com)**
- Phone reviews and comparisons
- URL pattern: `https://www.phonearena.com/phones/[brand]-[model]`
**4. MK Mobile Arena (mkmobilearena.com)**
- Side-by-side phone comparisons
- URL pattern: `https://mkmobilearena.com/phone-compare/[phone1]-vs-[phone2]`
**5. TechRadar (techradar.com)**
- Phone reviews with spec comparisons
- URL pattern: `https://www.techradar.com/phones/[brand]-[model]`
**6. DeviceBeast (devicebeast.com)**
- Comprehensive device specs
- URL pattern: `https://devicebeast.com/phones/[brand]-[model]`
**7. Comparigon (comparigon.com)**
- Side-by-side comparisons
- URL pattern: `https://comparigon.com/phones/[brand]-[model]`
**8. SpecsBattle (specsbattle.com)**
- Detailed phone comparisons
- URL pattern: `https://specsbattle.com/phones/[brand]-[model]`
## Skills
### scrape_gsmarena_specs
Scrape phone specs from GSM Arena using curl and grep.
```bash
# Get phone specs from GSM Arena
PHONE_URL="https://www.gsmarena.com/google_pixel_9-13242.php"
# Download page and extract key specs
curl -s "$PHONE_URL" | grep -oP '(?<=<td class="ttl">)[^<]+' | head -20
# Extract specifications table
curl -s "$PHONE_URL" | grep -A2 'class="specs-cp"' | grep -oP '(?<=<td>)[^<]+'
```
**Node.js with cheerio:**
```javascript
const cheerio = require('cheerio');
async function scrapeGSMArenaSpecs(url) {
const response = await fetch(url);
const html = await response.text();
const $ = cheerio.load(html);
const specs = {};
// Extract basic info
specs.name = $('h1.specs-phone-name').text().trim();
specs.released = $('.specs-cp .specs-cp-release').text().trim();
specs.weight = $('.specs-cp .specs-cp-weight').text().trim();
// Extract all specification tables
$('.specs-cp table').each((i, table) => {
const category = $(table).find('th').text().trim();
specs[category] = {};
$(table).find('tr').each((j, row) => {
const key = $(row).find('td.ttl').text().trim();
const value = $(row).find('td.nfo').text().trim();
if (key && value) {
specs[category][key] = value;
}
});
});
return specs;
}
// Usage
// scrapeGSMArenaSpecs('https://www.gsmarena.com/google_pixel_9-13242.php').then(console.log);
```
### search_phone_specs
Search for phone specs across multiple sources.
```bash
# Search using SearXNG for phone comparison pages
QUERY="Google Pixel 9 vs Pixel 10 specs comparison"
INSTANCE="https://searx.party"
curl -s "${INSTANCE}/search?q=${QUERY}&format=json" | jq -r '.results[] | select(.url | contains("gsmarena\|phonedb\|mkmobilearena")) | {title, url}'
```
**Node.js:**
```javascript
async function searchPhoneSpecs(phone1, phone2) {
const query = `${phone1} vs ${phone2} specs comparison`;
const searxInstances = [
'https://searx.party',
'https://searx.tiekoetter.com',
'https://searx.ninja'
];
for (const instance of searxInstances) {
try {
const params = new URLSearchParams({
q: query,
format: 'json',
language: 'en'
});
const res = await fetch(`${instance}/search?${params}`, { timeout: 10000 });
const data = await res.json();
// Filter for phone spec sites
const specSites = data.results.filter(r =>
r.url.includes('gsmarena.com') ||
r.url.includes('mkmobilearena.com') ||
r.url.includes('techradar.com') ||
r.url.includes('phonedb.net')
);
if (specSites.length > 0) {
return specSites;
}
} catch (err) {
console.warn(`Instance ${instance} failed: ${err.message}`);
}
}
throw new Error('No working search instances found');
}
// Usage
// searchPhoneSpecs('Google Pixel 9', 'Google Pixel 10').then(console.log);
```
### compare_two_phones
Compare specifications between two phones with highlighted differences.
```javascript
async function comparePhones(phone1Specs, phone2Specs) {
const comparison = {
matches: [],
differences: [],
upgrades: [],
downgrades: []
};
// Compare key specs
const keyFields = [
'chipset', 'display', 'battery', 'mainCamera',
'ram', 'storage', 'weight', 'releaseDate'
];
for (const field of keyFields) {
const val1 = phone1Specs[field];
const val2 = phone2Specs[field];
if (val1 === val2) {
comparison.matches.push({ field, value: val1 });
} else {
comparison.differences.push({
field,
phone1: val1,
phone2: val2
});
// Detect upgrades (simplified logic)
if (field === 'battery' || field === 'ram' || field === 'storage') {
const num1 = parseInt(val1);
const num2 = parseInt(val2);
if (!isNaN(num1) && !isNaN(num2) && num2 > num1) {
comparison.upgrades.push({ field, from: val1, to: val2 });
}
}
}
}
return comparison;
}
// Usage example with formatted output
function formatComparison(comparison) {
let output = '## Phone Comparison\n\n';
output += '### ✅ Same Specs\n';
comparison.matches.foEncrypt and decrypt files or streams using age — a simple, modern, and secure encryption tool with small explicit keys, passphrase support, SSH key support, post-quantum hybrid keys, and UNIX-style composability. No config options, no footguns.
Upload and host files anonymously using decentralized storage with Originless and IPFS.
Automate web browsers for AI agents using agent-browser CLI with deterministic element selection.
Star all repositories from a GitHub user automatically. Use when: (1) Supporting open source creators, (2) Bulk discovery of useful projects, or (3) Automating GitHub engagement.
Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.
Log all chat messages to a SQLite database for searchable history and audit. Use when: (1) Building chat history, (2) Auditing conversations, (3) Searching past messages, or (4) User asks to log chats.
Check cryptocurrency wallet balances across multiple blockchains using free public APIs.
Calculate line-of-sight and road distances between two cities using free OpenStreetMap services.