Windows lab PARANORMAL TECH Εργαλεία Quantum Lab 🚀 Code Playground Tech Challenges Interactive Tutorials Mobile Dev Studio Οδηγος για αρχαριους Web3 Λεξικό AI Series Tech Quiz AI Stats 🎮 Cyber Game Σχετικά με εμένα Επικοινωνία

Web Scraping 2026: Από το Beautiful Soup στο AI-Assisted Data Extraction

Εικόνα Web Scraping 2026
Εικόνα: AI-generated

Το web scraping έχει εξελιχθεί δραματικά από το 2025.

Σε αυτόν τον ανανεωμένο οδηγό για το 2026, θα καλύψουμε:

  • Python HTTPX & Playwright — τα νέα standard εργαλεία
  • Anti-bot bypass τεχνικές — stealth mode, browser fingerprints, rotating proxies
  • AI-assisted scraping — χρήση LLMs για dynamic parsing & data extraction
  • Ethical scraping & Νομοθεσία 2026 — τι επιτρέπεται, τι απαγορεύεται
  • Async scraping — μαζική συλλογή δεδομένων με asyncio

1. Η Νέα Στοίβα του Web Scraping (2026)

Το 2026, η τυπική στοίβα εργαλείων για professional scraping περιλαμβάνει:

Εργαλείο Χρήση Γιατί 2026
HTTPX Async HTTP client Αντικαθιστά τα requests για async operations
Playwright Headless browser automation Stealth, anti-bot bypass, JS rendering
Beautiful Soup / lxml HTML parsing Ακόμα χρήσιμο για static HTML
LLM (Claude/GPT) Dynamic data extraction Αντί για regex/selectors — natural language parsing
Scrapy + Splash Production scraping framework Για μεγάλης κλίμακας scraping projects

2. HTTPX: Το Νέο Standard

Το HTTPX προσφέρει async/await support, HTTP/2, connection pooling και καλύτερο timeout handling από τα requests. Ιδανικό για μαζικό scraping:

import httpx
import asyncio

async def scrape_page(url: str) -> str:
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "el-GR,el;q=0.9,en;q=0.7",
        "Accept-Encoding": "gzip, deflate, br",
    }
    async with httpx.AsyncClient(http2=True, timeout=30.0) as client:
        response = await client.get(url, headers=headers)
        response.raise_for_status()
        return response.text

async def main():
    urls = [
        "https://example.com/page1",
        "https://example.com/page2",
        "https://example.com/page3",
    ]
    tasks = [scrape_page(url) for url in urls]
    results = await asyncio.gather(*tasks)
    for html in results:
        print(f"Συλλέχθηκαν {len(html)} bytes")

asyncio.run(main())

3. Playwright: Η Λύση για JavaScript Sites & Anti-Bot

Το Playwright (από τη Microsoft) είναι το industry standard για scraping το 2026. Προσφέρει stealth mode, browser fingerprint customization και auto-wait για dynamic περιεχόμενο:

from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync
import json

def scrape_with_stealth(url: str) -> dict:
    with sync_playwright() as p:
        # Χρήση Chrome αντί για Chromium για πιο ρεαλιστικό fingerprint
        browser = p.chromium.launch(
            headless=True,
            args=[
                "--disable-blink-features=AutomationControlled",
                "--no-sandbox",
                "--disable-dev-shm-usage",
            ]
        )
        context = browser.new_context(
            viewport={"width": 1920, "height": 1080},
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
            locale="el-GR",
            timezone_id="Europe/Athens",
            geolocation={"latitude": 37.9838, "longitude": 23.7275},
            permissions=["geolocation"],
        )
        
        # Εφαρμογή stealth mode
        page = context.new_page()
        stealth_sync(page)
        
        # Απόκρυψη webdriver
        page.add_init_script("""
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            });
            // Απόκρυψη Chrome automation
            window.chrome = {
                runtime: {},
                loadTimes: function() {},
                csi: function() {},
                app: {}
            };
        """)
        
        page.goto(url, wait_until="networkidle", timeout=30000)
        
        # Αναμονή για dynamic content
        page.wait_for_selector("article", timeout=10000)
        
        data = page.evaluate("""
            () => ({
                title: document.title,
                articles: Array.from(document.querySelectorAll('article')).map(a => ({
                    title: a.querySelector('h2')?.innerText || '',
                    content: a.querySelector('p')?.innerText || '',
                    url: a.querySelector('a')?.href || ''
                }))
            })
        """)
        
        browser.close()
        return data

# Χρήση
result = scrape_with_stealth("https://example.com/blog")
print(json.dumps(result, indent=2, ensure_ascii=False))

4. AI-Assisted Scraping με LLMs

Το 2026, η μεγαλύτερη καινοτομία στο scraping είναι η χρήση Large Language Models (LLMs) για dynamic parsing. Αντί να γράφουμε selectors που σπάνε με κάθε update, δίνουμε στο LLM το HTML και ζητάμε τα δεδομένα σε φυσική γλώσσα:

import instructor
from openai import OpenAI
from pydantic import BaseModel
from typing import List

class Article(BaseModel):
    title: str
    summary: str
    category: str
    publish_date: str
    author: str
    tags: List[str]

class ExtractionResult(BaseModel):
    articles: List[Article]
    page_title: str
    total_count: int

def extract_with_ai(html_content: str) -> ExtractionResult:
    client = instructor.from_openai(OpenAI())
    
    response = client.chat.completions.create(
        model="gpt-4o",  # ή claude-3-opus
        response_model=ExtractionResult,
        messages=[
            {
                "role": "system",
                "content": """Είσαι ένα εξειδικευμένο σύστημα εξαγωγής δεδομένων.
                Ανάλυσε το HTML που θα σου δώσω και εξαγαγε τα άρθρα σε δομημένη μορφή.
                Αγνόησε navigation, footers, διαφημίσεις."""
            },
            {
                "role": "user",
                "content": f"Εξαγαγε όλα τα άρθρα από το παρακάτω HTML:\n\n{html_content[:50000]}"
            }
        ]
    )
    return response

# Χρήση
html = scrape_with_stealth("https://example.com/blog")
result = extract_with_ai(html)
for article in result.articles:
    print(f"- {article.title} ({article.category})")

5. Anti-Bot Bypass: Τεχνικές 2026

Τα σύγχρονα anti-bot συστήματα (Cloudflare Turnstile, DataDome, PerimeterX) χρησιμοποιούν:

  • Behavioral analysis: mouse movements, scroll patterns, typing speed
  • Browser fingerprinting: WebGL, Canvas, AudioContext, fonts, plugins
  • JS challenges: Proof-of-Work, computational challenges
  • CAPTCHA v3: invisible risk scoring

Στρατηγικές αντιμετώπισης:

  1. Rotating residential proxies: BrightData, Oxylabs, Smartproxy
  2. Browser fingerprint spoofing: Playwright Stealth, Puppeteer Extra
  3. Human-like behavior simulation: τυχαίες κινήσεις ποντικιού, random delays
  4. Session management: cookies, localStorage, cache persistence
  5. Rate limiting respect: exponential backoff, jitter
import asyncio
import random
from playwright.async_api import async_playwright

async def human_like_scroll(page):
    """Προσομοίωση ανθρώπινης κύλισης"""
    for _ in range(random.randint(3, 8)):
        await page.mouse.wheel(0, random.randint(300, 700))
        await asyncio.sleep(random.uniform(0.5, 2.0))
        # Τυχαία μικρή κίνηση ποντικιού
        x = random.randint(100, 1800)
        y = random.randint(100, 900)
        await page.mouse.move(x, y, steps=random.randint(5, 15))

async def smart_scrape(url: str, proxy: str = None):
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=True,
            proxy={"server": proxy} if proxy else None
        )
        context = await browser.new_context(
            viewport={"width": 1920, "height": 1080},
            locale="el-GR"
        )
        page = await context.new_page()
        
        # Προσθήκη cookies session αν υπάρχουν
        await context.add_cookies([{
            "name": "session_id",
            "value": "previously_saved_session",
            "domain": ".example.com",
            "path": "/"
        }])
        
        await page.goto(url, wait_until="domcontentloaded")
        await page.wait_for_timeout(random.randint(1000, 3000))
        
        # Ανθρώπινη συμπεριφορά
        await human_like_scroll(page)
        
        # Εξαγωγή δεδομένων
        content = await page.content()
        await browser.close()
        return content

6. Ethical Scraping & Νομοθεσία 2026

Το 2026, το scraping ρυθμίζεται από:

  • EU AI Act — απαιτεί transparency για scraping που χρησιμοποιείται σε AI training
  • GDPR — προστασία προσωπικών δεδομένων κατά τη συλλογή
  • Digital Services Act (DSA) — πρόσβαση σε δεδομένα πλατφορμών
  • robots.txt — αν και μη νομικά δεσμευτικό, η αγνόησή του μπορεί να χρησιμοποιηθεί εναντίον σου
⚠️ Σημαντικό: Πριν scrapάρεις οποιαδήποτε ιστοσελίδα, έλεγξε:
  • Το robots.txt της σελίδας
  • Τους όρους χρήσης (Terms of Service)
  • Αν τα δεδομένα είναι προσωπικά (GDPR)
  • Αν θα χρησιμοποιηθούν για AI training (AI Act)

Βέλτιστες Πρακτικές Ethical Scraping

  1. Rate limiting: Μην στέλνεις πάνω από 1 request/sec ανά IP
  2. Cache: Αποθήκευσε αποτελέσματα για να μην ξαναχτυπάς το ίδιο endpoint
  3. Attribution: Ανέφερε την πηγή των δεδομένων
  4. Contact: Αν είναι δυνατόν, επικοινώνησε με τον κάτοχο του site
  5. API: Προτίμησε official APIs όπου υπάρχουν

7. Από το Beautiful Soup στο Pipeline 2026

Για reference, η κλασική μέθοδος με Beautiful Soup παραμένει χρήσιμη για απλά static sites:

import httpx
from bs4 import BeautifulSoup
from typing import List, Dict

def classic_scrape(url: str) -> List[Dict]:
    response = httpx.get(url, follow_redirects=True)
    soup = BeautifulSoup(response.text, 'lxml')
    
    articles = []
    for article in soup.select('article.post'):
        articles.append({
            'title': article.select_one('h2 a').get_text(strip=True),
            'url': article.select_one('h2 a')['href'],
            'summary': article.select_one('p.summary').get_text(strip=True),
            'date': article.select_one('time')['datetime'],
        })
    
    return articles

Σύνοψη & Επόμενα Βήματα

Το web scraping το 2026 απαιτεί:

  • Playwright αντί για απλό requests — για JS rendering & anti-bot bypass
  • HTTPX για async HTTP operations
  • LLMs για intelligent parsing αντί για fragile selectors
  • Residential proxies & stealth techniques για anti-bot
  • Νομική συμμόρφωση με AI Act, GDPR, DSA

Επόμενα βήματα:

  1. Δοκίμασε το παράδειγμα με Playwright + stealth
  2. Πειραματίσου με LLM-based extraction
  3. Στήσε ένα production pipeline με Scrapy + Splash + rotating proxies

🔗 Σχετικά Άρθρα

← Επιστροφή στο Blog Όλα τα Άρθρα →