Scrape di siti statici e dinamici con Python e ProxyScrape API

Guide, Pitone, Le differenze, May-10-20245 minuti di lettura

In un mondo che fa sempre più affidamento sui dati, la capacità di raccogliere e analizzare grandi quantità di informazioni può dare alle aziende e ai professionisti un notevole vantaggio competitivo. Il web scraping, il processo di estrazione dei dati dai siti web, è un potente strumento nell'arsenale di analisti di dati, sviluppatori web, digital marketer e programmatori Python. Questa guida illustra le tecniche di base e avanzate di web scraping, evidenzia le migliori pratiche e presenta l' API di web scraping di ProxyScrape come soluzione flessibile per siti web statici e dinamici.

Identificare se un sito web è statico o dinamico

Per determinare se un sito web è statico o dinamico:

  • Ispezionare l'origine della pagina: Fare clic con il pulsante destro del mouse e selezionare "Visualizza origine pagina". Se tutto il contenuto è visibile e corrisponde a quello visualizzato nella pagina, è probabile che sia statico.
  • Utilizzare gli strumenti di sviluppo del browser: Aprire gli strumenti di sviluppo facendo clic con il pulsante destro del mouse sulla pagina e selezionando "Ispeziona", quindi osservare la scheda "Rete" mentre si interagisce con la pagina. Se vengono effettuate nuove richieste di rete in risposta alle interazioni, è probabile che si tratti di un sito dinamico.
  • Disabilitare JavaScript: Provare a disabilitare JavaScript nelle impostazioni del browser e ricaricare la pagina. Se la pagina smette di funzionare correttamente o mostra poco contenuto, è probabile che si affidi a JavaScript per il recupero e il rendering dei dati, il che indica una natura dinamica.

Questi metodi rappresentano solo alcuni modi per determinare se un sito web è statico o dinamico. Sebbene esistano altre strategie, abbiamo analizzato e identificato queste tecniche, che riteniamo ampiamente utilizzate ed efficaci.

Scraping di siti web statici con Requests e BeautifulSoup

Per scrappare contenuti statici, Python offre robuste librerie come `requests` per fare richieste HTTP e `BeautifulSoup` per analizzare documenti HTML e XML. Ecco un semplice esempio:

  • Fare una richiesta: Usare `requests` per recuperare il contenuto HTML della pagina.
  • Parsing con BeautifulSoup: Una volta ottenuto il contenuto della pagina, `BeautifulSoup` può analizzare ed estrarre informazioni specifiche.
importare le richieste
da bs4 importa BeautifulSoup

response = requests.get('http://example.com')

soup = BeautifulSoup(response.text, 'html.parser')

# Estrarre i dati desiderati
dati = soup.find_all('p')

Questo metodo è perfetto per coloro che hanno appena iniziato il loro percorso di scraping del web. È efficace per i siti web con contenuti statici, che richiedono una configurazione minima.

Scraping di siti web dinamici

I siti web dinamici rappresentano una sfida diversa. Questi siti web caricano i loro contenuti in modo asincrono con JavaScript, il che significa che il semplice scraping HTML non funziona perché i dati non sono presenti nel caricamento iniziale della pagina.

Esistono due modi per affrontare lo scraping dinamico dei siti web:

  • Il primo approccio consiste nell'utilizzare una libreria di automazione del browser come Playwright/Selenium per ottenere il contenuto e poi analizzarlo con Beautifulsoup.
  • Il secondo approccio è come giocare a fare il detective con la scheda di rete per individuare l'endpoint utilizzato dal sito web per recuperare i dati. Poi, si usa il modulo "request" di Python per recuperare i dati.

Navigazione di siti web dinamici con Playwright

Per effettuare lo scraping di contenuti dinamici, strumenti come Playwright imitano l'interazione di un utente reale con il browser, consentendo di effettuare lo scraping di dati caricati dinamicamente. Ecco una breve panoramica sull'uso di Playwright con Python:

  • Installazione di Playwright: installare il pacchetto Playwright e lo strumento a riga di comando.
    - "pip install playwright"
    - "playwright install"
  • Utilizzo di Playwright per simulare le interazioni: Scrivere uno script che navighi il sito web e interagisca con esso come necessario per attivare il caricamento di contenuti dinamici.
da playwright.sync_api import sync_playwright


if __name__ == '__main__':

   con sync_playwright() as p:

       browser = p.chromium.launch(headless=True)

      pagina = browser.new_page()

      page.goto('https://www.scrapethissite.com/pages/ajax-javascript/')

      # Simulare le interazioni qui

      page.click('//*[@id="2014"]')

      # Estrarre il contenuto dinamico

       content = page.inner_text('//*[@id="oscar"]/div/div[5]/div/table')

      print(contenuto)

       browser.close()

Analizzare il Pannello di rete per ottenere gli endpoint API:

  • Aprire gli strumenti per gli sviluppatori
    a. Aprite il sito web che vi interessa nel vostro browser.
    b. Fate clic con il tasto destro del mouse su un punto qualsiasi della pagina e selezionate Ispeziona oppure premete Ctrl+Maiusc+I (Cmd+Option+I su Mac) per aprire gli strumenti per gli sviluppatori.
  • Ispezione della scheda Rete
    a. Fare clic sulla scheda Rete negli strumenti per gli sviluppatori. In questa scheda vengono visualizzate tutte le richieste di rete effettuate dal sito web.
    b. Aggiornare la pagina per iniziare a rilevare il traffico dall'inizio.
  • Filtrare e identificare le richieste AJAX
    a. È possibile filtrare le richieste in base a tipi come XHR (XMLHttpRequest), comunemente utilizzati per le richieste AJAX.
    b. Interagire con la pagina, ad esempio facendo clic su pulsanti, compilando moduli o scorrendo, per attivare il caricamento dinamico dei contenuti.
    c. Osservare le richieste di rete che appaiono quando si eseguono queste azioni. Cercate le richieste che recuperano i dati che vi interessano.
  • Analizzare la richiesta
    a. Fare clic su una richiesta nella scheda Rete che sembra stia recuperando i dati necessari.
    b. Controllare la sezione Intestazioni per vedere il metodo di richiesta (GET, POST, ecc.), l'URL e altre intestazioni.
  • Replicare la richiesta usando Python
    a. Usare le informazioni della scheda Headers per replicare la richiesta usando la libreria requests di Python. Ecco un esempio di base di come si potrebbe fare:
import requests

# URL from the AJAX request
url = 'https://example.com/api/data'

# Any headers you observed that are necessary, like user-agent, authorization tokens, etc.
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36,gzip(gfe)',
    'Authorization': 'Bearer token_if_needed'
}

# If it's a POST request, you might also need to send data
data = {
    'example_key': 'example_value'
}

# Replace 'get' with 'post' if the request type is POST
response = requests.get(url, headers=headers, data=data if 'post' in locals() else None)

# To view the response
print(response.json()) 

Utilizzo di un'API di scraping web per entrambi gli scenari

Sebbene la padronanza delle richieste e di Playwright o di qualsiasi altra libreria client Http possa essere gratificante, richiede tempo e impegno per essere gestita correttamente. Un approccio alternativo consiste nello sfruttare un'API di scraping del Web che astrae la complessità delle attività di scraping. Non solo gestisce l'invio delle richieste HTTP, ma fornisce anche assistenza con tecniche anti-ban per evitare di essere bloccati da alcuni siti web.

Presentazione dell'API di scraping web di ProxyScrape

ProxyScrape offre un' API di Web Scraping che semplifica l'estrazione di dati da siti web statici e dinamici.

Le caratteristiche dell'API includono:

  • Facile integrazione con siti dinamici e statici.
  • Supporto completo per diversi tipi di attività di scraping del web.
  • Ampio pool di indirizzi IP
  • Offre fino a 100.000 richieste gratuite, consentendo agli utenti di esplorare e realizzare il pieno potenziale dell'API senza investimenti immediati.
  • Sofisticata tecnologia anti-ban, studiata su misura per i siti web noti per le loro difficoltà di scraping.
  • Le azioni consentono di controllare con precisione i tempi di ricezione dei risultati del sito web. Ciò include l'attesa di una particolare richiesta di URL, l'anticipazione della comparsa di un elemento sul sito, le attività successive allo scorrimento e altro ancora. Utilizzando

ProxyScrape API di web scraping con un sito web statico:

Questa è un'illustrazione di come sia possibile incorporare la nostra API di web scraping nei vostri script Python per siti web statici o per chiamare un endpoint API estratto dal pannello di ispezione del vostro browser:

import requests
import base64
import json

data = {
    "url": "https://books.toscrape.com/",
    "httpResponseBody": True
}

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.post('https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request', headers=headers, json=data)

if response.status_code == 200:
    json_response = response.json()
    if 'browserHtml' in json_response['data']:
        print(json_response['data']['browserHtml'])
    else:
        print(base64.b64decode(json_response['data']['httpResponseBody']).decode())
else:
    print("Error:", response.status_code)

ProxyScrape API di web scraping con un sito web dinamico:

Ecco un esempio in cui aspettiamo che inizi il caricamento della favicon. Di solito è l'ultima richiesta a partire sul sito web di prova che stiamo usando.

import requests
import json

url = 'https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request'

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': '<your api key>'  # Make sure to replace <your api key> with your actual API key
}

payload = {
    "url": "https://books.toscrape.com/",
    "browserHtml": True,
    "actions": [
        {
            "action": "waitForRequest",
            "urlPattern": "https://books.toscrape.com/static/oscar/favicon.ico",
            "urlMatchingOptions": "exact"
        }
    ]
}

response = requests.post(url, headers=headers, json=payload)

# Print the response from the server
print(response.text)  # Prints the response body as text

Migliori pratiche di scraping del Web

Indipendentemente dagli strumenti o dalle API scelti, il rispetto delle condizioni d'uso dei siti web, la limitazione della velocità di richiesta per evitare i divieti IP e l'utilizzo di proxy per lo scraping anonimo sono best practice fondamentali. ProxyScrape non solo fornisce proxy premium, residenziali, mobili e dedicati per queste esigenze, ma incoraggia lo scraping web etico.

Conclusione

  • Sia che si tratti di un hobby, sia che si tratti di integrare il web scraping nel proprio kit di strumenti professionali, è essenziale capire la distinzione tra siti web statici e dinamici e sapere come eseguire efficacemente lo scraping di entrambi. Combinando librerie Python come Requests e Playwright/Selenium con Beautifulsoup, sarete in grado di gestire le vostre sfide di scraping del web.
  • Se i vostri script di scraping web vengono rilevati come bot e quindi bloccati, o se desiderate ottimizzare e semplificare il processo di invio delle richieste, prendete in considerazione la nostra API di scraping web. È stata progettata per gestire questi problemi in modo efficiente per conto vostro.
  • Ricordate che il futuro del web scraping è luminoso e che, attenendosi alle migliori pratiche e sfruttando strumenti all'avanguardia, è possibile sbloccare un mondo di dati in attesa di essere scoperti.

Siete pronti a iniziare la vostra avventura nel web scraping? Iscrivetevi oggi stesso a ProxyScrape ed esplorate le infinite possibilità del web con i nostri proxy dedicati, i proxy residenziali e l'API di scraping web completa.