Come estrarre informazioni da una infobox di Wikipedia?

C’è questa fantastica infobox in . Come ottengo il valore di ?

    Il modo sbagliato: provare ad analizzare HTML

    Usa (cURL / jQuery / file_get_contents / requests / wget / più jQuery ) per recuperare il codice dell’articolo HTML dell’articolo, quindi usa un parser DOM per estrarre table.infobox tr[3] td / usa table.infobox tr[3] td .

    Questa è davvero una pessima idea per la maggior parte del tempo. Il codice HTML di Wikipedia non è particolarmente adatto all’analisi (in particolare le infobox che sono un sistema di modelli scritti a mano), le esatte modifiche della struttura da infobox a infobox e la struttura di una finestra informativa potrebbe cambiare nel tempo. Potresti anche perdere alcune funzionalità altrimenti disponibili, come l’internazionalizzazione.

    L’altro modo sbagliato: provare ad analizzare wikitext

    A prima vista, il wikitext di alcuni articoli sembra una rappresentazione piuttosto semplice del riquadro informazioni:

     {{ Infobox Foo | param1 = bar | param2 = 123 ... 

    In realtà, non è così. I modelli sono “ricorsivi” per cui potresti imbatterti in cose come param1 = {{convert|10|km|mi}} ; i parametri del modello potrebbero contenere codice wikitext o HTML complesso; alcuni parametri potrebbero mancare nell’articolo wikitext e recuperati dal modello da una sottopagina o da altro repository di dati. Solo scoprire dove un parametro inizia e finisce potrebbe non essere una semplice impresa se contiene altri modelli che hanno i loro parametri.

    Il modo ideale: utilizzare una fonte di dati strutturata

    Ci sono vari progetti per fornire le informazioni contenute nelle informazioni di Wikipedia in una forma strutturata; i due grandi sono Wikidata e DBpedia.

    Wikidata è un progetto per build una base di conoscenza contenente dati strutturati; è mantenuto dallo stesso movimento globale che ha costruito Wikipedia, quindi le informazioni sono in fase di trasferimento. Questa è una procedura manuale, quindi non tutte le informazioni in Wikipedia sono disponibili tramite Wikidata, d’altra parte ci sono molte informazioni che sono in Wikidata ma non in Wikipedia. Puoi trovare la pagina di Wikidata di un articolo e vedere quali informazioni contiene seguendo il link dell’articolo Wikidata nella barra degli strumenti a sinistra nella pagina dell’articolo; a livello di codice , è ansible accedere alle informazioni di Wikidata utilizzando il modulo API wbgetentities ( sandbox , spiegazione dei concetti ), ad esempio wikidata.org/w/api.php?action=wbgetentities&sites=enwiki&titles=Albert_Einstein . C’è anche un endpoint SPARQL , dump di database e client in PHP , Java e Python .

    DBPedia è un progetto per raccogliere informazioni sulla casella informazioni di Wikipedia con mezzi automatici e pubblicarlo in una forma strutturata. Puoi trovare la pagina DBPedia per un articolo di Wikipedia andando su http://dbpedia.org/page/ , ad es. http://dbpedia.org/page/Albert_Einstein . Ha molti formati di dati, dump, un endpoint SPARQL e varie altre cose .

    I modi sbagliati fatti bene

    Se le informazioni necessarie non sono disponibili tramite Wikidata o DBpedia, esistono ancora modi semi-strutturati per estrarre i dati da Infoboxes. Per l’estrazione basata su HTML è ansible utilizzare l’ API di contenuto REST di Wikipedia (ad esempio https://en.wikipedia.org/api/rest_v1/page/html/Albert_Einstein ) che restituisce un HTML più ricco, più semantico di quello utilizzato nelle pagine di articoli normali e conserva alcune informazioni sulla struttura del modello.

    In alternativa, è ansible iniziare da wikitext e analizzarlo in un albero di syntax utilizzando il più semplice modulo Python mwparserfromhell ( docs ) lato client o la più potente API JS Parsoid che interagisce con il servizio di contenuti REST di Wikipedia.

    Una libreria Python di livello superiore che tenta di estrarre i contenuti di infobox da wikitext è wptools .