Client-side web scraping with JavaScript

Il problema dello scraping risulta di grande attualita’, dal momento che svariate attivita’ commerciali si basano sul confronto di merci e/o di prezzi indicati sul web.

E’ ad esempio il confronto delle offerte alberghiere, o di quelle dei biglietti d’aereo, o ancora i prezzi di appartamenti, o infine le quotazioni del mercato azionario.

Un’altra applicazione, davvero riprovevole, e[ quella di spiare i gusti degli utenti per fini pubblicitari, sino a viziarne scelte e classe di spesa.

Il problema principale e’ il rispetto delle vigenti normative in fatto di copyright delle informazioni e dei programmi contenuti in siti terzi.

Daltronde il realizzatore di un sito difficilmente concepisce le sue pagine, in modo da essere sistematicamente controllate da chiunque, evitando di strutturare il proprio data base.

il concetto e’ ben spiegato alla pagina https://it.wikipedia.org/wiki/Web_scraping.

In dettaglio, chiunque volesse eseguire lo scraping, dovrebbe conoscere il protocollo di inserimento delle informazioni di un sito terzo e ancora che questo sito terzo utilizzi sempre lo stesso protocollo e formato.

In pratica il realizzatore del sito non e’ certamente tenuto ad inserire i suoi dati sempre nello stesso formato e il probabile “raschiatore” di informazioni avrebbe serie difficolta’ a modificare giornalmente la sua attrezzatura di scraping per poter pescare le nuove informazioni del giorno.

Per questo motivo esistono API a pagamento, che forniscono un tot di visite mensili, progettate ad hoc, quasi sicuramente con un accordo commerciale dei siti da spiare.

A titolo di esempio, si riportano alcune pagine, attualmente consultabili sul web, che evidenziano il problema.

 Pagina di spiegazione dello scraping

Diffbot

rappresenta poi una sfida alla conoscenza, intendendo trattare tutte le informazioni mondiali contenute nel web.

Risulta di notevole interesse poter effettuare lo scraping lato client, il che’ deve avvenire ad esempio con istruzioni scritte in javascript, che consentirebbero a tutti gli utenti di aggiornare in automatico il campo di informazioni di maggior interesse.

Questo e’ d’altronde la direzione per istruire una intelligenza artificiale, sprovvista di apparati sensoriali, ma che possa accedere al mondo esterno unicamente da una porta seriale collegata ad internet.

Si ribadisce che qui si illustra velocemente lo stato dell’arte attuale dello scraping lato client, ossia con linguaggi lato client quale javascript.

Diversamente, lato server, ad esempio col linguaggio PHP, è estremamente semplice effettuare l’operazione, sempre che il server non si rifiuti di eseguier;a, potendo con un’unica istruzione del tipo:       file_get_contents($url);   cercare su una stringa tutto il contenuto di una pagina di un sito, come per esempio il sito    http://www.google.it

<?php
$url = ‘http://www.google.it’;

$get = file_get_contents($url);

echo $get;
?>

Il problema si riduce allora nell’analizzare con intelligenza la stringa $get, che puo’ essere riversata lato client ed analizzata con le tecniche tipiche di javascript. come ad esempio con l’istruzione .getElementsByTagName(NomedelTag) che crea una lista di tag, (con tutte le precauzioni descritte alla data corrente in

https://developer.mozilla.org/it/docs/Web/API/Element/getElementsByTagName  )

 

Un bell’esempio di accesso “cross-domain” e’ riportato in questa pagina:

http://www.trenografico.altervista.org/

In generale allora, pur possedendo tutte le informazioni della pagina del sito, non se ne conosce il format, e sara’ cura del programmatore doversi destreggiare filtrando la stringa con criteri sicuramente primari, quali l’elenco dei tag di HTML (<meta> , <script> , <div>,  <span>, <a> , o altre parole chiave.).

Perche’ allora non trattare l’argomento con linguaggi tipici lato server?

La risposta e’ ovvia: non tutti possiedono un server o desiderano utilizzarlo.

Chi non intende utilizzare un proprio sito collegato ad un server, puo’ infatti avere l’esigenza di aggiornare il proprio data-base privatamente e allora puo’ farlo unicamente con le tecnologie lato client, del tip Ajax javascript.

In questa pagina ci si sofferma sull’approccio lato client mediante javascript.

Vengono quindi riportati frammenti di istruzioni in js, adatte allo scraping di informazioni:

https://apify.com/vqube/Ffuzs-api-google-com

Perché il mondo ha bisogno di una libreria di scraping web universale per JavaScript:

Questa esigenza e’ ben spiegata in questa pagina:

https://hackernoon.com/why-the-world-needs-a-universal-web-scraping-library-for-javascript-21c6b3390e02

in cui si illustra l’azione della libreria  Apify SDK     che presuppone la presenza di Node.js 8 o versioni successive installato sul proprio computer.

Nella pagina segnalata viene illustrato un esempio di utilizzo di script che esegue una scansione approfondita ricorsiva di https://www.iana.org utilizzando Puppeteer. Il numero di processi e schede di Puppeteer viene controllato automaticamente in base alla CPU e alla memoria disponibili nel sistema.

L’indirizzo web https://www.iana.org/  si riferisce al sito ufficiale della Internet Assigned Numbers Authority (IANA), che gestisce tutti gli indirizzi del web.

dal sito https://www.stefanosalustri.com/blog/5-strumenti-gratuiti-per-fare-scraping/  vengono tratte  informazioni interessanti

ebscraper.io

Sito web: http://webscraper.io/

Web Scraper è un’estensione di Google Chrome di recente reapizzazione, che si integra con la Console per Sviluppatori. Una volta lanciata, l’estensione permette di creare una sitemap del sito che si vuole “scrapare” selezionando i vari elementi e fornendo un’anteprima del risultato.

Google Spreadsheets è il tool di Google dedicato ai fogli di calcolo (la versione Googliana di Excel); lo strumento non nasce come sistema di scraping ma grazie alla funzione IMPORTXML permette l’importazione di vari tipi di dati strutturati, tra cui XML, HTML, CSV, TSV e feed XML RSS e ATOM.

Nel file spreadsheet va inserito l’url della pagina che si vuole analizzare e le query xpath che vanno ad identificare gli elementi da scansionare.

Una volta eseguita la funzione importa nel file Google i dati della pagina che stiamo scansionando.>>

L’utente puo’ accedere a questa pagina per vedere tracciati tutti i suoi fogli excel:

https://spreadsheets.google.com/

Si può ricorrere anche a:  https://docs.google.com/spreadsheets/u/0/

per creare e condividere on-line fogli excel

 

Si segnala ancora la presenza di  html-agility-pack studiando gli esempi proposi nella pagina:

https://html-agility-pack.net/online-examples

Per concludere lo stato dell’arte dell’argomento, è importante tener presente quanto stabilito dalla Corte di Giustizia  Europea, con Sentenza del 15 gennaio 2015, relativamente alla controversia sorta tra la compagnia aerea Ryanair Ltd e la società  PR Aviation BV, in fatto di violazione dei diritti di Autore, per aver quest’ultima utilizzato lo scraping sul data-base della prima, per ottenere un profitto dal viaggiatore.

La Corte si è dunque ha reso una pronuncia relativa all’interpretazione della Direttiva 96/9/CE sulla tutela giuridica delle banche dati in un caso concernente il cd. screen scraping di siti web.

Si reinvia all’articolo   http://www.portolano.it/pcc_newsletters/la-corte-di-giustizia-si-pronuncia-sullo-screen-scraping-di-banche-dati-online/ per una piu’ diffusa spiegazione.

Infine, in questo sito, si riportano diversi programmi in commercio:

https://www.capterra.com/data-extraction-software/

Seguono alcune pagine interessanti con alcuni esempi significativi:

http://simplehtmldom.sourceforge.net/

https://www.excogitoweb.it/web-scraping-tecniche-di-scraping-in-chiave-seo/

https://medium.freecodecamp.org/how-to-scrape-websites-with-python-and-beautifulsoup-5946935d93fe

https://www.mattepuffo.com/blog/articolo/2159-trovare-il-titolo-di-una-pagina-web-con-php.html

 

Tra l’altro si segnala   https://www.bloomberg.com/quote/BA:US  che indica le quotazioni di borsa