Pada halaman ini
Seorang pembangun Python dengan requests dan BeautifulSoup boleh scrape kebanyakan laman web dalam kurang daripada 50 baris kod. Pendekatan itu telah berkesan sejak 2012. Tetapi pada 2026, ejen AI sedang menulis semula buku panduan scraping -- dan Model Context Protocol berada di tengah-tengah peralihan itu. Soalannya bukan lagi "bolehkah Python scrape ini?" tetapi "patutkah manusia menulis kod scraping sama sekali?"
Panduan ini membandingkan web scraping Python tradisional dengan scraping berasaskan MCP sebelah-menyebelah: tugas yang sama, pendekatan yang berbeza, tukar ganti yang jujur.
Isi Kandungan
- Dua Pendekatan Secara Ringkas
- Tugas 1: Ekstrak Teks Artikel daripada URL
- Tugas 2: Scrape Data Berstruktur dengan Pemilih CSS
- Tugas 3: Crawl Berbilang Halaman dan Agregat Keputusan
- Tugas 4: Kendalikan Kandungan Diberi Render JavaScript
- Perbandingan Prestasi dan Kos
- Bila Hendak Menggunakan Scraping Python
- Bila Hendak Menggunakan Scraping Berasaskan MCP
- Bolehkah Anda Gabungkan Kedua-duanya?
- Soalan Lazim
Dua Pendekatan Secara Ringkas
| Aspek | Scraping Python | Scraping MCP (CrawlForge) |
|---|---|---|
| Masa persediaan | 10-30 min (pasang lib, tulis kod) | 2 min (pasang server, sambung AI) |
| Kod diperlukan | 20-200+ baris setiap scraper | 0 baris (AI memilih alat) |
| Penyelenggaraan | Manual (pemilih rosak) | Auto (AI menyesuaikan diri dengan perubahan) |
| Pengendalian anti-bot | Manual (proksi, pengepala, cuba semula) | Terbina dalam (stealth mode) |
| Format output | HTML mentah, penghuraian manual | Teks bersih, JSON, markdown |
| Integrasi AI | Langkah berasingan (suap data ke LLM) | Asli (LLM memacu scraping) |
| Kos | Percuma (pengkomputeran anda) | Berasaskan credit (1-10 credits/alat) |
| Terbaik untuk | Talian paip tersuai, kawalan penuh | Aliran kerja AI, prototaip pantas |
Tugas 1: Ekstrak Teks Artikel daripada URL
Matlamat: Dapatkan teks yang bersih dan boleh dibaca daripada artikel berita.
Pendekatan Python
// Python equivalent in TypeScript for comparison
// Using node-fetch + cheerio (mirrors requests + BeautifulSoup pattern)
import * as cheerio from 'cheerio';
async function extractArticle(url: string): Promise<string> {
const response = await fetch(url);
const html = await response.text();
const $ = cheerio.load(html);
// Remove scripts, styles, nav, footer
$('script, style, nav, footer, header, aside').remove();
// Try common article selectors
const selectors = ['article', '.post-content', '.article-body', 'main'];
for (const selector of selectors) {
const text = $(selector).text().trim();
if (text.length > 200) return text;
}
// Fallback to body
return $('body').text().trim();
}
const text = await extractArticle('https://techcrunch.com/2026/04/01/ai-agents');
console.log(text); // Often includes nav text, ads, related articlesBaris kod: 18 Isu: Tekaan pemilih, teks iklan/nav menyusup masuk, tiada pemarkahan kebolehbacaan.
Pendekatan MCP
// With CrawlForge MCP -- Claude handles this automatically when you say:
// "Extract the main article text from this TechCrunch post"
// Behind the scenes, Claude calls extract_content:
const result = await crawlforge.extract_content({
url: 'https://techcrunch.com/2026/04/01/ai-agents'
});
console.log(result.content); // Clean article text, no nav/ads/boilerplateBaris kod: 0 (gesaan bahasa semula jadi) atau 4 (panggilan API langsung)
Keputusan: Alat extract_content CrawlForge menggunakan algoritma kebolehbacaan untuk mengasingkan kandungan utama, melucutkan navigasi, iklan, dan kandungan boilerplate secara automatik.
Tugas 2: Scrape Data Berstruktur dengan Pemilih CSS
Matlamat: Ekstrak nama produk dan harga daripada halaman e-dagang.
Pendekatan Python
// Python-style scraping with cheerio
import * as cheerio from 'cheerio';
interface Product {
name: string;
price: string;
rating: string;
}
async function scrapeProducts(url: string): Promise<Product[]> {
const response = await fetch(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
});
const html = await response.text();
const $ = cheerio.load(html);
const products: Product[] = [];
$('.product-card').each((_, element) => {
products.push({
name: $(element).find('.product-title').text().trim(),
price: $(element).find('.price').text().trim(),
rating: $(element).find('.rating').attr('data-score') || 'N/A'
});
});
return products;
}Baris kod: 22 Isu: Pemilih kod keras rosak apabila laman direka semula. Penyamaran User-Agent rapuh. Tiada logik cuba semula.
Pendekatan MCP
// CrawlForge scrape_structured with CSS selectors
const products = await crawlforge.scrape_structured({
url: 'https://store.example.com/products',
selectors: {
name: '.product-card .product-title',
price: '.product-card .price',
rating: '.product-card .rating'
}
});
console.log(products);
// [{ name: "Widget Pro", price: "$29.99", rating: "4.5" }, ...]Baris kod: 8 Kelebihan: CrawlForge mengendalikan putaran User-Agent, cuba semula, dan memulangkan JSON bersih. Jika pemilih perlu dikemas kini, AI boleh memeriksa halaman dan mencadangkan yang baharu.
Tugas 3: Crawl Berbilang Halaman dan Agregat Keputusan
Matlamat: Scrape 5 halaman pertama hasil carian daripada laman dokumentasi.
Pendekatan Python
// Multi-page crawl with manual pagination
import * as cheerio from 'cheerio';
interface SearchResult {
title: string;
url: string;
snippet: string;
}
async function crawlDocs(baseUrl: string, pages: number): Promise<SearchResult[]> {
const results: SearchResult[] = [];
for (let page = 1; page <= pages; page++) {
const url = `${baseUrl}?page=${page}`;
const response = await fetch(url);
const html = await response.text();
const $ = cheerio.load(html);
$('.search-result').each((_, el) => {
results.push({
title: $(el).find('h3 a').text().trim(),
url: $(el).find('h3 a').attr('href') || '',
snippet: $(el).find('.snippet').text().trim()
});
});
// Respectful delay between requests
await new Promise(resolve => setTimeout(resolve, 1000));
}
return results;
}
// 5 pages * 1 second delay = minimum 5 seconds
const results = await crawlDocs('https://docs.example.com/search?q=auth', 5);Baris kod: 28 Isu: Logik penomboran manual, kelewatan kod keras, tiada pelaksanaan selari, tiada pengendalian ralat untuk halaman yang gagal.
Pendekatan MCP
// CrawlForge crawl_deep handles pagination and parallel fetching
const results = await crawlforge.crawl_deep({
url: 'https://docs.example.com/search?q=auth',
max_depth: 2,
max_pages: 50,
include_patterns: ['/docs/'],
extract_content: true,
concurrency: 5 // 5 parallel requests
});
console.log(results.pages.length); // Up to 50 pages crawled
console.log(results.pages[0].content); // Clean extracted content per pageBaris kod: 8 Kelebihan: Kekonkurenan terbina dalam, kawalan kedalaman, penapisan URL, dan pengekstrakan kandungan. CrawlForge menguruskan pemasaan permintaan dan cuba semula secara dalaman.
Tugas 4: Kendalikan Kandungan Diberi Render JavaScript
Matlamat: Scrape SPA React yang memuatkan data produk melalui JavaScript bahagian klien.
Pendekatan Python
// Requires Playwright or Puppeteer for JS rendering
import { chromium } from 'playwright';
async function scrapeSPA(url: string) {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
await page.goto(url, { waitUntil: 'networkidle' });
// Wait for dynamic content to render
await page.waitForSelector('.product-grid', { timeout: 10000 });
const products = await page.evaluate(() => {
return Array.from(document.querySelectorAll('.product-card')).map(card => ({
name: card.querySelector('.name')?.textContent?.trim() || '',
price: card.querySelector('.price')?.textContent?.trim() || ''
}));
});
await browser.close();
return products;
}Baris kod: 20 Isu: Memerlukan binari pelayar (~400MB), penggunaan memori yang tinggi, pelaksanaan lebih perlahan, logik tunggu manual.
Pendekatan MCP
// CrawlForge scrape_with_actions handles JS rendering + interaction
const result = await crawlforge.scrape_with_actions({
url: 'https://react-store.example.com/products',
actions: [
{ type: 'wait', selector: '.product-grid', timeout: 10000 },
{ type: 'scroll', selector: 'body' } // Trigger lazy loading
],
extractionOptions: {
selectors: {
name: '.product-card .name',
price: '.product-card .price'
}
}
});Baris kod: 11 Kelebihan: Tiada binari pelayar tempatan diperlukan. CrawlForge menjalankan pelayar dalam infrastrukturnya. Tindakan bersifat deklaratif, bukan imperatif.
Perbandingan Prestasi dan Kos
| Metrik | Python (DIY) | MCP (CrawlForge) |
|---|---|---|
| Masa persediaan | 30-60 min | 2-5 min |
| Masa ke keputusan pertama | 5-15 min (tulis + nyahpepijat) | 30 saat (bahasa semula jadi) |
| Baris kod setiap scraper | 20-200 | 0-15 |
| Beban penyelenggaraan | Tinggi (pemilih rosak) | Rendah (AI menyesuaikan diri) |
| Kos infrastruktur | Pelayan + proksi anda | $0-$99/mo (berasaskan credit) |
| Pengendalian anti-bot | Pelaksanaan manual | Terbina dalam stealth mode |
| Pelaksanaan selari | Kod async manual | Kekonkurenan terbina dalam |
| Integrasi AI | Langkah talian paip berasingan | Asli (LLM ialah orkestrator) |
Bila Hendak Menggunakan Scraping Python
Scraping Python ialah pilihan yang lebih baik apabila:
- Anda memerlukan kawalan talian paip penuh -- ETL tersuai, transformasi data tertentu, integrasi dengan pandas/numpy
- Anda melakukan scraping pada skala besar-besaran -- berjuta-juta halaman di mana kos credit akan menjadi penghalang (kluster Scrapy boleh berjalan lebih murah setiap halaman pada volum itu)
- Anda mempunyai infrastruktur sedia ada -- kumpulan proksi, baris gilir permintaan, papan pemuka pemantauan sudah dibina
- Sasaran adalah stabil -- alat dalaman, API, atau halaman dengan struktur yang dikenali baik yang jarang berubah
- Anda memerlukan pelaksanaan luar talian -- persekitaran air-gapped atau pelaksanaan edge tanpa akses internet
Bila Hendak Menggunakan Scraping Berasaskan MCP
Scraping berasaskan MCP dengan CrawlForge ialah pilihan yang lebih baik apabila:
- Anda sedang membina aplikasi AI -- talian paip RAG, ejen penyelidikan, sistem analisis kandungan
- Kelajuan ke keputusan penting -- prototaip, penyelidikan sekali sahaja, analisis daya saing
- Anda tidak mahu menyelenggara scraper -- AI mengendalikan perubahan pemilih dan reka bentuk semula laman
- Pintasan anti-bot diperlukan -- stealth mode CrawlForge mengendalikan pengelakan pengesanan
- Anda mahukan sifar infrastruktur -- tiada pelayan, proksi, atau binari pelayar untuk diuruskan
- Berbilang format output diperlukan -- teks, JSON, markdown daripada sumber yang sama
Bolehkah Anda Gabungkan Kedua-duanya?
Ya. Banyak pasukan menggunakan Python untuk talian paip data teras mereka dan CrawlForge untuk lapisan pengekstrakan. Begini caranya:
// Use CrawlForge for extraction, Python/TypeScript for pipeline logic
import { CrawlForge } from '@crawlforge/sdk';
const cf = new CrawlForge({ apiKey: process.env.CRAWLFORGE_API_KEY });
// Step 1: Use CrawlForge to extract clean content
const extracted = await cf.extractContent({
url: 'https://competitor.com/pricing'
});
// Step 2: Process with your own pipeline
const pricing = parsePricingMarkdown(extracted.content);
await database.upsert('competitor_pricing', pricing);
await notifySlack(`Updated pricing data: ${pricing.plans.length} plans found`);Pendekatan hibrid ini memberi anda kualiti pengekstrakan dan ciri anti-bot CrawlForge sambil mengekalkan logik talian paip anda dalam pangkalan kod anda sendiri.
Soalan Lazim
Adakah scraping MCP lebih pantas daripada scraping Python?
Masa ke keputusan pertama jauh lebih pantas dengan MCP. Permintaan bahasa semula jadi kepada Claude dengan CrawlForge memulangkan keputusan dalam beberapa saat, berbanding 10-30 minit menulis dan menyahpepijat kod Python. Kelajuan pelaksanaan mentah adalah setanding -- kedua-duanya membuat permintaan HTTP ke laman sasaran. Perbezaannya ialah masa pembangun, bukan masa rangkaian.
Bolehkah MCP menggantikan Python untuk web scraping sepenuhnya?
Tidak. Scraping Python memberi anda kawalan penuh ke atas setiap aspek talian paip -- penjadualan permintaan, logik penghuraian tersuai, transformasi data, dan integrasi dengan pustaka pengkomputeran saintifik. MCP adalah terbaik untuk aliran kerja dipacu AI, prototaip, dan kes di mana anda mahu LLM mengorkestra scraping. Banyak pasukan menggunakan kedua-duanya.
Berapakah kos scraping MCP berbanding pustaka Python percuma?
Peringkat percuma CrawlForge termasuk 1,000 credit sekali sahaja untuk bermula. Operasi mudah seperti fetch_url berkos 1 credit, operasi lanjutan seperti deep_research berkos 10. Pelan Hobby pada $19/mo menyediakan 5,000 credits, yang merangkumi beban kerja pengeluaran ringan. Pustaka Python adalah percuma, tetapi anda membayar untuk perkhidmatan proksi, infrastruktur pengkomputeran, dan masa pembangun untuk menyelenggara scraper.
Bolehkah CrawlForge scrape laman yang menyekat permintaan Python?
Ya. Stealth mode CrawlForge menggunakan pengacakan cap jari, proksi kediaman, dan simulasi tingkah laku manusia untuk memintas pengesanan anti-bot. Scraping Python tradisional dengan requests atau httpx mudah dikesan oleh sistem anti-bot moden seperti Cloudflare Turnstile, DataDome, dan PerimeterX.
Cuba scraping berasaskan MCP dan lihat perbezaannya. Mula percuma dengan 1,000 credits -- sambungkan CrawlForge ke Claude dan jalankan scrape pertama anda dalam masa kurang seminit.
Cuba sendiri — tiada pendaftaran diperlukan
Jalankan mana-mana daripada 27 alat scraping dan pengekstrakan CrawlForge dalam playground, kemudian mula secara percuma dengan 1,000 credits.
1,000 credits percuma • Isi semula setiap bulan • Tiada kad kredit diperlukan
Tag
Tentang Penulis
Kekal dikemas kini dengan pandangan terkini
Dapatkan tutorial, kemas kini produk dan petua web scraping terus ke peti masuk anda.
Tiada spam. Berhenti melanggan bila-bila masa.