top of page

Web Scraping con Python la Guida Completa


Introduzione allo Web Scraping con Python

In passato raccogliere dati era un lavoro noioso ea volte molto costoso. I progetti di machine learning non possono vivere senza dati. Fortunatamente, oggigiorno abbiamo a nostra disposizione molti dati sul web. Possiamo copiare i dati dal web per creare il nostro set di dati. Possiamo scaricare manualmente i file e salvarli sul disco. Ma possiamo farlo in modo più efficiente automatizzando la raccolta dei dati. Ci sono diversi strumenti in Python che possono aiutare l'automazione.

Dopo aver terminato questo tutorial, saprai:

  • Come utilizzare la libreria delle richieste per leggere i dati online tramite HTTP

  • Come leggere le tabelle sulle pagine web usando pandas

  • Come utilizzare Selenium per emulare le operazioni del browser



Alcuni siti Web possono contenere una quantità molto grande di dati inestimabili.

I prezzi delle azioni, i dettagli dei prodotti, le statistiche sportive, i contatti dell'azienda e molto altro


Se si desidera accedere a queste informazioni, è necessario utilizzare qualsiasi formato utilizzato dal sito Web o copiare e incollare le informazioni manualmente in un nuovo documento. Ecco dove può aiutare il web scraping con Python.


Web Scraping con Python la Guida Completa
Web Scraping con Python la Guida Completa


Che cos'è il web scraping?

Il web scraping si riferisce all'estrazione di dati da un sito web . Queste informazioni vengono raccolte e quindi esportate in un formato più utile per l'utente. Che si tratti di un foglio di calcolo o di un'API.


Sebbene lo scraping web possa essere eseguito manualmente , nella maggior parte dei casi, quando si esegue lo scraping dei dati web si preferiscono strumenti automatizzati in quanto possono essere meno costosi e funzionare a una velocità maggiore. Python è il preferito del settore Web Scraping.


Ma nella maggior parte dei casi, il web scraping non è un compito semplice. I siti Web sono disponibili in molte forme e forme , di conseguenza, i web scraper variano in funzionalità e caratteristiche.


Tieni presente che potresti incontrare captcha quando tenti di eseguire lo scraping di alcuni siti Web.


Se vuoisapere come usare python per fare Web Scraping continua a leggere l'articolo alla

fine ci sono diversi tutorial.



Il web scraping con python è legale?

In breve, l'azione del web scraping non è illegale. Tuttavia, alcune regole devono essere seguite. Il web scraping diventa illegale quando vengono estratti dati non pubblicamente disponibili.


Ciò non sorprende data la crescita del web scraping e molti recenti casi legali relativi allo scraping web.



Come funzionano i web scraper?

Quindi, come funzionano i web scraper? I web scraper automatizzati funzionano in modo piuttosto semplice ma anche complesso. Dopotutto, i siti Web sono creati per essere compresi dagli esseri umani, non dalle macchine.


Innanzitutto, al web scraper verranno forniti uno o più URL da caricare prima dello scraping. Lo scraper quindi carica l'intero codice HTML per la pagina in questione. Gli scraper più avanzati eseguiranno il rendering dell'intero sito Web.


Quindi lo scraper estrarrà tutti i dati sulla pagina o dati specifici selezionati dall'utente prima dell'esecuzione del progetto.


Idealmente, l'utente seguirà il processo di selezione dei dati specifici desiderati dalla pagina. Ad esempio, potresti voler raschiare una pagina di prodotti Amazon per prezzi e modelli, ma non sei necessariamente interessato alle recensioni dei prodotti.

Infine, il web scraper emetterà tutti i dati che sono stati raccolti in un formato più utile per l'utente.


La maggior parte degli scraper Web genererà i dati in un foglio di calcolo CSV o Excel , mentre gli scraper più avanzati supporteranno altri formati come JSON che possono essere utilizzati per un'API.


Che tipo di web scraper esistono?

I web scraper possono differire drasticamente l'uno dall'altro caso per caso.

Per semplicità, analizzeremo alcuni di questi aspetti in 4 categorie . Naturalmente, ci sono più complessità in gioco quando si confrontano i web scraper.

  • autocostruito o prefabbricato

  • estensione del browser vs software

  • Interfaccia utente

  • Cloud vs locale


Web Scraper Autocostruito o Precostruito

Proprio come chiunque può creare un sito Web, chiunque può creare il proprio web scraper, anche tu creerai il tuo web scraoer in python tra poco .

Tuttavia, gli strumenti disponibili per creare il tuo web scraper richiedono ancora alcune conoscenze di programmazione. La portata di questa conoscenza aumenta anche con il numero di funzioni che vorresti che il tuo raschietto avesse.


D'altra parte, ci sono numerosi web scraper predefiniti che puoi scaricare ed eseguire subito. Alcuni di questi includeranno anche opzioni avanzate come la pianificazione dello scrape, le esportazioni JSON e Fogli Google e altro ancora.


Web Scraper Estensione del browser vs software

In termini generali, i web scraper sono disponibili in due forme: estensioni del browser o software per computer.


Le estensioni del browser sono programmi simili a app che possono essere aggiunti ai tuoi browser come Google Chrome o Firefox. Alcune estensioni del browser popolari includono temi, blocchi degli annunci, estensioni di messaggistica e altro ancora.

Le estensioni di web scraping hanno il vantaggio di essere più semplici da eseguire e di essere integrate direttamente nel tuo browser.


Tuttavia, queste estensioni sono generalmente limitate dal vivere nel tuo browser. Ciò significa che qualsiasi funzionalità avanzata che dovrebbe verificarsi al di fuori del browser sarebbe impossibile da implementare. Ad esempio, le rotazioni IP non sarebbero possibili in questo tipo di estensione.


D'altra parte, avrai un vero software di scraping web che può essere scaricato e installato sul tuo computer. Sebbene siano un po' meno convenienti delle estensioni del browser, lo compensano con funzionalità avanzate che non sono limitate da ciò che il tuo browser può e non può fare.


Web Scraper a Interfaccia utente

L'interfaccia utente tra i web scraper può variare molto.

Ad esempio, alcuni strumenti di scraping web verranno eseguiti con un'interfaccia utente minima e una riga di comando. Alcuni utenti potrebbero trovarlo poco intuitivo o confuso.

D'altra parte, alcuni web scraper avranno un'interfaccia utente completa in cui il sito Web è completamente visualizzato per consentire all'utente di fare semplicemente clic sui dati che desidera raschiare. Questi web scraper sono generalmente più facili da utilizzare per la maggior parte delle persone con conoscenze tecniche limitate.

Alcuni scraper arriveranno fino all'integrazione di suggerimenti e suggerimenti di aiuto tramite la loro interfaccia utente per assicurarsi che l'utente comprenda ogni funzionalità offerta dal software.


Web Scraper in Cloud vs locale

Da dove fa effettivamente il suo lavoro il tuo web scraper?

Gli scraper web locali verranno eseguiti sul tuo computer utilizzando le sue risorse e la connessione a Internet. Ciò significa che se il tuo web scraper ha un utilizzo elevato di CPU o RAM, il tuo computer potrebbe diventare piuttosto lento durante l'esecuzione dello scrape. Con lunghe attività di scraping, questo potrebbe mettere fuori uso il tuo computer per ore.


Inoltre, se il tuo scraper è impostato per funzionare su un numero elevato di URL (come le pagine dei prodotti), può avere un impatto sui limiti di dati del tuo IP.

Gli scraper Web basati su cloud vengono eseguiti su un server esterno che di solito viene fornito dall'azienda che ha sviluppato lo scraper stesso. Ciò significa che le risorse del tuo computer vengono liberate mentre il tuo raschietto è in esecuzione e raccoglie i dati. Puoi quindi lavorare su altre attività ed essere avvisato in seguito quando il tuo scrape è pronto per essere esportato.


Ciò consente anche un'integrazione molto semplice di funzionalità avanzate come la rotazione IP, che può impedire che il tuo scraper venga bloccato dai principali siti Web a causa della loro attività di scraping.


A cosa servono i web scraper?

A questo punto, probabilmente puoi pensare a diversi modi in cui è possibile utilizzare i web scraper . Di seguito abbiamo inserito alcuni dei più comuni (più alcuni unici).


web scraper di annunci immobiliari

Molti agenti immobiliari utilizzano il web scraping per popolare il loro database di proprietà disponibili in vendita o in affitto.


Ad esempio, un'agenzia immobiliare rassegnerà le inserzioni MLS per creare un'API che popola direttamente queste informazioni sul proprio sito Web. In questo modo, possono agire come agenti per la proprietà quando qualcuno trova questo annuncio sul proprio sito.

La maggior parte degli annunci che troverai su un sito web immobiliare sono generati automaticamente da un'API.


web scraper per Statistiche e approfondimenti del settore

Molte aziende utilizzano il web scraping per creare enormi database e trarre da questi approfondimenti specifici del settore. Queste aziende possono quindi vendere l'accesso a queste informazioni alle aziende di detti settori.


Ad esempio, una società potrebbe raccogliere e analizzare tonnellate di dati su prezzi del petrolio, esportazioni e importazioni per vendere le proprie conoscenze alle compagnie petrolifere di tutto il mondo.


web scraper per Siti di shopping competitor

Alcuni diversi siti Web e applicazioni possono aiutarti a confrontare facilmente i prezzi tra diversi rivenditori per lo stesso prodotto.


Un modo in cui funzionano questi siti Web consiste nell'utilizzare i web scraper per raccogliere quotidianamente i dati dei prodotti e i prezzi da ciascun rivenditore. In questo modo, possono fornire ai propri utenti i dati di confronto di cui hanno bisogno.


Panoramica del Tutorial su Web Scraping con Python

Questo tutorial è diviso in 4 parti:

  • Utilizzare requests e python per fare WebScraping

  • Utilizzare beautifulsoup4 e python per fare WebScraping

  • Leggere le tabelle dal web usando pandas

  • Leggere contenuti dinamici con Selenium

Web Scraping con Python la Guida Completa
Web Scraping con Python la Guida Completa


Utilizzare requests e python per fare Web Scraping

Quando si parla di scrivere un programma Python per fare Web Scraping, è inevitabile che non si possa evitare la libreria requests . Devi installare anche BeautifulSoup e lxml che tratteremo in seguito.


Usa questi comandi in base a dove usi python :



pip install requests beautifulsoup4 lxml #per python <3
pip3 install requests beautifulsoup4 lxml #per python >=3
!pip install requests beautifulsoup4 lxml #per Google Colab

Request ti fornisce un'interfaccia che ti consente di interagire facilmente con il web.

Il caso d'uso molto semplice sarebbe leggere una pagina Web da un URL:


import requests

# Lat-Lon di Milano
URL = "https://weather.com/weather/today/l/45.46,-9.18"
resp = requests.get(URL)
print(resp.status_code)
print(resp.text)

facendo girare il programma questo sarà l'output del tuo primo web scraping di dati

200
<!doctype html><html dir="ltr" lang="en-US"><head>
      <meta data-react-helmet="true" charset="utf-8"/><meta data-react-helmet="true"
name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
...

Se hai familiarità con il protocollo HTTP, probabilmente ricorderai che un codice di stato di 200 significa che la richiesta è stata soddisfatta con successo. Quindi possiamo leggere la risposta. In quanto sopra, leggiamo la risposta testuale e otteniamo l'HTML della pagina web.


Se si tratta di un CSV o di altri dati testuali, possiamo leggerli usando .text sull'oggetto risposta. Ad esempio, ecco come possiamo leggere un CSV dai dati economici della Federal Reserve:



import io
import pandas as pd
import requests

URL = "https://fred.stlouisfed.org/graph/fredgraph.csv?id=T10YIE&cosd=2017-04-14&coed=2022-04-14"
resp = requests.get(URL)
if resp.status_code == 200:
   csvtext = resp.text
   csvbuffer = io.StringIO(csvtext)
   df = pd.read_csv(csvbuffer)
   print(df)

facendo girare il programma questo sarà l'output del tuo primo web scraping di dati

            DATE T10YIE
0     2017-04-17   1.88
1     2017-04-18   1.85
2     2017-04-19   1.85
3     2017-04-20   1.85
4     2017-04-21   1.84
...          ...    ...
1299  2022-04-08   2.87
1300  2022-04-11   2.91
1301  2022-04-12   2.86
1302  2022-04-13    2.8
1303  2022-04-14   2.89

[1304 rows x 2 columns]

Se i dati sono sotto forma di JSON, possiamo leggerli come testo o persino decodificarli. Ad esempio, il seguente esempio è estrarre alcuni dati da GitHub in formato JSON e convertirli in un dizionario Python:



import requests

URL = "https://api.github.com/users/tester"
resp = requests.get(URL)
if resp.status_code == 200:
    data = resp.json()
    print(data)
facendo girare il programma questo sarà l'output del tuo primo web scraping di dati

{'login': '', 'id': 12891, 'node_id': 'MDQ6VXNlcjEyODkx',
'avatar_url': 'https://avatars.githubusercontent.com/u/12891?v=4',
'gravatar_id': '', 'url': 'https://api.github.com/users/tester',
'html_url': 'https://github.com/tester',
...
'company': 'tester', 'blog': 'http://tester.com',
'location': None, 'email': None, 'hireable': None,
'bio': 'tester tester tester tester.', 'twitter_username': None,
'public_repos': 5, 'public_gists': 0, 'followers': 1752, 'following': 0,
'created_at': '2008-06-07T02:20:58Z', 'updated_at': '2022-02-22T19:56:27Z'
}

Ma se l'URL ti fornisce alcuni dati binari, come un file ZIP o un'immagine JPEG, devi contentinvece ottenerli nell'attributo, poiché questi sarebbero i dati binari. Ad esempio, ecco come possiamo scaricare un'immagine (il logo di Wikipedia):



import requests
 
URL = "https://en.wikipedia.org/static/images/project-logos/enwiki.png"
wikilogo = requests.get(URL)
if wikilogo.status_code == 200:
    with open("enwiki.png", "wb") as fp:
        fp.write(wikilogo.content)


Dato che abbiamo già ottenuto la pagina web, come dovremmo estrarre i dati? Questo è al di là di ciò che la requests può fornirci, ma possiamo usare una biblioteca diversa per aiutare. Ci sono due modi in cui possiamo farlo, a seconda di come vogliamo specificare i dati.


Il primo modo è considerare l'HTML come una sorta di documento XML e utilizzare il linguaggio XPath per estrarre l'elemento. In questo caso, possiamo utilizzare la lxml libreria per creare prima un modello a oggetti del documento (DOM) e quindi cercare tramite XPath:


from lxml import etree
 
# DOM HTML 
dom = etree.HTML(resp.text)
# Cerchiamo la temperatura
elements = dom.xpath("//span[@data-testid='TemperatureValue' and contains(@class,'CurrentConditions')]")
print(elements[0].text)

facendo girare il programma questo sarà l'output del tuo primo web scraping di dati



61°



XPath è una stringa che specifica come trovare un elemento. L'oggetto lxml fornisce una funzione xpath()per cercare nel DOM elementi che corrispondono alla stringa XPath, che possono essere più corrispondenze. L'XPath sopra significa trovare un elemento HTML ovunque con il <span> tag e con l'attributo data-test id corrispondente a

" TemperatureValue" e che class inizia con " CurrentConditions." Possiamo imparare questo dagli strumenti di sviluppo del browser (ad esempio, lo screenshot di Chrome qui sotto) ispezionando la fonte HTML.


Web Scraping con Python la Guida Completa
Web Scraping con Python la Guida Completa

Questo esempio serve per trovare la temperatura di New York City, fornita da questo particolare elemento che otteniamo da questa pagina web. Sappiamo che il primo elemento abbinato all'XPath è ciò di cui abbiamo bisogno e possiamo leggere il testo all'interno del tag <span> .



Utilizzare BeautifulSoup e python per fare Web Scraping


L'altro modo è utilizzare i selettori CSS sul documento HTML, che possiamo utilizzare dalla libreria BeautifulSoup:


from bs4 import BeautifulSoup

soup = BeautifulSoup(resp.text, "lxml")
elements = soup.select('span[data-testid="TemperatureValue"][class^="CurrentConditions"]')
print(elements[0].text)

facendo girare il programma questo sarà l'output del tuo primo web scraping di dati
61°

In quanto sopra, passiamo prima il nostro testo HTML a BeautifulSoup.


BeautifulSoup supporta vari parser HTML, ognuno con capacità diverse. In quanto sopra, utilizziamo la lxmllibreria come parser come raccomandato da BeautifulSoup (e spesso è anche il più veloce). Il selettore CSS è un mini-linguaggio diverso, con pro e contro rispetto a XPath. Il selettore sopra è identico all'XPath che abbiamo usato nell'esempio precedente. Pertanto, possiamo ottenere la stessa temperatura dal primo elemento abbinato.

Quello che segue è un codice completo per stampare la temperatura attuale di New York secondo le informazioni in tempo reale sul web:



import requests
from lxml import etree

# Reading temperature of New York
URL = "https://weather.com/weather/today/l/40.75,-73.98"
resp = requests.get(URL)

if resp.status_code == 200:
    # Using lxml
    dom = etree.HTML(resp.text)
    elements = dom.xpath("//span[@data-testid='TemperatureValue' and contains(@class,'CurrentConditions')]")
    print(elements[0].text)

    # Using BeautifulSoup
    soup = BeautifulSoup(resp.text, "lxml")
    elements = soup.select('span[data-testid="TemperatureValue"][class^="CurrentConditions"]')
    print(elements[0].text)

Come puoi immaginare, puoi raccogliere una serie temporale della temperatura eseguendo questo script a intervalli regolari. Allo stesso modo, possiamo raccogliere dati automaticamente da vari siti web. È così che possiamo ottenere dati per i nostri progetti di machine learning.



Leggere le tabelle sul Web usando pandas

Web Scraping di tabelle

Molto spesso, le pagine web utilizzeranno le tabelle per trasportare i dati. Se la pagina è abbastanza semplice, potremmo anche saltare l'ispezione per scoprire il selettore XPath o CSS e utilizzare i panda per ottenere tutte le tabelle sulla pagina in un colpo solo. È abbastanza semplice da essere fatto in una riga:



import pandas as pd

tables = pd.read_html("https://www.federalreserve.gov/releases/h15/")
print(tables)
facendo girare il programma questo sarà l'output del tuo primo web scraping di dati

[                               Instruments 2022Apr7 2022Apr8 2022Apr11 2022Apr12 2022Apr13
0          Federal funds (effective) 1 2 3     0.33     0.33      0.33      0.33      0.33
1                 Commercial Paper 3 4 5 6      NaN      NaN       NaN       NaN       NaN
2                             Nonfinancial      NaN      NaN       NaN       NaN       NaN
3                                  1-month     0.30     0.34      0.36      0.39      0.39
4                                  2-month     n.a.     0.48      n.a.      n.a.      n.a.
5                                  3-month     n.a.     n.a.      n.a.      0.78      0.78
6                                Financial      NaN      NaN       NaN       NaN       NaN
7                                  1-month     0.49     0.45      0.46      0.39      0.46
8                                  2-month     n.a.     n.a.      0.60      0.71      n.a.
9                                  3-month     0.85     0.81      0.75      n.a.      0.86
10                   Bank prime loan 2 3 7     3.50     3.50      3.50      3.50      3.50
11      Discount window primary credit 2 8     0.50     0.50      0.50      0.50      0.50
12              U.S. government securities      NaN      NaN       NaN       NaN       NaN
13   Treasury bills (secondary market) 3 4      NaN      NaN       NaN       NaN       NaN
14                                  4-week     0.21     0.20      0.21      0.19      0.23
15                                 3-month     0.68     0.69      0.78      0.74      0.75
16                                 6-month     1.12     1.16      1.22      1.18      1.17
17                                  1-year     1.69     1.72      1.75      1.67      1.67
18            Treasury constant maturities      NaN      NaN       NaN       NaN       NaN
19                               Nominal 9      NaN      NaN       NaN       NaN       NaN
20                                 1-month     0.21     0.20      0.22      0.21      0.26
21                                 3-month     0.68     0.70      0.77      0.74      0.75
22                                 6-month     1.15     1.19      1.23      1.20      1.20
23                                  1-year     1.78     1.81      1.85      1.77      1.78
24                                  2-year     2.47     2.53      2.50      2.39      2.37
25                                  3-year     2.66     2.73      2.73      2.58      2.57
26                                  5-year     2.70     2.76      2.79      2.66      2.66
27                                  7-year     2.73     2.79      2.84      2.73      2.71
28                                 10-year     2.66     2.72      2.79      2.72      2.70
29                                 20-year     2.87     2.94      3.02      2.99      2.97
30                                 30-year     2.69     2.76      2.84      2.82      2.81
31                    Inflation indexed 10      NaN      NaN       NaN       NaN       NaN
32                                  5-year    -0.56    -0.57     -0.58     -0.65     -0.59
33                                  7-year    -0.34    -0.33     -0.32     -0.36     -0.31
34                                 10-year    -0.16    -0.15     -0.12     -0.14     -0.10
35                                 20-year     0.09     0.11      0.15      0.15      0.18
36                                 30-year     0.21     0.23      0.27      0.28      0.30
37  Inflation-indexed long-term average 11     0.23     0.26      0.30      0.30      0.33,       0               1
0  n.a.  Not available.]

La funzione read_html() in pandas legge un URL e trova tutte le tabelle nella pagina. Ogni tabella viene convertita in un DataFrame panda e quindi le restituisce tutte in un elenco. In questo esempio, stiamo leggendo i vari tassi di interesse della Federal Reserve, che ha solo una tabella in questa pagina. Le colonne della tabella sono identificate automaticamente da pandas.


È probabile che non tutte le tabelle siano ciò che ci interessa. A volte, la pagina Web utilizzerà una tabella semplicemente come un modo per formattare la pagina, ma pandas potrebbe non essere abbastanza intelligente da capirlo. Quindi abbiamo bisogno di testare e selezionare il risultato restituito dalla funzione read_html() .



Lettura di contenuti dinamici con il selenium

Una parte significativa delle pagine Web moderne è piena di JavaScript. Questo ci offre un'esperienza più elaborata, ma diventa un ostacolo da utilizzare come programma per estrarre i dati. Un esempio è la home page di Yahoo, che, se carichiamo la pagina e troviamo tutti i titoli delle notizie, ce ne sono molti meno di quelli che possiamo vedere sul browser:


import requests
 
# Leggiamo la Home page di Yahoo 
URL = "https://www.yahoo.com/"
resp = requests.get(URL)
dom = etree.HTML(resp.text)
 
# Stampiamo le Headline o titoli
elements = dom.xpath("//h3/a[u[@class='StretchedBox']]")
for elem in elements:
    print(etree.tostring(elem, method="text", encoding="unicode"))

Questo perché pagine web come questa si basano su JavaScript per popolare il contenuto. Famosi framework web come AngularJS o React sono alla base di questa categoria. La libreria Python, come requests, non comprende JavaScript. Pertanto, vedrai il risultato in modo diverso. Se i dati che desideri recuperare dal Web sono questi, puoi studiare come viene invocato JavaScript e imitare il comportamento del browser nel tuo programma. Ma questo è probabilmente troppo noioso per farlo funzionare.


L'altro modo è chiedere a un vero browser di leggere la pagina web invece di usare requests. Questo è ciò che può fare il selenio. Prima di poterlo utilizzare, dobbiamo installare la libreria:


pip install selenium


Ma Selenium è solo un framework per controllare i browser. Devi avere il browser installato sul tuo computer e il driver per connettere Selenium al browser. Se intendi utilizzare Chrome, devi scaricare e installare anche ChromeDriver .


È necessario inserire il driver nel percorso eseguibile in modo che Selenium possa invocarlo come un normale comando. Ad esempio, in Linux, devi solo ottenere l' chromedriver eseguibile dal file ZIP scaricato e inserirlo in /usr/local/bin.


Allo stesso modo, se stai usando Firefox, hai bisogno del GeckoDriver . Per maggiori dettagli sulla configurazione di Selenium, dovresti fare riferimento alla sua documentazione .

Successivamente, puoi utilizzare uno script Python per controllare il comportamento del browser. Per esempio:



import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
 
#  Lanciamo Chrome browser 
options = webdriver.ChromeOptions()
options.add_argument("headless")
browser = webdriver.Chrome(options=options)
 
# Apriamo una web page
browser.get("https://www.yahoo.com")
# Verifichiamo il corretto caricamento di tutta la pagina
def is_ready(browser):
    return browser.execute_script(r"""
        return document.readyState === 'complete'
    """)
WebDriverWait(browser, 30).until(is_ready)
 
# Scrolliamo verso il basso la pagina
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
WebDriverWait(browser, 30).until(is_ready)
 
# Cerchiamo i titoli delle news w stampiamole
elements = browser.find_elements(By.XPATH, "//h3/a[u[@class='StretchedBox']]")
for elem in elements:
    print(elem.text)
 
# IMPORTANTE, chiudi il bot, altrimenti la tua ram ti abbandonerà
browser.close()


Il codice sopra funziona come segue. Per prima cosa avviamo il browser in modalità headless, il che significa che chiediamo a Chrome di avviarsi ma non di visualizzarlo sullo schermo. Questo è importante se vogliamo eseguire il nostro script in remoto poiché potrebbe non esserci alcun supporto per la GUI. Tieni presente che ogni browser è sviluppato in modo diverso e quindi la sintassi delle opzioni che abbiamo utilizzato è specifica per Chrome. Se usiamo Firefox, il codice sarebbe invece questo:



options = webdriver.FirefoxOptions()
options.set_headless()
browser = webdriver.Firefox(firefox_options=options)


Dopo aver avviato il browser, gli diamo un URL da caricare. Ma poiché la rete richiede tempo per consegnare la pagina e il browser impiegherà tempo per renderla, dovremmo attendere che il browser sia pronto prima di procedere con l'operazione successiva. Rileviamo se il browser ha terminato il rendering utilizzando JavaScript. Facciamo eseguire a Selenium un codice JavaScript per noi e ci comunichiamo il risultato usando la funzione execute_script() .

L'utilizzo di Selenium è diverso dall'utilizzo della slibreria request in diversi aspetti.


Innanzitutto, non hai mai il contenuto web direttamente nel tuo codice Python. Invece, fai riferimento al contenuto del browser ogni volta che ne hai bisogno. Quindi gli elementi web restituiti dalla funzione find_elements() si riferiscono a oggetti all'interno del browser esterno, quindi non dobbiamo chiudere il browser prima di averli consumati. In secondo luogo, tutte le operazioni dovrebbero essere basate sull'interazione del browser piuttosto che sulle richieste di rete. Quindi è necessario controllare il browser emulando i movimenti della tastiera e del mouse. Ma in cambio, hai il browser completo con supporto JavaScript. Ad esempio, puoi utilizzare JavaScript per controllare la dimensione e la posizione di un elemento nella pagina, che conoscerai solo dopo il rendering degli elementi HTML.


Ci sono molte più funzioni fornite dal framework Selenium che possiamo coprire qui. È potente, ma poiché è connesso al browser, utilizzarlo è più impegnativo della libreria requests e molto più lento. Di solito, questa è l'ultima risorsa per la raccolta di informazioni dal web.


Riepilogo sullo Scraping Web con Python

In questo tutorial, hai visto gli strumenti che possiamo utilizzare per recuperare contenuti dal Web.

Nello specifico hai imparato:

  • Come utilizzare la libreria delle richieste per inviare la richiesta HTTP ed estrarre i dati dalla sua risposta

  • Come costruire un modello a oggetti del documento da HTML in modo da poter trovare alcune informazioni specifiche su una pagina web

  • Come leggere le tabelle su una pagina web in modo facile e veloce usando i panda

  • Come utilizzare Selenium per controllare un browser per affrontare i contenuti dinamici su una pagina web


Vuoi mettere in pratica quello che hai letto ?


Oppure segui i tutorial correlati :

PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset

Ebook Gratis

più di 10 libri da leggere

Editor Gratis

un editor python online

Progetti Gratis

più di 25 progetti python

App Gratis

4 servizi web con I.A.

Unisciti Ora a oltre
1.000.000
di lettori e appassionanti d'I.A.

Tutto ciò che riguarda l'intelligenza Artificiale, in unico posto, in italiano e gratis.

MEGLIO DI COSI' NON SI PUO' FARE

Dopo l'iscrizione riceverai diversi Regali

VUOI SCRIVERE ARTICOLI INSIEME A NOI.

Grazie

bottom of page